Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java UCanAccess:向带有附件的表插入新行时出现错误_Java_Ms Access_Ucanaccess - Fatal编程技术网

Java UCanAccess:向带有附件的表插入新行时出现错误

Java UCanAccess:向带有附件的表插入新行时出现错误,java,ms-access,ucanaccess,Java,Ms Access,Ucanaccess,经过几个小时的尝试和失败,我已经确定了UCanAccess在尝试将新行插入到碰巧有一个类型为Attachment的字段的表中时的奇怪行为 具体而言,我在Access中有一个简单的表,如下所示: ID: Autonumber FirstName: String (not required) Age: Numnber (not required) Picture: Attachment (not required) 我使用以下代码使用Java和UCanAccess向表中添

经过几个小时的尝试和失败,我已经确定了UCanAccess在尝试将新行插入到碰巧有一个类型为Attachment的字段的表中时的奇怪行为

具体而言,我在Access中有一个简单的表,如下所示:

   ID: Autonumber 
   FirstName: String (not required)
   Age: Numnber (not required)
   Picture: Attachment (not required)
我使用以下代码使用Java和UCanAccess向表中添加一行:

Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");  
String database = "jdbc:ucanaccess://" + dbFileName +  "";                           
Connection conn = DriverManager.getConnection(database, "", "");
Statement s = conn.createStatement();

String sql = "INSERT INTO Test(FirstName, Age) VALUES ('TestName',32)";
s.execute(sql);

该代码产生以下错误:

java.lang.NullPointerException
    at net.ucanaccess.commands.InsertCommand.persist(InsertCommand.java:153)
    at net.ucanaccess.jdbc.UcanaccessConnection.flushIO(UcanaccessConnection.java:315)
    at net.ucanaccess.jdbc.UcanaccessConnection.commit(UcanaccessConnection.java:205)
    at net.ucanaccess.jdbc.AbstractExecute.executeBase(AbstractExecute.java:217)
    at net.ucanaccess.jdbc.Execute.execute(Execute.java:46)
    at net.ucanaccess.jdbc.UcanaccessStatement.execute(UcanaccessStatement.java:152)
    at projectmigrator.ProjectMigrator.tester2(ProjectMigrator.java:62)
    at projectmigrator.ProjectMigrator.main(ProjectMigrator.java:43)
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 null
    at net.ucanaccess.jdbc.UcanaccessStatement.execute(UcanaccessStatement.java:154)
    at projectmigrator.ProjectMigrator.tester2(ProjectMigrator.java:62)
    at projectmigrator.ProjectMigrator.main(ProjectMigrator.java:43)
Caused by: net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 null
    at net.ucanaccess.jdbc.UcanaccessConnection.commit(UcanaccessConnection.java:212)
    at net.ucanaccess.jdbc.AbstractExecute.executeBase(AbstractExecute.java:217)
    at net.ucanaccess.jdbc.Execute.execute(Execute.java:46)
    at net.ucanaccess.jdbc.UcanaccessStatement.execute(UcanaccessStatement.java:152)
    ... 2 more
Caused by: net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 null
    at net.ucanaccess.jdbc.UcanaccessConnection.flushIO(UcanaccessConnection.java:348)
    at net.ucanaccess.jdbc.UcanaccessConnection.commit(UcanaccessConnection.java:205)
    ... 5 more
Caused by: java.lang.NullPointerException
    at net.ucanaccess.commands.InsertCommand.persist(InsertCommand.java:153)
    at net.ucanaccess.jdbc.UcanaccessConnection.flushIO(UcanaccessConnection.java:315)
    ... 6 more
有趣的是,如果我将sql字符串替换为

    String sql = "INSERT INTO Test(FirstName, Age, Photo) VALUES ('TestName',3224,'')";
在对包含不需要的附件类型字段的表执行INSERT时,我是否真的被迫提供一个伪值,如空字符串(对于数字或文本等其他类型的字段,情况并非如此)。这可能是UCanAcces中的一个bug,还是我遗漏了什么


(谢谢-我知道我应该使用PreparedStatement来插入语句,但为了这篇文章,我硬编码了插入语).

此问题已在UCanAccess 4.0.2中修复。

此问题已在UCanAccess 4.0.2中修复。

已修复格式-希望帖子现在更容易阅读:)我可以重现此问题并将升级。请注意,此错误将在4.0.2中修复。找到的解决方法有效性有限,对于上述情况,最好使用UCanAccess网站上描述的方法来设置复杂的列值。4.0.2很快就要发布了。修复了格式-希望这篇文章现在更容易阅读:)我可以重现这个问题并将升级。注意,这个错误将在4.0.2中修复。找到的解决方法有效性有限,对于上述情况,最好使用UCanAccess网站上描述的方法来设置复杂的列值。4.0.2将很快推出。