java - 使用 UCanAccess 插入 ResultSet 时出现 "all columns must be set before insert"错误

标签 java jdbc ucanaccess

我想在 Java 8 下使用 UCanAccess 创建 Access 数据库连接。这是我的代码:

String employeeName = endrollNameFields.getText();
String employeeAddress = endrollAddressFields.getText();        

try
{
    //------------CREATE CONNECTION TO DATA BASE--------------/

    String DBPAD = "sourceFolder\\employeeTable2.mdb";
    String DB = "jdbc:ucanaccess://" + DBPAD;                       


    con = DriverManager.getConnection(DB, "", "");
    st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String sql = "select * from employeeTable2";


    rs = st.executeQuery(sql);                  

    rs.moveToInsertRow();

    rs.updateString("Name", employeeName);
    rs.updateString("Address", employeeAddress);                        

    rs.insertRow();
    st.close();             

    st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String sql1 = "select * from employeeTable2";
    rs = st.executeQuery(sql1);

    JOptionPane.showMessageDialog(null, "<html>" + "<font color=\"#008000\">" + "<html><span style='font-size:1.5em'>Employee Successfuly Inserted to Data Base");

}
catch(Exception e1)
{
    JOptionPane.showMessageDialog(null, e1);
}           

我在 JTextField 中输入了条目,但是当我单击包含上面代码的按钮时,会出现此错误消息:

net.ucanaccess.jdbc.Ucanaccess SQLException:invalid cursor state: all columns must be set before insert

我的代码中缺少什么?

最佳答案

UCanAccess 使用 HSQLDB 作为“后备数据库”,而 HSQLDB 要求在调用 .insertRow() 之前为插入行中的所有列赋予显式值,包括使用 rs.updateNull("ColumnName") 显式指定 NULL 值。这就是它的工作原理。

最近在 SourceForge 上对此进行了讨论 here 。 UCanAccess 的 future 版本可能会取消该要求。

更新

2015年8月发布的UCanAccess 3.x版确实删除了上述要求。插入行中未显式设置的任何列都将包含该列的默认值(如果该列可为空且表定义中未指定默认值,则为 NULL)。

关于java - 使用 UCanAccess 插入 ResultSet 时出现 "all columns must be set before insert"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30026692/

相关文章:

java - 无效的日期时间格式 : insert date/time into Access from Java

java - HikariCp 无法连接到 DB2 数据库

javascript - 运行 react native Android 应用程序时出错 - BatchedBridge

java - jdbc : Could not create connection to database server

java - HPC + Oracle 连接 = 灾难的秘诀?

java - 插入行时"data exception: division by zero"

java - 如何使用 Bamboo 开始 Play,而不需要永远继续部署?

java - Java方法的内部标识是什么?

java - 使用上下文连接到 Tomcat 中的 MS Access

java - 无法使用 ucanaccess 创建可更新的结果集