2012-09-24 44 views
1

在我的程序中,用戶可以通過java程序將圖像保存在mysql中,並且它將顯示在Jlabel中。圖像插入部分工作正常。圖像被插入並正確顯示。但是當用戶嘗試更新時,圖像沒有正確更新。更新後,當我去檢查Mysql時,圖像不存在。一些垃圾價值在那裏。誰能幫我 ?更新保存爲mysql blob格式的圖像

//Method to get the image from the file chooser 
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    JFileChooser chooser = new JFileChooser(); 
    chooser.showOpenDialog(null); 
    File f = chooser.getSelectedFile(); 
    filename = f.getAbsolutePath(); 
    jTextField1.setText(filename); 

    try { 
     File image = new File(filename); 
     FileInputStream fis = new FileInputStream(image); 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     byte buf[] = new byte[1024]; 

     for (int readNum; (readNum = fis.read(buf)) != -1;) { 
      bos.write(buf, 0, readNum); 
     } 
     menu_image_new = bos.toByteArray(); 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
    } 
} 

// Save button click event where the update query run 
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
    try { 
     Connection con = DB_Con.getConnection(); 
     String sql = "update menu set Menu_Image='" + menu_image_new + "' where Menu_Code='" + FoodMenu_FOA.clicked + "'"; 
     PreparedStatement st = (PreparedStatement) con.prepareStatement(sql); 
     st.executeUpdate(); 
     JOptionPane.showMessageDialog(null, "Image Updated Successfully"); 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
    } 
} 

//Method to display image in Jlabel 
public void set_Icon_menu() { 
    try { 
     int row = menu_table.getSelectedRow(); 
     Connection con = DB_Con.getConnection(); 
     ResultSet rs; 
     String menu_id = menu_table.getModel().getValueAt(row, 0).toString(); 
     String sql = "select Menu_Image from menu where Menu_Code='" + menu_id + "'"; 
     PreparedStatement st = (PreparedStatement) con.prepareStatement(sql); 
     rs = st.executeQuery(); 
     if (rs.next()) { 
      byte[] imagedata = rs.getBytes("Menu_Image"); 
      format = new ImageIcon(imagedata); 
      menu_label.setIcon(format); 

     } 
    } catch (Exception e) { 
    } 
} 
+0

您是否嘗試在寫入之前清除列? – macken88

回答

0
PreparedStatement stmt = con.preparestatement("update menu set Menu_Image= ? where Menu_Code= ?"); 
stmt.setString(1, menu_image_new); 
stmt.setBlob(2, FoodMenu_FOA.clicked); 

這將創建一個事先準備好的聲明,指出完全肯定是否會解決你的問題,但

+0

非常感謝...我的問題已經解決了thanx ...乾杯! –

+0

那麼,這就是我寫的.... @Ashan:也許標記我的答案是正確的:)? – bang

+0

是的,非常抱歉,我忘了標記它是正確的......它完成了...... :) –

-1

你可以試試:

try { 
    String update = "update menu set IMAGE=? where Menu_Code='" + 
     edit_idnumber.getText() + "'"; 
    pst = conn.prepareStatement(update); 
    pst.setBytes(1, menu_image_new); 
    pst.execute(); 
} catch (Exception e) { 
    JOptionPane.showMessageDialog(null, e); 
} 
0

我有同樣的問題,你是第一個明確的BLOB格式需要在列。 通過將Menu_Image設置爲null

// Save button click event where the update query run 

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
    PreparedStatement st; 
try { 
    Connection con = DB_Con.getConnection(); 
String sql = "update menu set Menu_Image= null where Menu_Code='" + 
    FoodMenu_FOA.clicked + "'"; 
    st = (PreparedStatement) con.prepareStatement(sql); 
    st.executeUpdate(); 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
    } 

// As your are using prepare statement set 

    try { 
     Connection con = DB_Con.getConnection(); 
     String sql = "update menu set Menu_Image= ? where Menu_Code='" + 
     FoodMenu_FOA.clicked + "'"; 
     st = (PreparedStatement) con.prepareStatement(sql); 
     st.executeUpdate(); 
     JOptionPane.showMessageDialog(null, "Image Updated Successfully"); 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
     } 
}