从Java代码中将数据保存在blob中

时间:2014-01-21 11:58:17

标签: java mysql

我使用下面的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>

2 个答案:

答案 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(...)代替。