我想在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:游标状态无效:必须在插入之前设置所有列
我的代码中缺少或缺少什么?
答案 0 :(得分:0)
UCanAccess使用HSQLDB作为“后备数据库”,HSQLDB要求在调用.insertRow()
之前为插入行中的所有列指定显式值,包括使用rs.updateNull("ColumnName")
显式指定NULL值。这就是它的工作方式。
最近在SourceForge here上对此进行了讨论。在未来版本的UCanAccess中可能会取消该要求。
2015年8月发布的UCanAccess版本3.x确实已经取消了上述要求。未在插入行中显式设置的任何列将包含列的默认值(如果列可为空,则为NULL,并且在表定义中未指定默认值)。