RowSet應該說是ResultSet的改良版吧?ResultSet的絕大部分方法RowSet都有,那麼rowset有什麼進步呢?官方API說法是加強對javabean的支援(The interface that adds support to the JDBC API for the JavaBeansTM component model.),應該是可以跟javabean結合,但是今天沒時間去試了,參考書目中有稍微提到,不過個人試了JdbcRowSet, CachedRowSet, JoinRowSet的基本功能,如果你厭倦了舊的JDBC Connection的寫法,不彷試試看新的RowSet,今日自己寫的code如下。
package test;
import java.sql.*;
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.JdbcRowSet;
import javax.sql.rowset.JoinRowSet;
import javax.sql.rowset.RowSetProvider;
import dbcon.DBConnection;
public class myRowSet {
DBConnection db=null;
JdbcRowSet jrs=null; //Jdbcrowset就是ResultSet子介面,只是
CachedRowSet crs=null; //CacheRowSet是先把data讀到記憶體裡,操作資料的時候不再連線database,但記憶體的耗比較多
CachedRowSet crs2=null;
JoinRowSet jjrs=null; //joinrowset就是用一個API實現sql join的功能,個人覺得挺新鮮的
public void jsqlJoin(){
try {
crs=RowSetProvider.newFactory().createCachedRowSet(); //產生CachedRowSet實例
crs.setUsername(db.getUser()); //很像設定connection參數,把URL, User, PW設定
crs.setPassword(db.getDbpassword());
crs.setUrl(db.getDburl());
crs.setCommand("select no, fdino from fpr_fdi"); //類似statement,
crs.execute();//執行查詢
crs2=RowSetProvider.newFactory().createCachedRowSet();//產生CachedRowSet實例
crs2.setUsername(db.getUser());
crs2.setPassword(db.getDbpassword());
crs2.setUrl(db.getDburl());
crs2.setCommand("select 編號, 收文日期 from seo_fprtable");
crs2.execute();//執行查詢
jjrs=RowSetProvider.newFactory().createJoinRowSet();//產生JoinRowSet實例
jjrs.addRowSet(crs, "no");//add要join的row後設定共同的key
jjrs.addRowSet(crs2, "編號");//add要join的row後設定共同的key
//jjrs.setJoinType(para); //可以設定join type,INNER Join之類的,我這個例子one to one沒啥好設定的
while(jjrs.next()){
System.out.println(jjrs.getString(1)+", "+jjrs.getString(2)+", "+jjrs.getString(3));
}//FPR-10-0297, LT1-31113-0214, 2010/05/10
ResultSetMetaData meta=jjrs.getMetaData();
int cols=meta.getColumnCount(); //用getmeta測試一下總col數有多少
System.out.println(cols); //3
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void getRowSet(){
try {
// db=new DBConnection();
// con=db.getConnection();
// jrs=new JdbcRowSetImpl(con); //JDK7前舊的產生實例的方法,功能一樣
jrs=RowSetProvider.newFactory().createJdbcRowSet(); //產生JdbcRowSet實例
jrs.setUsername(db.getUser());//很像設定connection參數,把URL, User, PW設定
jrs.setPassword(db.getDbpassword());
jrs.setUrl(db.getDburl());
jrs.setCommand("select no, fdino from fpr_fdi");
jrs.execute();//執行查詢
while(jrs.next()){
String fpr=jrs.getString("no");
String fdi=jrs.getString("fdino");
System.out.println(fpr+", "+fdi);//FPR-10-0297, LT1-31113-0214
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}