异常在插入图像插入SQL表使用BLOB对象
问题描述:
我得到异常下面的代码异常在插入图像插入SQL表使用BLOB对象
PreparedStatement pstmt;
Connection conn = DriverManager.getConnection(
"jdbc:jtds:sqlserver://Irfan:1433/Pictures", "sa", "[email protected]");
java.sql.Blob bl=GetBolbDataFromDB();
InputStream fs = bl.getBinaryStream();
len = bl.length() ;
query = ("insert into NewPics2 VALUES(?,?,?,?)");
pstmt = conn.prepareStatement(query);
pstmt.setString(1, model);
pstmt.setString(2, catid);
pstmt.setString(3, ornid);
**pstmt.setBinaryStream(4, fs);**
完整的堆栈跟踪如下
Exception in thread "AWT-EventQueue-0" java.lang.AbstractMethodError: net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setBinaryStream(ILjava/io/InputStream;)V
at jewelleryerpapplication.GUI.Orders.CheckPrice.GetPicInfo(CheckPrice.java:1157)
at jewelleryerpapplication.GUI.Orders.CheckPrice.txtModelNoKeyPressed(CheckPrice.java:2300)
at jewelleryerpapplication.GUI.Orders.CheckPrice.access$1500(CheckPrice.java:37)
at jewelleryerpapplication.GUI.Orders.CheckPrice$18.keyPressed(CheckPrice.java:702)
at java.awt.Component.processKeyEvent(Component.java:6463)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2829)
at java.awt.Component.processEvent(Component.java:6282)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1908)
答
简单地把你的JDBC驱动程序不实现最新版本的jdbc:它没有方法setBinaryStream()。这意味着你不能使用它。你可以尝试setBlob()与完全读取的图像。
答
从堆栈跟踪看来,您调用的方法是抽象的。根据文档,JtdsPreparedStatement.setBinaryStream()有三个参数:索引,流和长度。
尝试添加int
作为长度参数:pstmt.setBinaryStream(4, fs);
答
尝试转换
java.sql.Blob bl=GetBlobDataFromDB();
String fs = bl.getBytes();
为FS的FileInputStream它waxworking罚款 – 2013-02-21 11:23:28
其他答案可能是替代品。您也可以尝试它们(对于不同版本的jdbc,支持该方法的不同重载) – 2013-02-21 11:32:56