2012-08-01

【JSP】JSP 查詢資料注意事項

Database 以 Postgres 為例, 下了查詢指令後, 目前找不到類似 PHP 的 pg_num_rows 的指令, 爬文得到的方法皆為 rs.next(), 再以 rs.getRow() 取得記錄指標所在位置, 若記錄指標在第 1 筆, 則 rs.getRow() 得值 1.所在位置無資料(如 EOF 或 無記錄), 則 rs.getRow() 會得到 0.

rs.last() 則移動記錄指標到最後一筆, 再 rs.getRow() 則為記錄數.

較需注意的是, 若查詢的為運算後的結果, 如: sum, 原則上都會傳回一筆記錄, 只不過欄位的值有可能為 null(因為沒有記錄符合 WHERE 的條件), 所以這時若仍以 rs.next() 再直接取欄位值會發生例外錯誤, 所以得採另一種方法 wasNull, 確認要取得的欄位值不為空值.

例:
sql = "SELECT sum(sale_amount) amount FROM table1 WHERE saledate='20080101' ";
rs = statement.executeQuery(sql);
// 當沒有記錄符合 saledate='20080101' 時, 則傳回一筆記錄, 但欄位 amount 為空值
rs.next();
int Amount = rs.getString("amount");
if(rs.wasNull())
    out.print(0);
else
    out.print(Amount);

wasNull() 的用法是檢查目前要知道的欄位是否為空值, 所以在使用 wasNull() 前要先下取欄位值的指令, 在本例因要取得的欄位時 amount, 所以要先

int Amount = rs.getString("amount");

然後再以

if(rs.wasNull())

確認 amount 是否為空值.

沒有留言:

張貼留言