單例模式實現--Oracle數據庫操作類

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

 

 

public class OracleDbAccess {

private Connection con;//連接

private PreparedStatement  pstm;

private String dbIp="127.0.0.1";

private String dbPort="1521";

private String dbName="ICSS";

private String dbUser="jsp";

private String dbPwd="jsp";

private String conString="jdbc:oracle:thin:@"+dbIp+":"+dbPort+":"+dbName;

private static OracleDbAccess dba;//數據庫操作類對象

//單例模式,構造函數私有

private OracleDbAccess(){

}

//單例模式,如果第一次使用則新建,如果不是則直接發送

public static OracleDbAccess getDbAccess(){

if(dba==null)

dba=new OracleDbAccess();

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;

       this.conString="jdbc:oracle:thin:@"+dbIp+":"+dbPort+":"+dbName;

}

//獲取數據庫連接

private void getCon(){

try{

Class.forName("oracle.jdbc.driver.OracleDriver");//加載驅動包

try{

con=DriverManager.getConnection(conString,dbUser, dbPwd);//初始化數據庫連接

}catch(Exception e){

System.out.println("初始化數據庫連接失敗!");

}

}catch(Exception e){

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

}

}

}

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