我有点困惑,
我正在尝试使用 ucanaccess Java库从java程序中向MS Access数据库插入多行 。
我不明白为什么在调用第二个insertRow()方法时抛出上面的(检查标题) SQL Exception ?
不会通过调用 con.setAutoCommit(false); & con.commit(); 方法或使用命令 rs = st.executeQuery(sql); 重新执行SQL查询。我也不明白为什么通过上面的一个来解决问题。 有什么变化?
提前致谢。
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class db1 {
private Connection con;
protected Statement st;
protected ResultSet rs;
public db1() {
connect();
}
public void connect() {
try {
String driver = "net.ucanaccess.jdbc.UcanaccessDriver";
Class.forName(driver);
String db = "jdbc:odbc:Database1";
con = DriverManager.getConnection
("jdbc:ucanaccess://C:\\Users\\Κώστας\\Desktop\\Database1.accdb");
st = con.createStatement
(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE,
ResultSet.HOLD_CURSORS_OVER_COMMIT)
// con.setAutoCommit(false);
String sql = "select * from TableA";
rs = st.executeQuery(sql);
rs.insertRow();
// rs = st.executeQuery(sql);
rs.insertRow(); // HERE the SQL Exception is thrown.
// con.commit();
}
catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) {
new db1();
}
}
答案 0 :(得分:0)
UCanAccess存在可更新ResultSet的一些已知问题,因为它使用HSQLDB支持表上的触发器将更改推送到Access数据库文件。这些触发器的副作用是它们可能使HSQLDB ResultSet处于无效状态。
您遇到的问题可能无法与con.setAutoCommit(false);
一起显示,因为触发器可能不会刷新对Access数据库的更改,直到提交JDBC事务为止。