2013-02-21 115 views
0

我得到異常下面的代碼異常在插入圖像插入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) 

回答

1

簡單地把你的JDBC驅動程序不實現最新版本的jdbc:它沒有方法setBinaryStream()。這意味着你不能使用它。你可以嘗試setBlob()與完全讀取的圖像。

+0

爲FS的FileInputStream它waxworking罰款 – 2013-02-21 11:23:28

+0

其他答案可能是替代品。您也可以嘗試它們(對於不同版本的jdbc,支持該方法的不同重載) – 2013-02-21 11:32:56

1

從堆棧跟蹤看來,您調用的方法是抽象的。根據文檔,JtdsPreparedStatement.setBinaryStream()有三個參數:索引,流和長度。

嘗試添加int作爲長度參數:pstmt.setBinaryStream(4, fs);

0

嘗試轉換

java.sql.Blob bl=GetBlobDataFromDB(); 
String fs = bl.getBytes();