2014-01-17 157 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 –