單例模式實現java--sqlserver2005數據庫訪問操作類

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();

}

}

 

 

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章