IDlookBlob.java Source code

Java tutorial

Introduction

Here is the source code for IDlookBlob.java

Source

/*
    
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();
    }
}