JDBC高階應用 處理結果集

2021-07-02 13:40:55 字數 2197 閱讀 4797

處理結果集

查詢結果都保持在resultset結果集中,遍歷結果集便可以取得其中的資料。

實際應用中,一般會查詢多個**,查詢多個**可以使用同乙個statement或者preparedstatement實現,返回同乙個resultset物件

例如:

string sql = "select * from table1";

pstmt = conn.preparestatement(sql);

rs = pstmt.executequery();

while(rs.next())

//不用執行rs.close(),jdbc預設自動關閉前一次查詢的rs

string sql = "select * from table2";

pstmt = conn.preparestatement(sql);

rs = pstmt.executequery();

while(rs.next())

除了常用的next()方法,resultset介面還有其它的方法,如previous(),first(),last()等,如果後面還有記錄,next()會返回true,同時自動滾向下一條記錄,否則返回false。previous()則相反。

為了效率,statement預設返回的是rs是只向後滾動的,因此只有next,last方法可用,要使用previous,first等方法,可以按如下方法

建立statement:

stmt =conn.createstatement(result.type_scroll_insensitive, resultset.concur_updatable);

rs = stmt.executequery("...");

其中第1個引數指定建立的resultset可以自由滾動,第2個引數指定statement建立的resultset可以直接修改

資料量大時需要分頁顯示,分頁顯示時只從資料庫中取出本頁要顯示的記錄,而不必把所有的記錄都讀取出來。mysql中實現分頁是利用limit來實現的,如「select * from table1 limit 21,10」,只取出從第21行開始的10行記錄。

分頁時要先計算記錄總數,然後再計算頁面數,當計算好後,製作分頁。

如果是sql server的話:

select top 10 * from table1 where id not in(select top (pagenum-1)*10 id)

pagination分頁顯示-步驟

(1)取得傳來的要顯示的頁面數

(2)定義分頁變數

int pagenum = 1; //當前頁面

int pagesize = 3; //每頁的記錄條數

int pagesum = 0; //總頁面數

(3)計算總頁面數

pagesum = icount/pagesize;  

if(icount%pagesize!=0)

(4)取得分頁資料並顯示

resultset可以通過無資料在不知道列名的時候將列名取出來。
rs = pstmt.executequery();

resultsetmetadata meta = rs.getmetadata();

int columncount = meta.getcolumncount();

string columns = new string[columncount];

system.out

.println("各個列的列名如下:");

for(int i=1

;icolumns[i-1]=meta.getcolumnname(i);

system.out

.println(columns[i-1]);

}

sql查詢的時候可以宣告別名:

select id 編號, uname 姓名, realname 真實姓名 from table1

顯示列名時的語句:

columns[i-1]=meta.getcolumnlabel(i);

反射 內省機制的運用 處理jdbc的結果集

1 把結果集中的一行資料,封裝成乙個物件,專門針對結果集中只有一行資料的情況。2 處理結果集 多行資料,封裝成多個物件 list 專門針對結果集中只有一行資料的情況 把結果集中的一行資料,封裝成乙個物件 beanhandler public class beanhandlerimplements i...

非同步記錄日誌 獲取非同步處理結果

1.場景 有事務的情況下,記錄將異常資訊記錄到異常表中 2.處理過程 2.1本來是加上never或者notsurport註解,然後在throw拋異常之前把異常資訊插入資料庫,但是未成功,拋異常時回滾 2.2finally中呼叫被 async註解的方法 2.3注意 這個帶 async註解的方法要放在其...

PLAY2 6 SCALA 六 非同步處理結果

play是乙個自底向上的非同步框架,play處理所有的request都是非同步 非阻塞的。預設的方式是使用非同步的controller。換句話說,contrller中的應用 需要避免阻塞,i.e.不能等待某乙個操作。場景的阻塞操作有jdbc呼叫 streaming api http請求和耗時計算。雖...