title: Storing object in database in Java
body: <p>I am trying to store my object in MySQL database using java language. I am trying to convert object into byte so I can store it into LONGBLOB. But I am facing error i.e "NotSerializable Exception".</p>
  
  <p>My Class whose object I want to sore:</p>
  
  <pre><code>public class Books implements Serializable {
  
  private int isbn;
  private String bookName;
  private String author;
  private String edition;
  private int rowNo;
  private int colNo;
  private String shelfNo;
  private String img;
  private InputStream imag;
  validation v = new Validation();
  Database database;
  
  public Books() { database = new Database(); }
  .
  .
  setters &amp; getters...
  </code></pre>
  
  <p>Method to call database method to insert object in database:</p>
  
  <pre><code>String className = this.getClass().getName();
  database.insertBookRecord(this.getIsbn(), this, className);  
  </code></pre>
  
  <p><code>this</code> is the object of current class which I want to store.</p>
  
  <p>following is the <code>insertBookRecord</code> method.</p>
  
  <pre><code>    public void insertBookRecord(int isbn, Books book, String name) {
      String query = "INSERT INTO Test VALUES (?, ?, ?)";
      byte[] data = null;
      //book = new Books();
      try {
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          ObjectOutputStream oos = new ObjectOutputStream(baos);
          oos.writeObject(book);
          oos.flush();
          oos.close();
          baos.close();
          data = baos.toByteArray();
      }
      catch(IOException ex) {
          JOptionPane.showMessageDialog(null, ex.getMessage());
      }
  
      try {
  
          //conn.setAutoCommit(false);
          state = conn.prepareStatement(query);
          state.setInt(1, isbn);
          state.setString(2, name);
          state.setObject(3, data);
          state.executeUpdate();
          //conn.commit();
      }
      catch(SQLException ex) {
          JOptionPane.showMessageDialog(null, ex.getMessage());
      }
      finally {
          close(3);
      }
  }
  </code></pre>
  
  <p>When I reach at statement <code>oos.writeObject(book);</code> Its stops with exception and displays the the package &amp; Classname in the JOptionPane.</p>
  
  <p>My book object has all the data fields I entered in the text fields. But I am unable to write it./convert it into Serializable format.</p>
  
  <p>Any suggestions please?</p>
  
  <p>Stack Trace:</p>
  
  <pre><code>java.io.NotSerializableException: com.my.classes.Database
  at java.io.ObjectOutputStream.writeObject0(Unknown Source)
  at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
  at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
  at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
  at java.io.ObjectOutputStream.writeObject0(Unknown Source)
  at java.io.ObjectOutputStream.writeObject(Unknown Source)
  at com.my.classes.Database.insertBookRecord(Database.java:123)
  at com.my.classes.Books.insertBookRecord(Books.java:107)
  at com.my.jlms.ManageBooks$2.actionPerformed(ManageBooks.java:308)
  at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
  at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
  at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
  at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
  at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
  at java.awt.Component.processMouseEvent(Unknown Source)
  at javax.swing.JComponent.processMouseEvent(Unknown Source)
  at java.awt.Component.processEvent(Unknown Source)
  at java.awt.Container.processEvent(Unknown Source)
  at java.awt.Component.dispatchEventImpl(Unknown Source)
  at java.awt.Container.dispatchEventImpl(Unknown Source)
  at java.awt.Component.dispatchEvent(Unknown Source)
  at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
  at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
  at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
  at java.awt.Container.dispatchEventImpl(Unknown Source)
  at java.awt.Window.dispatchEventImpl(Unknown Source)
  at java.awt.Component.dispatchEvent(Unknown Source)
  at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
  at java.awt.EventQueue.access$500(Unknown Source)
  at java.awt.EventQueue$3.run(Unknown Source)
  at java.awt.EventQueue$3.run(Unknown Source)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
  at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
  at java.awt.EventQueue$4.run(Unknown Source)
  at java.awt.EventQueue$4.run(Unknown Source)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
  at java.awt.EventQueue.dispatchEvent(Unknown Source)
  at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
  at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
  at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
  at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  at java.awt.EventDispatchThread.run(Unknown Source)
  </code></pre>