package sqlserver;
import java.sql.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SqlServerDbAccess
{
private Connection con;
private PreparedStatement pstm;
private static SqlServerDbAccess dba ;
private String conString; //連接字符串
private String dbIp; //數據庫所在服務器IP地址
private String dbPort; //數據庫端口
private String dbName; //數據庫名
private String dbUser; //數據庫用戶名
private String dbPwd; //數據庫用戶密碼
private SqlServerDbAccess() //設置構造函數爲private,便於單例模式的實現
{
}
public static SqlServerDbAccess getDbAccess() //定義一個獲取DbAccess對象的方法,每次返回的都是同一個DbAccess對象
{
if(dba==null) //如果是第一次調用,則初始化
dba=new SqlServerDbAccess();
return dba;
}
public void setValue(String dbIp,String dbPort,String dbName,String dbUser,String dbPwd)
{
this.dbIp=dbIp;
this.dbPort=dbPort;
this.dbName=dbName;
this.dbUser=dbUser;
this.dbPwd=dbPwd;
conString="jdbc:sqlserver://"+dbIp+":"+dbPort+";databaseName="+dbName;
}
private void getCon() //獲取數據庫連接
{
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加載驅動包
try {
con = DriverManager.getConnection(conString, dbUser, dbPwd);//初始化數據庫連接
} catch (SQLException ex) {
System.out.println("初始化數據庫連接失敗!");
Logger.getLogger(SqlServerDbAccess.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (ClassNotFoundException ex) {
Logger.getLogger(SqlServerDbAccess.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("加載驅動包失敗!");
}
}
private void excute(String sql){
if(con==null){//如果是第一次連接,則初始化連接
getCon();
}
try {
pstm=con.prepareStatement(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public ResultSet getResultSet(String sql){//根據sql語句返回一個ResultSet結果集
excute(sql);
try {
return pstm.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public String getFirstUnit(String sql){//根據sql語句返回結果集的第一行第一列單元格數據
excute(sql);
try {
String value;
ResultSet rs=pstm.executeQuery();
rs.next();
value=rs.getString(1);
rs.close();
return value;//返回第一個單元格數據
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public ArrayList getFirstRow(String sql){//根據sql返回結果集的第一行所有數據。
excute(sql);
try {
ArrayList aList=new ArrayList();//新建一個arrayList對象。
ResultSet rs=pstm.executeQuery();
rs.next();//將指針指向結果集的第一行。
int columns=rs.getMetaData().getColumnCount();//獲取該結果集的列數。
for(int i=1;i<columns+1;i++){//因爲用索引取值是從1開始的。
aList.add(rs.getString(i));//將第一行的所有列都以String形式封裝到Arraylist。
}
return aList;//返回封裝好的arraylist.
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public int getInt(String sql){//返回受影響的行數,用於新建/更新/刪除及其他操作。
excute(sql);
try {
return pstm.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
public void close(){//當最後退出程序時執行就行了,因爲是單例模式,所以不用每次都關
try {
pstm.cancel();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}