1

私のプログラムでは、ユーザーは Java プログラムを介して mysql に画像を保存できます。それは Jlabel に表示されます。画像挿入部分は正常に動作します。画像が挿入され、適切に表示されます。しかし、ユーザーが更新しようとすると、画像が適切に更新されません。更新後、Mysql にアクセスしてチェックインすると、画像がありません。いくつかのゴミの値があります。誰でも私を助けることができますか?

//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) {
    }
}
4

4 に答える 4

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);

これにより、準備されたステートメントが作成されますが、問題が解決するかどうかを完全に確認してください。

于 2012-09-24T12:51:06.207 に答える
0

Javaライブラリでそれを行う方法はわかりませんが、SQL文字列を連結する代わりに、パラメータ(おそらく、setBinaryStreamまたはsetBlob)を使用してSQLクエリを使用する必要があります。それはあなたの問題を解決するかもしれません...

あなたを助けるかもしれないこれを見つけました:

JavaのPreparedStatementとパラメータを設定する確率

http://www.herongyang.com/JDBC/MySQL-PreparedStatement-Parameters.html

この:

http://www.jdbc-tutorial.com/jdbc-prepared-statements.htm

于 2012-09-24T12:36:35.897 に答える