2012-07-16 102 views
4

我正在使用JSF2.0創建web應用程序,其中在mysql中,我使用數據類型將圖像存儲爲MEDIUMBLOB使用PreparedStatement將blob設置爲null

要插入值,我使用PreparedStatement如下所示。

PreparedStatement psmnt = con.prepareStatement("INSERT INTO sketchesSG002003 (userid, imageTitle, imageData, drawingComments) VALUES (?,?,?,?)"); 
psmnt.setLong(1, personalInfoId); 
psmnt.setString(2, sketchesSG002003Title); 

try { 
    String fileName = FilenameUtils.getName(sketchesSG002003ImageUpload.getName()); 
    File image = new File(fileName); 
    InputStream fis = sketchesSG002003ImageUpload.getInputStream(); 
    psmnt.setBinaryStream(3, fis, (int) sketchesSG002003ImageUpload.getSize()); 
} catch (Exception e) { 
    psmnt.setBinaryStream(3, null); 
} 
psmnt.setString(4, sketchesSG002003Comments); 
i = psmnt.executeUpdate(); 

但是我得到錯誤的

java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setBinaryStream(ILjava/io/InputStream;)V 

堆棧跟蹤的某些部分是

javax.faces.el.EvaluationException: java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setBinaryStream(ILjava/io/InputStream;)V 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) 
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 

我相信上面的錯誤是聲明psmnt.setBinaryStream(3, null);

我的問題是如何能我將二進制數據設置爲Null或Nothing?

+0

這個問題是不是JSF相關。 – 2012-07-16 00:56:53

+0

我知道,但是因爲我是使用該技術,我認爲包括它...沒什麼... – 2012-07-16 01:08:44

回答

5

這些日子怎麼回事?我得到解決後,我問的問題:(

psmnt.setNull(3, java.sql.Types.BLOB);的伎倆。

+0

在這種情況下,LongBlob和正常blob是否有區別? – 2017-04-08 19:15:57