2014-01-17 74 views
0

我想更新或覆蓋我的blob文件,我的圖片字段在我的數據庫中,我只能添加圖像,但我無法更新它。如何在Java中覆蓋BLOB文件

這裏是我的更新域代碼:

try{ 

     String value1=txtID.getText(); 
     String value2=txtFirst.getText(); 
     String value3=txtLast.getText(); 
     String value4=txtUser.getText(); 
     String value5=txtPass.getText(); 
     Object value6=cmbType.getSelectedItem(); 
     Object value7=cmbStatus.getSelectedItem(); 
     String value8=txtEmail.getText(); 

     String sql="Update Account SET ID='"+value1+"', Fname='"+value2+"', Lname='"+value3+"',Email='"+value8+"', Username='"+value4+"', " 
     + "Password='"+value5+"',Type='"+value6+"',Status='"+value7+"' WHERE ID='"+value1+"' "; 

     pst=conn.prepareStatement(sql); 

     int updateCount = pst.executeUpdate(); 

     JOptionPane.showMessageDialog(null,"Data has been Updated"); 

    } 

    catch(SQLException e){ 
     JOptionPane.showMessageDialog(null,e); 
    } 

    finally{ 
     try{ 
      rs.close(); 
      pst.close(); 

     } 
     catch(SQLException e){ 
      JOptionPane.showMessageDialog(null,e); 
     } 
    } 
    } 

可以有人建議代碼更新或重寫blobfile。

+1

http://stackoverflow.com/questions/6189637/problems-with-update-statement-in-sqlite谷歌是你的朋友 –

+0

這是開放[SQL注入](http://en.wikipedia.org/維基/ SQL_injection)。在SQL語句中使用'?'s,而不是將參數連接到它。 – GriffeyDog

回答

0

使用PreparedStatement明智地使用SQLplaceholders'?'創建它之後設置參數。在動態創建帶有動態參數的查詢時,請不要使用連接運算符。

這將無法正常工作

String sql="Update Account SET ID='"+value1+"', 
    Fname='"+value2+"', Lname='"+value3+"',Email='" 
    +value8+"', Username='"+value4+"', "+ "Password='" 
    +value5+"',Type='"+value6+"',Status='"+value7+"' 
    WHERE ID='"+value1+"' "; 

您串聯Object類型的變量在上述SQL string.That是不公平的。

這種方式是去

String sql = String sql="Update Account SET ID=?, Fname=?, Lname=?,Email=?, Username=?, Password=?,Type=?,Status=? WHERE ID=? "; 
PreparedStatement pstmt = con.preparedStatement(sql); 
//set all the values one by one by calling the appropriate 
//setter methods based on field type 
pstmt.setString(1,value1); 
.... 
.... 
//Set the Blob to be updated 
pstmt.setBlob(BLOB_INDEX,BLOB_OBJ); 

希望這有助於!

+0

我該如何改進它? –

+0

我的答案解釋了你應該如何改進。嘗試保留它作爲參考,並在其中做的更改 – Keerthivasan

+0

我有一個小問題,我將放在BLOB_INDEX,BLOB_OBJ –