在sqlite数据库中,我设置了一个字段类型的blob。 然后,我写了java代码:
PreparedStatement preStmt = con.prepareStatement("INSERT INTO zz(pic) VALUES(?)");
preStmt.setBinaryStream(1, new FileInputStream(file), file.length());
我有一个例外:
java.lang.AbstractMethodError: org.sqlite.PrepStmt.setBinaryStream(ILjava/io/InputStream;J)V
任何建议?
或者,如果我想在sqlite中使用保存二进制数,我应该写什么代码?
答案 0 :(得分:2)
我使用xerial.org的sqlite jdbc驱动程序取得了很好的成功:http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC
Xerial的SQLite JDBC实现具有PreparedStatement.setBytes(index,byte [])。您应该能够使用以下链接上的代码从FileInputStream获取字节数组:http://www.java-tips.org/java-se-tips/java.io/reading-a-file-into-a-byte-array.html
以Blob格式存储内容时,请注意以下问题:http://effbot.org/zone/sqlite-blob.htm
我希望这会有所帮助。
-Alex
答案 1 :(得分:0)
AbstractMethodError
API documentation说明如下:
当应用程序尝试调用抽象方法时抛出。通常,编译器会捕获此错误;如果自上次编译当前正在执行的方法以来某些类的定义发生了不兼容的更改,则此错误只能在运行时发生。
显然,您有一个旧版本的JDBC驱动程序在类路径中游荡,或者您的JDBC驱动程序需要升级以匹配所使用的JRE版本中的JDBC API。您可以在Sqlite主页上获取最新版本。