我一直在玩JDBC和不同類型的ResultSet,並有一個關於使它TYPE_SCROLL_SENSITIVE(這個問題是關於敏感部分,而不是類型滾動部分)的問題。該理論認爲數據庫中的更改反映在ResultSet中,反之亦然,但這並不適用於我。JDBC ResultSet Type_Scroll_Sensitive
這裏是我已經試過:
Connection conn = null;
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
String url = "jdbc:oracle:thin:@oracle.myCompany.com:1521:xe";
conn = DriverManager.getConnection(url, "username", "password");
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String query = "SELECT user_id, first_name, last_name FROM Users";
ResultSet rs = stmt.executeQuery(query);
while(rs.next()){
System.out.println("-----------------------------");
System.out.println(rs.getInt(1));
System.out.println(rs.getString("first_name"));
System.out.println(rs.getString("last_name"));
int id = rs.getInt(1);
rs.updateInt(1,100+id);
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
conn.close();
}
當我更新ID,加100來了,變化是不是在數據庫中顯示(如果低於此,我想補充rs.updateRow ()然後它會更新數據庫,但是如果我將其設置爲TYPE_SCROLL_INSENSITIVE,這也會更新數據庫。
我想另一件事是這樣的:
Connection conn = null;
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
String url = "jdbc:oracle:thin:@oracle.myCompany.com:1521:xe";
conn = DriverManager.getConnection(url, "username", "password");
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String query = "SELECT user_id, first_name, last_name FROM Users";
ResultSet rs = stmt.executeQuery(query);
String query2 = "INSERT INTO User VALUES (4, 'Joe', 'Bloggs')";
stmt.executeUpdate(query2);
while(rs.next()){
System.out.println("-----------------------------");
System.out.println(rs.getInt(1));
System.out.println(rs.getString("first_name"));
System.out.println(rs.getString("last_name"));
int id = rs.getInt(1);
rs.updateInt(1,100+id);
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
conn.close();
}
但是,如果我運行此代碼,並期待新行要在結果,因爲它是敏感......我上線一個NullPointerException:while(rs.next()){
那麼有人可以解釋一下敏感的ResultSet是如何工作的以及我做錯了什麼?可能有一個例子嗎?