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