我正在使用Oracle數據庫10g,java並嘗試使用ResultSet插入新行。ResultSet不包含新插入的行
我有ResultSet對象,它是可更新和不敏感的方向,意味着您可以在任何方向上遍歷。
當我使用調用moveToInsertRow,的insertRow和setter方法在ResultSet中插入行,行插入數據庫,但在遍歷ResultSet的,我無法查看新插入的行
任何一個可以幫助我。
我的代碼是:
import java.sql.*;
import java.io.*;
import java.util.Date;
public class TestResultSet{
public static void main(String...args){
try{
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/xe", "system", "admin");
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("Select EnrNo, Name, Gender, DOB From Student");
int i;
while(rs.next()){
for(i = 1; i < 5; i++)
System.out.print(rs.getString(i) + ", ");
System.out.println();
}
//Inserting New Row
rs.moveToInsertRow();
rs.updateLong(1, 117020365276L);
rs.updateString(2, "Ashfaq");
rs.updateInt(3, 1);
Date d = new Date();
rs.updateDate(4, new java.sql.Date(d.getYear(), d.getMonth(), d.getDay()));
rs.insertRow();
//New Row Insertion ends here
rs.first(); //Moving to first row
do{
for(i = 1; i < 5; i++) //Index starts from 1, not from 0
System.out.print(rs.getString(i) + ", ");
System.out.println();
}while(rs.next());
}
catch(SQLException ex){ ex.printStackTrace(); }
catch(Exception ex){ ex.printStackTrace(); }
}
}
/*
Student Table Schema
EnrNo Numeric(12) Primary Key
Name varchar2(25);
Gender Numeric(1);
DOB date
*/
通過執行語句獲取新的ResultSet,然後再次打印。 –
難道這不是一個效率低下的解決方案嗎?如果你有大數據庫,那麼每次你輸入新記錄時,你都必須再次獲取所有行。 –
它可能是*效益不大,但這就是它的工作原理。請注意,新行已添加到數據庫**,而不是從數據庫**恢復的當前行。因此,爲了識別新行,您必須對您的表進行另一次讀取。 –