924
windows
ResultSet 遊標權限獲取問題
當我們在寫數據庫連接的時候,有時候回出現一些錯誤如:
java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY
先看下麵一段代碼

/** *//**
* 連接數據庫用的驅動類型
*/
protected final String driver = "org.gjt.mm.mysql.Driver";

/** *//**
* 數據庫URL
*/
protected final String dbURL = "jdbc:mysql://localhost:3306/mydbase";
/** *//**
* 數據庫管理員用戶名
*/
protected final String userName = "root";

/** *//**
* 數據庫管理員密碼
*/
protected final String userPwd = "123456";

/** *//**
* 數據庫連接對象
*/
protected Connection con = null;

/**//*
*獲取數據庫連接
*/
con = DriverManager.getConnection(dbURL, userName, userPwd);

/**//*
*獲取連接句柄
*/
Statement smt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = smt
.executeQuery("SELECT * FROM CurrentAccount WHERE AccountID = "
+ accountID);
while (rs.next())
{
withdrawCount = Integer.parseInt(rs.getString("Counter"));
}
rs.close();
smt.close();
con.close();
注意上麵紅字部分:
Statement smt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
嗬嗬,括號裏是不是多了兩個參數:
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE
這兩個東西屬於java.sql.ResultSet(大家可以看到我們的程序前麵都有import java.sql.*;嗬嗬)
那這些參數有什麼用呢?
ResultSet.TYPE_FORWARD_ONLY 在不設定的情況下,默認是這個,rs遊標隻能實現 next()操作;
ResultSet.TYPE_SCROLL_INSENSITIVE 數據在更新之後則無權再次獲取數據集
ResultSet.TYPE_SCROLL_SENSITIVE 數據在更新之後則可以再次獲取數據集
需要指定,可以實現rs 遊標的afterLast()、previous()、absolute()、relative()、first()、last()操作(具體使用請自己查看java API 文檔);
ResultSet.CONCUR_READ_ONLY 在不設定的情況下為默認參數,
隻讀:獲取改數據庫句柄的rs 遊標隻能讀取數據庫裏的東西;
可以實現select 操作;
ResultSet.CONCUR_UPDATABLE 可更新:獲取改數據庫句柄的rs 遊標可以讀取和更新數據庫裏的東西;
可以實現 select 和 insert 操作;
在了解參數的用法之後,為保證數據安全性,和數據庫數據的安全性維護,請根據需要慎重使用。
最後更新:2017-04-02 06:51:23