我使用下面的Java代码将数据保存到表中
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new ByteArrayInputStream(string));
} catch (IOException e) {
e.printStackTrace();
}
String query = "Insert into Test(window,windowObject) values (?,?)";
PreparedStatement pst = connection.prepareStatement(query);
pst.setString(1, "harom");
pst.setBinaryStream(2, ois);
pst.execute();
}
但要低于例外
严重:>> java.lang.AbstractMethodError: com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setBinaryStream(ILjava / IO / InputStream的;)V
at test.DragDropViewModel $ 1.execute(DragDropViewModel.java:62) at com.csdcsystems.amanda.transaction.Transaction.executeCommand(Transaction.java:164) at test.DragDropViewModel.testConnnection(DragDropViewModel.java:48)
任何人都知道我做错了什么? 我的表定义
window varchar no 8000
windowObject text no 16
使用这些驱动程序
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.jdbc</groupId>
<artifactId>sqljdbc4</artifactId>
</dependency>
答案 0 :(得分:0)
查看您的代码
PreparedStatement pst = connection.prepareStatement(query);
pst.setString(1, "harom");
pst.setBinaryStream(2, ois);
PreparedStatement pst = connection.prepareStatement(query);
pst.setString(1, "harom");
pst.setBinaryStream(2, ois);
pst.execute();
为什么有两组相同的线?这是你的错字吗?它应该是
PreparedStatement pst = connection.prepareStatement(query);
pst.setString(1, "harom");
pst.setBinaryStream(2, ois);
pst.execute();
同样windowObject
列应该是blob
/ binary
而不是text
除此之外 通常会发生此错误,因为JDBC驱动程序实现的JDBC API版本比JRE中包含的版本更旧。只要您不尝试使用新API中出现的方法,这些旧版本就可以了。
我建议将其升级到随数据库版本发布的版本,然后重试。
答案 1 :(得分:0)
AbstractMethodErrors
。我猜你在JDBC接口(来自核心java API)和JDBC驱动程序之间存在版本不匹配。您使用的驱动程序很可能是在setBinaryStream
存在之前创建的。
我猜你可以使用PreparedStatement.setBlob(...)
代替。