/* 
 
MySQL and Java Developer's Guide 
 
Mark Matthews, Jim Cole, Joseph D. Gradecki 
Publisher Wiley, 
Published February 2003,  
ISBN 0471269239 
 
*/ 
 
 
import java.awt.Container; 
import java.awt.FlowLayout; 
import java.awt.Graphics2D; 
import java.awt.GridLayout; 
import java.awt.Image; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.awt.geom.AffineTransform; 
import java.awt.image.BufferedImage; 
import java.io.BufferedInputStream; 
import java.io.FileInputStream; 
import java.sql.Blob; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.sql.Timestamp; 
import java.util.Vector; 
 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
 
public class IDlookBlob extends JFrame { 
 
  private JButton getAccountButton, updateAccountButton, insertAccountButton, 
      nextButton, previousButton, lastButton, firstButton; 
 
  private JList accountNumberList; 
 
  private JTextField accountIDText, nailFileText, thumbIDText; 
 
  private JTextArea errorText; 
 
  private Connection connection; 
 
  private Statement statement; 
 
  private ResultSet rs; 
 
  private ImageIcon icon = null; 
 
  private ImageIcon iconThumbnail = null; 
 
  JLabel photographLabel; 
 
  public IDlookBlob() { 
    try { 
      Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    } catch (Exception e) { 
      System.err.println("Unable to find and load driver"); 
      System.exit(1); 
    } 
  } 
 
  private void loadAccounts() { 
    Vector v = new Vector(); 
    try { 
      rs = statement.executeQuery("SELECT * FROM thumbnail"); 
 
      while (rs.next()) { 
        v.addElement(rs.getString("acc_id")); 
      } 
    } catch (SQLException e) { 
      displaySQLErrors(e); 
    } 
    accountNumberList.setListData(v); 
  } 
 
  private void buildGUI() { 
    Container c = getContentPane(); 
    c.setLayout(new FlowLayout()); 
 
    accountNumberList = new JList(); 
    loadAccounts(); 
    accountNumberList.setVisibleRowCount(2); 
    JScrollPane accountNumberListScrollPane = new JScrollPane( 
        accountNumberList); 
 
    //Do Get Account Button 
    getAccountButton = new JButton("Get Account"); 
    getAccountButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
        try { 
          rs.beforeFirst(); 
          while (rs.next()) { 
            if (rs.getString("acc_id").equals( 
                accountNumberList.getSelectedValue())) 
              break; 
          } 
          if (!rs.isAfterLast()) { 
            accountIDText.setText(rs.getString("acc_id")); 
            thumbIDText.setText(rs.getString("thumb_id")); 
            Blob b = rs.getBlob("pic"); 
 
            icon = new ImageIcon(b.getBytes(1L, (int) b.length())); 
            createThumbnail(); 
            photographLabel.setIcon(iconThumbnail); 
          } 
        } catch (SQLException selectException) { 
          displaySQLErrors(selectException); 
        } 
      } 
    }); 
 
    //Do Update Account Button 
    updateAccountButton = new JButton("Update Account"); 
    updateAccountButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
        try { 
          byte[] bytes = new byte[50000]; 
          FileInputStream fs = new FileInputStream(nailFileText 
              .getText()); 
          BufferedInputStream bis = new BufferedInputStream(fs); 
          bis.read(bytes); 
 
          rs.updateBytes("thumbnail.pic", bytes); 
          rs.updateRow(); 
          bis.close(); 
 
          accountNumberList.removeAll(); 
          loadAccounts(); 
        } catch (SQLException insertException) { 
          displaySQLErrors(insertException); 
        } catch (Exception generalE) { 
          generalE.printStackTrace(); 
        } 
      } 
    }); 
 
    //Do insert Account Button 
    insertAccountButton = new JButton("Insert Account"); 
    insertAccountButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
        try { 
          byte[] bytes = new byte[50000]; 
          FileInputStream fs = new FileInputStream(nailFileText 
              .getText()); 
          BufferedInputStream bis = new BufferedInputStream(fs); 
          bis.read(bytes); 
 
          rs.moveToInsertRow(); 
          rs.updateInt("thumb_id", Integer.parseInt(thumbIDText 
              .getText())); 
          rs.updateInt("acc_id", Integer.parseInt(accountIDText 
              .getText())); 
          rs.updateBytes("pic", bytes); 
          rs.updateObject("sysobject", null); 
          rs.updateTimestamp("ts", new Timestamp(0)); 
          rs.updateTimestamp("act_ts", new Timestamp( 
              new java.util.Date().getTime())); 
          rs.insertRow(); 
          bis.close(); 
 
          accountNumberList.removeAll(); 
          loadAccounts(); 
        } catch (SQLException insertException) { 
          displaySQLErrors(insertException); 
        } catch (Exception generalE) { 
          generalE.printStackTrace(); 
        } 
      } 
    }); 
 
    photographLabel = new JLabel(); 
    photographLabel.setHorizontalAlignment(JLabel.CENTER); 
    photographLabel.setVerticalAlignment(JLabel.CENTER); 
    photographLabel.setVerticalTextPosition(JLabel.CENTER); 
    photographLabel.setHorizontalTextPosition(JLabel.CENTER); 
 
    JPanel first = new JPanel(new GridLayout(4, 1)); 
    first.add(accountNumberListScrollPane); 
    first.add(getAccountButton); 
    first.add(updateAccountButton); 
    first.add(insertAccountButton); 
 
    accountIDText = new JTextField(15); 
    thumbIDText = new JTextField(15); 
    errorText = new JTextArea(5, 15); 
    errorText.setEditable(false); 
 
    JPanel second = new JPanel(); 
    second.setLayout(new GridLayout(2, 1)); 
    second.add(thumbIDText); 
    second.add(accountIDText); 
 
    JPanel third = new JPanel(); 
    third.add(new JScrollPane(errorText)); 
 
    nailFileText = new JTextField(25); 
 
    c.add(first); 
    c.add(second); 
    c.add(third); 
    c.add(nailFileText); 
    c.add(photographLabel); 
 
    setSize(500, 500); 
    show(); 
  } 
 
  public void connectToDB() { 
    try { 
      connection = DriverManager 
          .getConnection("jdbc:mysql://192.168.1.25/identification?user=spider&password=spider"); 
      statement = connection.createStatement( 
          ResultSet.TYPE_SCROLL_INSENSITIVE, 
          ResultSet.CONCUR_UPDATABLE); 
 
    } catch (SQLException connectException) { 
      System.out.println(connectException.getMessage()); 
      System.out.println(connectException.getSQLState()); 
      System.out.println(connectException.getErrorCode()); 
      System.exit(1); 
    } 
  } 
 
  private void displaySQLErrors(SQLException e) { 
    errorText.append("SQLException: " + e.getMessage() + "\n"); 
    errorText.append("SQLState:     " + e.getSQLState() + "\n"); 
    errorText.append("VendorError:  " + e.getErrorCode() + "\n"); 
  } 
 
  private void init() { 
    connectToDB(); 
  } 
 
  private void createThumbnail() { 
    int maxDim = 350; 
    try { 
      Image inImage = icon.getImage(); 
 
      double scale = (double) maxDim / (double) inImage.getHeight(null); 
      if (inImage.getWidth(null) > inImage.getHeight(null)) { 
        scale = (double) maxDim / (double) inImage.getWidth(null); 
      } 
 
      int scaledW = (int) (scale * inImage.getWidth(null)); 
      int scaledH = (int) (scale * inImage.getHeight(null)); 
 
      BufferedImage outImage = new BufferedImage(scaledW, scaledH, 
          BufferedImage.TYPE_INT_RGB); 
 
      AffineTransform tx = new AffineTransform(); 
 
      if (scale < 1.0d) { 
        tx.scale(scale, scale); 
      } 
 
      Graphics2D g2d = outImage.createGraphics(); 
      g2d.drawImage(inImage, tx, null); 
      g2d.dispose(); 
 
      iconThumbnail = new ImageIcon(outImage); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
 
  public static void main(String[] args) { 
    IDlookBlob id = new IDlookBlob(); 
 
    id.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) { 
        System.exit(0); 
      } 
    }); 
 
    id.init(); 
    id.buildGUI(); 
  } 
} 
 
            
          
  
  |