程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> 在JavaBean 中實現數據庫操作的一點個人見解

在JavaBean 中實現數據庫操作的一點個人見解

編輯:J2EE
在JavaBean 中實現數據庫操作的一點個人見解 作者:小草/JAVA特刊 JAVA作為較新編程語言,是公認的最具前途的一種,她的網絡優勢以及其平台無關性,使得建立分布式系統更簡單易行,更由於她的出現,使Internet的作用從通信工具擴展到能夠運行成熟應用系統的網絡。那麼是應用系統,不可避免的也許就是數據庫。 使用Java編制Server端應用程序(B/S),與傳統的C/S應用程序在連接數據庫方面有著本質的區別.在傳統的C/S應用程序中,用戶在使用應用程序時是一個長連接,只有在用戶退出在程序時,才斷開這個連接;而B/S則不一樣,它是基於Tcp/IP的一種無狀態連接,用戶在發一個請求後,Server響應並分配一個連接,當請求結束後,該連接隨即失效,Server將根本不知道該連接是那個用戶請求的,同樣,用戶在發下一個請求之前,也將根本不知道要連向哪個Server.正是由於這種區別,使得在程序的編制方面,兩種系統有著不一樣的原則,否則將可能出現完全不一樣的效果! 下面,本人拋磚引玉,談談自己在這方面的一點點心得。 在進行數據庫操作時,一般在Bean 中不要進行直接的數據庫連接(包括引用其他方法來建立連接,即不要無中生有,只使用已存在的Connection 或者 Statement),更不應在構造函數中即生成一個連接,因為一個Bean有可能被多個應用程序引用,同樣一個應用程序有可能引用多個Bean ,這樣如果一個Bean 如上所述在構造函數中即生成一個連接,那麼一個應用程序從開始到結束可能生成許多連接; 同樣,在Bean 中的某個方法中也不應該直接建立連接; 那麼應該如何在Bean 中進行數據庫操作呢? 如果進行數據庫查詢,即使用Select 語句,可以在方法中直接使用一個Statement 參數。 如:

public ResultSet getRS(Statement stmt,String sqltxt)

{

ResultSet rs=null;

Try

{

    rs=stmt.executeQuery(sqltxt);

}

catch(SQLException e){}

return rs;

}

如果查詢語句中有多個Select且嵌套,如 
public String getS(Statement stmt,String sqltxt,String sqltxt1)

{

ResultSet rs=null;

Try

{

rs=stmt.executeQuery(sqltxt);

while(rs.next())

{

ResultSet rs1=stmt.executeQuery(sqltxt1)

If(rs1.next())

{

String s1=rs.getString(1);

String s2=rs1.getString(1);

..............

}

}

}

catch(SQLException e){}

return rs;

}

如果如上所述,兩個Select 語句使用一個Statment ,那麼將出錯或者所得出的結果不正確。解決的方法,可以使用增加Statement 參數,以實現上述查詢功能,但是使用增加Statement 參數的方法畢竟是有局限的,如果嵌套層數增加,Statement 參數也許也得跟著增加,這樣對於程序的可擴張性是不利的,因為參數數量的不確定(即接口不確定),那麼面向對象就沒有意義了。 那麼另外一種方法,就是直接傳入Connection ,但是,如1 所述,不應在方法中直接引入,而是通過構造函數,或者單獨一個方法來引入Connection(將該Connection 賦值給Bean中一個Connection 公共變量)。因為一般的應用程序,從開始到結束,不出意外一個Connection 就能完成所有工作,所以無需多次引入。 如:


import Java.sql.*;

public class ClassName

{

Connection con1=null;

public ClassName()

{

}

public ClassName(Connection conn)

{

    con1=conn;

}

public void getConn(Connection conn)

{

    con1=conn;

}

public String getS(String sqltxt)

{

String s1=null;

try

{

    ......  

}

catch(SQLException e){}

return s1;

}

.......

}
如果SQL語句是對數據庫的增、刪、改等,那麼可以引入一個Statement 來完成工作,因為不存在ResultSet 的問題,所有的操作都可以用一個Statement 來完成,同上(引用Connection 方法一樣)可以使用構造函數或者單獨一個方法來引入Statement (建議使用後一種,使用單獨一個方法來引入,這樣可以避免Connection 和Statement 都要引入的沖突)。 此外,對於數據庫的增、刪、改也可以,將所有的增、刪、改的SQL語句放在一個Batch(批處理),最後執行這個Batch,方法如下:

import Java.sql.*;

public class ClassName

{

Statement stmt=null;

public ClassName()

{

}

public void getStatement(Statement stmt_out)

{

    stmt=stmt_out;

}

public String update(...)

{

    String sqltxt="update tableName set....."

}

public String insert(...)

{

    String sqltxt="insert into tableName (....)values(....)"

}

public String del(...)

{

    String sqltxt="delete from tableName where ....."

}

public String mainPub()

{

stmt.addBatch(update(...));

stmt.addBatch(insert(...));

stmt.addBatch(del(...));

.....

stmt.executeBatch();

}

}
最後,再重申一遍,這只是本人的一點體會,如有不妥望不吝啬教! --------------------------------------------------------------------------------
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved