Blob and JDBC: Image
/*
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.io.FileOutputStream;
import java.io.InputStream;
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 IDlookGetStream 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 IDlookGetStream() {
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 blob = rs.getBlob("pic");
int b;
InputStream bis = rs.getBinaryStream("pic");
FileOutputStream f = new FileOutputStream("pic.jpg");
while ((b = bis.read()) >= 0) {
f.write(b);
}
f.close();
bis.close();
icon = new ImageIcon(blob.getBytes(1L, (int) blob
.length()));
createThumbnail();
photographLabel.setIcon(iconThumbnail);
}
} catch (Exception 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(Exception e) {
errorText.append("Exception: " + e.getMessage() + "\n");
// errorText.append("State: " + 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) {
IDlookGetStream id = new IDlookGetStream();
id.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
id.init();
id.buildGUI();
}
}
Related examples in the same category