2012-07-24 90 views
-1

我正在構建一個JAVA Netbeans和MySQL程序,用戶可以在其中插入圖像並將其更新到數據庫中。它被成功插入。我已經將這些圖像設置爲在Jlabel中顯示。但是,一旦我更新該圖像,它就會更新,但圖像不會顯示在Jlabel中。請幫我解決這個問題。這是我的代碼在我更新後,BLOB圖像不會顯示在Jlabel中

package Frames; 
import Methods.DB_Con; 
import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.sql.*; 
import javax.swing.*; 
import net.proteanit.sql.DbUtils; 



public class EditCategory extends javax.swing.JFrame { 
    private ImageIcon format=null; 
    String filename = null; 
    int s = 0; 
    byte[] category_image = null; 

    public void Update_Table(){ 
     try{ 
       ResultSet rs; 
       Connection con = DB_Con.getConnection(); 
       String sql ="select Category_Code,Category_Name from category"; 
       PreparedStatement st = (PreparedStatement) con.prepareStatement(sql); 
       rs=st.executeQuery(); 
       jTable1.setModel(DbUtils.resultSetToTableModel(rs)); 




       st.close(); 
     } 
     catch(Exception e){ 
      JOptionPane.showMessageDialog(null, "Error loading table"); 
     } 
    } 

    public void set_Icon(){ 

     try{ 
      int row= jTable1.getSelectedRow(); 
      jLabel4.setText(jTable1.getModel().getValueAt(row, 0).toString()); 
      jTextField1.setText(jTable1.getModel().getValueAt(row, 1).toString()); 
      Connection con = DB_Con.getConnection(); 
      ResultSet rs; 
      String cat_id=jTable1.getModel().getValueAt(row, 0).toString(); 

      String sql ="select Category_Image from category where Category_Code='"+cat_id+"'"; 
      PreparedStatement st = (PreparedStatement) con.prepareStatement(sql); 
      rs = st.executeQuery(); 

      if(rs.next()){ 
       byte[] imagedata=rs.getBytes("Category_Image"); 
       format =new ImageIcon(imagedata); 
       jLabel1.setIcon(format); 
      } 
     } 
     catch(Exception e){ 
     } 
    } 

    /** Creates new form EditCategory */ 
    public EditCategory() { 
     initComponents(); 



    } 


    /** This method is called from within the constructor to 
    * initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is 
    * always regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     jLabel12 = new javax.swing.JLabel(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     jTable1 = new javax.swing.JTable(); 
     jButton2 = new javax.swing.JButton(); 
     jButton3 = new javax.swing.JButton(); 
     jLabel5 = new javax.swing.JLabel(); 
     jLabel1 = new javax.swing.JLabel(); 
     jPanel1 = new javax.swing.JPanel(); 
     jLabel4 = new javax.swing.JLabel(); 
     jLabel2 = new javax.swing.JLabel(); 
     jButton1 = new javax.swing.JButton(); 
     jTextField2 = new javax.swing.JTextField(); 
     jLabel3 = new javax.swing.JLabel(); 
     jTextField1 = new javax.swing.JTextField(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     addWindowFocusListener(new java.awt.event.WindowFocusListener() { 
      public void windowGainedFocus(java.awt.event.WindowEvent evt) { 
       formWindowGainedFocus(evt); 
      } 
      public void windowLostFocus(java.awt.event.WindowEvent evt) { 
      } 
     }); 
     addWindowListener(new java.awt.event.WindowAdapter() { 
      public void windowOpened(java.awt.event.WindowEvent evt) { 
       formWindowOpened(evt); 
      } 
     }); 

     jLabel12.setBackground(new java.awt.Color(255, 255, 255)); 
     jLabel12.setFont(new java.awt.Font("Tahoma", 0, 36)); 
     jLabel12.setForeground(new java.awt.Color(255, 0, 0)); 
     jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel12.setText("Edit Category"); 
     jLabel12.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED, null, new java.awt.Color(0, 153, 255), null, null)); 

     jTable1.setBackground(new java.awt.Color(204, 204, 255)); 
     jTable1.setModel(new javax.swing.table.DefaultTableModel(
      new Object [][] { 

      }, 
      new String [] { 
       "", "" 
      } 
     ) { 
      Class[] types = new Class [] { 
       java.lang.Integer.class, java.lang.Object.class 
      }; 
      boolean[] canEdit = new boolean [] { 
       false, false 
      }; 

      public Class getColumnClass(int columnIndex) { 
       return types [columnIndex]; 
      } 

      public boolean isCellEditable(int rowIndex, int columnIndex) { 
       return canEdit [columnIndex]; 
      } 
     }); 
     jTable1.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       jTable1MouseClicked(evt); 
      } 
     }); 
     jScrollPane1.setViewportView(jTable1); 
     jTable1.getColumnModel().getColumn(0).setResizable(false); 
     jTable1.getColumnModel().getColumn(1).setResizable(false); 

     jButton2.setText("Done"); 
     jButton2.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton2ActionPerformed(evt); 
      } 
     }); 

     jButton3.setText("Back"); 
     jButton3.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton3ActionPerformed(evt); 
      } 
     }); 

     jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel5.setText("**Click on table row to get values to edit**"); 
     jLabel5.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED, null, new java.awt.Color(0, 153, 255), null, null)); 

     jLabel1.setBackground(new java.awt.Color(204, 255, 204)); 
     jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED)); 

     jPanel1.setBackground(new java.awt.Color(204, 204, 204)); 
     jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED)); 

     jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel4.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED)); 

     jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel2.setText("Edit Category Name"); 
     jLabel2.setBorder(javax.swing.BorderFactory.createEtchedBorder()); 

     jButton1.setText("Browse New Image"); 
     jButton1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton1ActionPerformed(evt); 
      } 
     }); 

     jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel3.setText("Category Code"); 
     jLabel3.setBorder(javax.swing.BorderFactory.createEtchedBorder()); 

     jTextField1.setHorizontalAlignment(javax.swing.JTextField.CENTER); 

     javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
     jPanel1.setLayout(jPanel1Layout); 
     jPanel1Layout.setHorizontalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel1Layout.createSequentialGroup() 
       .addContainerGap() 
       .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(jPanel1Layout.createSequentialGroup() 
         .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addGap(100, 100, 100) 
         .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 440, javax.swing.GroupLayout.PREFERRED_SIZE)) 
        .addGroup(jPanel1Layout.createSequentialGroup() 
         .addGap(10, 10, 10) 
         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
          .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
          .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 128, Short.MAX_VALUE)) 
         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addGroup(jPanel1Layout.createSequentialGroup() 
           .addGap(112, 112, 112) 
           .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 440, javax.swing.GroupLayout.PREFERRED_SIZE)) 
          .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() 
           .addGap(112, 112, 112) 
           .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 440, javax.swing.GroupLayout.PREFERRED_SIZE))))) 
       .addContainerGap()) 
     ); 
     jPanel1Layout.setVerticalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel1Layout.createSequentialGroup() 
       .addContainerGap() 
       .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addGap(16, 16, 16) 
       .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addGap(28, 28, 28) 
       .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addComponent(jButton1) 
        .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addContainerGap()) 
     ); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(195, 195, 195) 
       .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(209, 209, 209) 
       .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 76, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(218, 218, 218)) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(61, 61, 61) 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 437, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 115, Short.MAX_VALUE) 
       .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(87, 87, 87)) 
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
       .addContainerGap(288, Short.MAX_VALUE) 
       .addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(272, 272, 272)) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(160, 160, 160) 
       .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 246, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(434, Short.MAX_VALUE)) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(28, 28, 28) 
       .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(98, Short.MAX_VALUE)) 
     ); 

     layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jButton2, jButton3}); 

     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
        .addGroup(layout.createSequentialGroup() 
         .addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addGap(18, 18, 18) 
         .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 138, javax.swing.GroupLayout.PREFERRED_SIZE)) 
        .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addGap(33, 33, 33) 
       .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(29, 29, 29) 
       .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(37, 37, 37) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(jButton2) 
        .addComponent(jButton3)) 
       .addContainerGap(41, Short.MAX_VALUE)) 
     ); 

     java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); 
     setBounds((screenSize.width-856)/2, (screenSize.height-593)/2, 856, 593); 
    }// </editor-fold>       

    private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {          
      set_Icon(); 

    }          

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
     JFileChooser chooser = new JFileChooser(); 
     chooser.showOpenDialog(null); 
     File f = chooser.getSelectedFile(); 
     filename = f.getAbsolutePath(); 
     jTextField2.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); 
      } 
      category_image = bos.toByteArray(); 
     } catch (Exception e) { 
      JOptionPane.showMessageDialog(null, e); 
     } 


    }           

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {           
     EditMenuMain em = new EditMenuMain(); 
     em.setVisible(true); 
     this.setVisible(false); 
    }           

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
     try{ 
      int code=Integer.parseInt(jLabel4.getText()); 
      String newCatName = jTextField1.getText(); 

      Connection con = DB_Con.getConnection(); 
      String sql ="update category set Category_Name='"+ newCatName+"',Category_Image='"+category_image+"' where Category_Code='"+code+"'"; 
      PreparedStatement st = (PreparedStatement) con.prepareStatement(sql); 
      int val = st.executeUpdate(sql); 

      if(val==1){ 

       JOptionPane.showMessageDialog(null, "Updated Category Details Successfuly"); 
      } 
      else{ 
       JOptionPane.showMessageDialog(null, "Fill all fields"); 

      } 



     } 
     catch(Exception e){ 
     } 
     Update_Table(); 


    }           

    private void formWindowOpened(java.awt.event.WindowEvent evt) {         
     Update_Table(); 
    }         

    private void formWindowGainedFocus(java.awt.event.WindowEvent evt) {          

    }          

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new EditCategory().setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JButton jButton1; 
    private javax.swing.JButton jButton2; 
    private javax.swing.JButton jButton3; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JLabel jLabel12; 
    private javax.swing.JLabel jLabel2; 
    private javax.swing.JLabel jLabel3; 
    private javax.swing.JLabel jLabel4; 
    private javax.swing.JLabel jLabel5; 
    private javax.swing.JPanel jPanel1; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JTable jTable1; 
    private javax.swing.JTextField jTextField1; 
    private javax.swing.JTextField jTextField2; 
    // End of variables declaration     

} 
+3

請使用SSCCE(Short,Self Contained,Correct Example) – 2012-07-24 13:42:01

回答

0
Connection connection = null; 
    PreparedStatement statement = null; 

    ResultSet result; 


    public DisplayImage() { 
     super("Image Display"); 
     setSize(600,600); 
     connection = getConnection(); 
     try { 
      statement = connection.prepareStatement("select content from image where id=1"); 
      result = statement.executeQuery(); 

       byte[] image = null; 
       while(result.next()) { 
        image = result.getBytes("content"); 

       } 
       Image img = Toolkit.getDefaultToolkit().createImage(image); 
       ImageIcon icon =new ImageIcon(img); 
       JLabel lPhoto = new JLabel(); 
       lPhoto.setIcon(icon); 
       add(lPhoto); 

     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     setVisible(true); 
    } 


    public Connection getConnection() { 
     Connection connection = null; 

     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      connection = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/db_name", "user", "pass"); 
     } catch (Exception e) { 
      System.out.println("Error Occured While Getting the Connection: - " 
        + e); 
     } 
     return connection; 
    } 

    public static void main(String[] args) { 
     new DisplayImage(); 
    } 

}