31.3. 發出查詢和處理結果

在任何你想向數據庫運行一個SQL語句的時候, 你都需要一個StatementPreparedStatement 實例。 一旦你擁有了一個StatementPreparedStatement,你就可以發出一個查詢。 這樣將返回一個ResultSet 實例, 在其內部包含整個結果。Example 31-1 演示了這個過程。

Example 31-1. 在 JDBC 裡處理一個簡單的查詢

這個例子將發出一個簡單的查詢然後用一個 Statement 打印出每行的第一個字段。

Statement st = db.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM mytable WHERE columnfoo = 500");
while (rs.next()) {
    System.out.print("Column 1 returned ");
    System.out.println(rs.getString(1));
}
rs.close();
st.close();

這個例子將使用 PreparedStatement 發出和前面一樣的查詢,並且在查詢中綁定數值。

int foovalue = 500;
PreparedStatement st = db.prepareStatement("SELECT * FROM mytable WHERE columnfoo = ?");
st.setInt(1, foovalue);
ResultSet rs = st.executeQuery();
while (rs.next()) {
    System.out.print("Column 1 returned ");
    System.out.println(rs.getString(1));
}
rs.close();
st.close();

31.3.1. 基于一個遊標獲取結果

缺省時,驅動程序一次從查詢裡獲取所有的結果。這樣可能對于大的數據集來說是不方便的, 因此 JDBC 驅動提供了一個方法從一個數據庫遊標傷抽取少數幾行的 ResultSet 的方法。

在鏈接的客戶端這邊緩衝了一小部分數據行,並且在用盡之後, 則通過重定位遊標檢索下一個數據行塊。

Example 31-2. 設置抓取的大小以開關遊標

把代碼修改成遊標模式簡單到只是設置 Statement 的抓取大小到一個合適的程度。 把抓取大小設置為 0 則是緩衝所有行的模式(缺省行為)。

Statement st = db.createStatement();
// 打開遊標的使用。
st.setFetchSize(50);
ResultSet rs = st.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
   System.out.print("a row was returned.");
}
rs.close();
// 關閉遊標的使用。
st.setFetchSize(0);
ResultSet rs = st.executeQuery("SELECT * FROM mytable");
while (rs.next()) {
   System.out.print("many rows were returned.");
}
rs.close();
// 關閉語句
st.close();

31.3.2. 使用 StatementPreparedStatement 接口

在使用StatementPreparedStatement接口時必須考慮下面的問題:

31.3.3. 使用ResultSet(結果集)接口

使用ResultSet接口時必須考慮下面的問題: