程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> 分布式數據庫客戶端數據集的選用

分布式數據庫客戶端數據集的選用

編輯:J2EE
有兩種方法: 1、用vector: > public Enumeration ejbFindBigAccounts(double balanceGreaterThan) { > log("ejbFindBigAccounts (balance > " + balanceGreaterThan + ")"); > Connection con = null; > PreparedStatement ps = null; > > try { > con = getConnection(); > ps = con.prepareStatement("select id from ejbAccounts where bal > ?"); > ps.setDouble(1, balanceGreaterThan); > ps.executeQuery(); > ResultSet rs = ps.getResultSet(); > Vector v = new Vector(); > String pk; > while (rs.next()) { > pk = rs.getString(1); > v.addElement(pk); > } > return v.elements(); > } catch (SQLException sqe) { > log("SQLException: " + sqe); > throw new EJBException (sqe); > } finally { > cleanup(con, ps); > } > } 結論:不爽,不方便。 2、RowSet RowSet tutorial chapter : http://developer.java.sun.com/developer/Books/JDBCTutorial/chapter5.Html rowset是個interface,需要有東西去實現它,sun的規范中給了三個class:cachedrowset,jdbcrowset,webrowset,如果去查jdk1.4 doc和j2skee1.2,有rowset,卻沒有那三個class,一般的開發工具(至少我的wsad)中也是這樣,所以需要下jdbc2.0 opt-pack: http://developer.java.sun.com/developer/earlyAccess/crs/ 下下來了再怎麼辦呢? 裝呗! 怎麼裝呢? setup呀! 沒有呀? 啊,沒setup呀,sun干什麼吃的,連setup都不做個,也太懶了吧。 ///////////////////////////////// 哎,我們確實是都被ms慣壞了,看到只有jar,沒setup就沒轍了,大家好好想想,java最大的特性是什麼,就是它的類庫可以自由擴充呀,現在明白該怎麼做了吧: 1、解包,得到rowset.jar,放在哪隨您的意,別丟了就行。 2、在您的開發工具中增加一個路徑,如:ROWSET_PATH對應:d:\jdk1.4\jre\rowset.jar(和1的路徑對應就行)。 3、右鍵您的工程文件,出現:property(大多數工具應該都有吧),加上rowset_path。 4、在您的源文件中:import sun.jdbc.rowset.*; OK,搞定!下面就看您的了。(當然也可以把rowset壓到jre裡去) 應該說rowset(其實主要是CachedRowSet)真的是個好東西,和ms ado的resultset和borland的tclIEntset非常相似,最大的好處是Cache功能! 好了,看例子吧: /////////////server端///////////// package example4; import java.sql.*; import javax.sql.*; import sun.jdbc.rowset.*; import javax.naming.*; import javax.ejb.*; public class CoffeesBean implements SessionBean { private SessionContext sc = null; private Context ctx = null; private DataSource ds = null; public CoffeesBean () {} public void ejbCreate() throws CreateException { try { ctx = new InitialContext(); ds = (DataSource)ctx.lookup("jdbc/CoffeesDB"); } catch (Exception e) { System.out.println(e.getMessage()); throw new CreateException(); } } public RowSet getCoffees() throws SQLException { Connection con = null; ResultSet rs; CachedRowSet crs; try { con = ds.getConnection("webCustomer", "webPassword"); Statement stmt = con.createStatement(); rs = stmt.executeQuery("select * from coffees"); crs = new CachedRowSet(); crs.populate(rs); // the writer needs this because JDBC drivers // don't provide this meta-data. crs.setTableName("coffees"); rs.close(); stmt.close(); } finally { if (con != null) con.close(); } return rset; } public updateCoffees(RowSet rs) throws SQLException { Connection con = null; try { CachedRowSet crs = (CachedRowSet)rs; con = ds.getConnection("webCustomer", "webPassWord"); moves the changes back to the database crs.acceptChanges(con); } finally { if (con != null) con.close(); } } // // Methods inherited from SessionBean // public void setSessionContext(SessionContext sc) { this.sc = sc; } public void ejbRemove() {} public void ejbPassivate() {} public void ejbActivate() {} } //////////////////clIEnt端////////////// package example4; import java.sql.*; import javax.sql.*; import sun.jdbc.rowset.*; import javax.naming.*; import javax.ejb.*; import Javax.rmi.*; class CoffeesClIEnt { public static void main(String[] args) { try { // init the bean Context ctx = new InitialContext(); Object obj = ctx.lookup("ejb/Coffees"); CoffeesHome coffeesHome = (CoffeesHome) PortableRemoteObject.narrow(obj, CoffeesHome.class); Coffees coffees = coffeesHome.create(); // get the rowset from the bean CachedRowSet rset = (CachedRowSet)coffees.getCoffees(); // find the Columbian coffee while (rset.next()) { String coffeeName = rset.getString("COF_NAME"); if (coffeeName.equalsIgnoreCase(new String("Columbian"))) { // columbian coffee has gone up 10% rset.updateFloat("PRICE", (float)(rset.getFloat("PRICE") * 1.10)); rset.updateRow(); } } // finally send the updated back to the bean... System.out.println("Calling update method"); coffees.updateCoffees((RowSet)rset); } catch (Exception e) { System.out.println(e.getMessage()); } } } 例子很簡單就不多講了。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved