cbsecsnip-logo                         cbse-syllabus
cbse 100%
An online library for CBSE Computer Science and Informatics Practices students

How to store and retrive image from MySQL database using JavaPrint Friendly Version of this pagePrint Get a PDF version of this webpagePDF

We develop lots of project using Java and MySQL, few of them are –
  • Student Management System
  • Hospital Management System
  • Hotel Management System
  • Bank Management System
  • Library Management System
  • Retail Shop Management System
All above listed projects are very common projects, but most of us IGNORE one most important feature, that without image/photograph these projects are incomplete.
I received lots of mail regarding "HOW TO STORE AND RETRIVE IMAGE/PHOTOGRAPH IN MYSQL USING JAVA". Download complete project

In this tutorial I’ll show you how to insert an image into MySQL database through Java and retrieve them back and display them on jFrame.
Step 1: Open MySQL client
Step 2: Create a Database, in this tutorial I’m using student database.
Execute the following query
CREATE DATABASE STUDENT;
Step 3: Create Table, here in this tutorial personaldetail is the name of table
Execute the following query
CREATE  TABLE IF NOT EXISTS personaldetail (
st_id int(5) NOT NULL,
st_name varchar(30) NOT NULL,
st_phone varchar(12) NOT NULL,
st_photo blob,
PRIMARY KEY (`st_id`)
)
Database and table is created, now let us start Netbeans and design an interface as per your need. Refer the interface used in this tutorial
image1
So now we are ready with our frontend interface. It is assumed that you all are well aware of Database connectivity process using JDBC API. So, here I’m skipping that part and moving to the concern topic.

Note>Database connectivity code is available in project and MySQL JDBC Driver is included in project library folder.  
Step 4: Import following packages on top of the source window.
  import  java.io.*;
  import  java.sql.*;
  import  javax.swing.JFileChooser;
  import  javax.swing.JOptionPane;
Step 5: Double click on Select Photograph button (jButton1) and, you will be on Source window inside jButton1ActionPerformed method. Here you have to write the code for selecting photograph of students. Here is the code for selecting photograph –
  try
  {
     JFileChooser picChooser = new JFileChooser();    //creates the JFileChooser object
     int returnVal = picChooser.showOpenDialog(null); //Opens the JFileChooser window
     File file = null;
     if(returnVal  == JFileChooser.APPROVE_OPTION)     //Confirmation for selected file
     {
        file  = picChooser.getSelectedFile();             //Returns the selected file.
        String filename=file.getAbsolutePath();          //Returns the path of the file.
        pics=new File(filename);              //File pics; (Define as global variable).
        fistream=new FileInputStream(pics);  //FileInputStream fistream ; (Define as global  variable).
     }
  }
  catch(Exception  ex)
  {
        ex.printStackTrace();
  }
Note> Both the RED colored variables pics and fistream will be used in Step 5 for converting image into binary format for saving image in MySQL.
Output of the above code is -
image2
Step 6: Select the image from with window and click on Open.

St../../cbse-cs-n-ip/ep 7: Click on Save button and click on your choice Yes/No/Cancel
image3

Save button code
try
{
  int sid=Integer.parseInt(jTextField1.getText());
  String  sname=jTextField2.getText();
  String  sph=jTextField3.getText();
  //Code for confirmation Dialog  Box
  int code=JOptionPane.showConfirmDialog(this,"Information of " + sname + " will be added in database.","Confirmation",
  JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);
  if(code==JOptionPane.YES_OPTION)
  {
    //SQL preparestatement query  for insert into
    psmnt  = con.prepareStatement("insert into personaldetail(st_Id,st_name,st_phone,st_photo)"+"values(?,?,?,?)");
    //1 represent column number in  table and sid represents the variable which will pass the value to the  column 1 of table.
    psmnt.setInt(1,sid);
    psmnt.setString(2,sname);
    psmnt.setString(3,sph);
    //Convert the image in Binary  format
    psmnt.setBinaryStream(4,  (InputStream)fistream, (int)(pics.length()));
    //Code for updating the table
    int  success = psmnt.executeUpdate();
    if(success>0)
    {
      JOptionPane.showMessageDialog(this,  "Image Uploaded");
    }
    else
    {
      JOptionPane.showMessageDialog(this,  "Problem is uploading");
    }
  }
}
catch(Exception ex)
{
  ex.printStackTrace();
}
If image saved successfully in database you can see this Message otherwise Error will be shown.
image4
Till this point we know “How to store image in MySQL database through Java”. Now we will see “How to retrieve image from MySQL database through Java”.
Step8: Design an interface as per your requirement for viewing the records from MySQL database. Figure shown below is interface used in this tutorial.
image5
As you can see I used JLabel, but JLabel is placed on JDesktopPane because if you have images of different size then JDesktopPane will not allow different sized images to streach or resize your JFrame automatically, your image will be bounded inside JDesktopPane.
Step 9: Import these 2 packages
import java.sql.*;
import javax.swing.ImageIcon;
Step 10: Now when you start verifying students your application should not be blank, at least it should show the 1st record of student at startup. So for this write the code given in below inside the constructor after initComponents();
try
{
  Class.forName("com.mysql.jdbc.Driver");
  con = DriverManager.getConnection("jdbc:mysql://localhost:3306/student","root","");
  String query = "select * from personaldetail where st_id = 12458";
  psmnt = con.prepareStatement(query);
rs=psmnt.executeQuery(); rs.next(); jTextField1.setText(Integer.toString(rs.getInt(1))); jTextField2.setText(rs.getString(2)); jTextField3.setText(rs.getString(3)); //Get the binary format of image from 4th column of the table. byte[] imagedata=rs.getBytes(4); //Convert the binary formatted data which is stored in imagedata. And store the image in format variable. format=new ImageIcon(imagedata);  //ImageIcon format; (Define as global variable). //Display the image on jLabel1. jLabel1.setIcon(format); } catch(Exception ex) { ex.printStackTrace(); }
Step 11: Code for Next Button
try
{
  if(rs1==null)
  {
     String  query = "select * from personaldetail";
     psmnt  = con.prepareStatement(query);
     rs1=psmnt.executeQuery();
  }
  if(rs1.previous())
  {
     jTextField1.setText(Integer.toString(rs1.getInt(1)));
     jTextField2.setText(rs1.getString(2));
     jTextField3.setText(rs1.getString(3));
     byte[]  imagedata=rs1.getBytes(4);
     format=new  ImageIcon(imagedata);
     jLabel1.setIcon(format);
  }
  else
  {
     JOptionPane.showMessageDialog(this,  "This is first record of student");
  }
  }
  catch(Exception e)
{ e.printStackTrace(); }
Below figure shows message if you try to go beyond last record.
image6
Step 12: Code for Previous Button
try
{
   if(rs1==null)
   {
      String query = "select * from personaldetail";
      psmnt = con.prepareStatement(query);
      rs1=psmnt.executeQuery();
   }
   if(rs1.next())
   {
      jTextField1.setText(Integer.toString(rs1.getInt(1)));
      jTextField2.setText(rs1.getString(2));
      jTextField3.setText(rs1.getString(3));
      byte[]  imagedata=rs1.getBytes(4);
      format=new  ImageIcon(imagedata);
      jLabel1.setIcon(format);
   }
   else
   {
      JOptionPane.showMessageDialog(this,  "This is last record of student");
   }
}
catch(Exception e)
{
    e.printStackTrace();
}
Below figure shows message if you try to go before first record.
image7

Here we completed the tutorial on “HOW TO STORE AND RETRIVE IMAGE/PHOTOGRAPH FROM MYSQL USING JAVA”. I hope this tutorial helped you to know something really useful.
If you have any doubt or feedback please feel free to post your doubts or send feedback at our Forum or Contact Us address respectively.

Regards
Vishal Deb
Author

Copyright © 2012, cbsecsnip.in | | Disclaimer | Terms of Service | Privacy Policy
login