iT邦幫忙

DAY 19
2

java菜鳥的學習筆記系列 第 19

使用JDBC中的RowSet-以JdbcRowSet, CachedRowSet, JoinRowSet為例

  • 分享至 

  • xImage
  •  

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

上一篇
使用SeekabnlerByteChannel in java
下一篇
有點難的Concurrency-Lock、CountDownLatch、CopyOnWriteArrayList的使用
系列文
java菜鳥的學習筆記28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

我要留言

立即登入留言