db連接類
db就是database(數據庫),下面我講演示如何通過java語言通過jdbc的方式來連接到你所要的數據庫,本例中以oracle爲參考。
代碼實現
首先我們先創造幾個等會會用到的對象
- 創造一個數據庫連接對象(Connection對象,代表與數據源進行的唯一會話。)。
- 創建編譯語句對象(Statement對象,建立了到特定數據庫的連接之後,就可用該連接發送 SQL 語句。)。
- 創建預編譯語句對象(PreparedStatement對象, 實例包含已編譯的 SQL 語句。這就是使語句“準備好”)。
- 創建結果集對象(ResultSet對象, 結果集(ResultSet)是數據中查詢結果返回的一種對象,可以說結果集是一個存儲查詢結果的對象,但是結果集並不僅僅具有存儲的功能,他同時還具有操縱數據的功能,可能完成對數據的更新等.)
ps:結果集對象在oracle中如果是查詢會返回一個resultset,但是當插入,刪除和更新值的時候返回的是被影響的行數,所以這時候需要用int類型來接收這個值。
// 創建一個數據庫連接
Connection connection = null;
// 創建編譯語句對象
Statement stat =null;
// 創建預編譯語句對象
PreparedStatement pstat = null;
// 創建結果集對象
ResultSet rs1 = null;
int rs2 ;
接着我們編寫我們的第一個連接方法,這是整個db數據庫連接類的基礎。
我們需要4個參數:
- driverName,這個是你驅動的名稱。
- URL,你數據庫的地址,比如我jdbc:oracle:thin:@localhost:1521:stulibrary中,localhost表示在本機,1521表示數據庫的端口號,stulibrary表示數據庫的名稱。
- userName,表示你的數據庫登錄名。
- pwd,表示登錄名的登錄密碼
//驅動名稱
private static final String driverName="oracle.jdbc.driver.OracleDriver";
//數據庫的地址(通過端口和SID找到對應的數據庫)
private static final String URL="jdbc:oracle:thin:@localhost:1521:stulibrary";
//數據庫登錄用戶名
private static final String userName="ADMIN";
//數據庫登錄密碼
private static final String pwd="123456";
下面是具體的連接類,定義好變量之後我們的操作將會很簡單。
這個類返回的是connetion對象,這是整個連接類最基礎的對象,所有操作都要圍繞這個對象展開。我們需要傳入剛纔定義的驅動,URL,用戶名和密碼,如果連接成功將會在命令行輸出連接成功。(如果想測試記得寫主類哦,或者在JUNIT內測試也可行,建議後者)
public Connection getConnection(){
try {
//加載oracle驅動
Class.forName(driverName);
//通過驅動獲取數據庫的連接
connection = DriverManager.getConnection(URL,userName,pwd);
System.out.println("連接成功");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
}
下面我們來寫具體的操作的方法
查詢
在查詢方法中要求輸入的sql語句,這個是用String類型定義的數據庫PL/SQL語句。
executeQuery(sql)方法就是用來用sql查詢的。
public ResultSet query(String sql){
try {
//通過剛纔的getConnection方法獲得一個連接的對象。
connection = getConnection();
//向數據庫中發送你的sql語句
stat = connection.createStatement();
//獲得所查詢的結果,返回的是Resultset對象
rs1 = stat.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs1;
}
更新
executeUpdate(sql)可以用來插入,刪除和更新值。
其他操作與查詢相同,見查詢註釋
public int update(String sql){
try {
connection = getConnection();
stat = connection.createStatement();
rs2 = stat.executeUpdate(sql);
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs2;
}
替換
替換類中需要sql語句和一個字符串。
prepareStatement時sql語句可以這樣寫
UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?
用問號代替所需要填入的值,然後通過pstat.setString方法再把值賦給它,具體實現是pstat.setString(?的位置),需要替換的字符串值)。
ps:需要注意的是?的位置從第一個開始,不是第0個,比如上條語句需要給第一個?賦值1時就需要這樣寫pstat.setString(1,“1”);
public void update(String sql, String[] args){
try {
connection = getConnection();
pstat = connection.prepareStatement(sql);
System.out.println(sql);
System.out.println(args.length);
for (int i = 0; i < args.length; i++) {
pstat.setString(i+1, args[i]);
System.out.println(pstat);
}
pstat.executeUpdate();
connection.commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
刪除
值得注意的是,這裏就是我剛纔所講的,返回的受影響的行數,所以這裏人返回的是int類型的rs2。在之後的編寫中可以通過這個rs2判斷是否刪除成功。
public int delete(String sql){
try {
connection = getConnection();
stat = connection.createStatement();
rs2 = stat.executeUpdate(sql);
return rs2;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
最後很重要的一步,關閉數據庫連接,釋放資源
public void close(){
try {
if(rs1!=null) {
rs1.close();
}
if(stat!=null) {
rs1.close();
}
if(pstat!=null) {
rs1.close();
}
if(connection!=null) {
rs1.close();
}
} catch (SQLException e) {
// TODO: handle exception
}
}
至此這個db數據庫連接類就完成了,你可以通過更換中間連接類所講的一些變量來適應你的數據庫,這樣一個萬能的數據庫連接類就完成了。
最後注意
請先保證你的數據庫可正常連接,並且一些驅動及URL地址等信息填寫正確,不然就會出現連接不上的問題。