Database SQL JDBC Java

import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLData;
import java.sql.SQLException;
import java.sql.SQLInput;
import java.sql.SQLOutput;
public class InsertCustomType_Oracle {
  public static Connection getConnection() throws Exception {
    String driver = "oracle.jdbc.driver.OracleDriver";
    String url = "jdbc:oracle:thin:@localhost:1521:databaseName";
    String username = "userName";
    String password = "pass";
    Class.forName(driver); // load Oracle driver
    return DriverManager.getConnection(url, username, password);
  }
  public static void main(String[] args) {
    String id = "001";
    String isbn = "1234567890";
    String title = "java demo";
    String author = "rntsoft";
    int edition = 1;
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
      conn = getConnection();
      String insert = "insert into book_table values(?, BOOK(?, ?, ?, ?))";
      pstmt = conn.prepareStatement(insert);
      pstmt.setString(1, id);
      pstmt.setString(2, isbn);
      pstmt.setString(3, title);
      pstmt.setString(4, author);
      pstmt.setInt(5, edition);
      pstmt.executeUpdate();
    } catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    } finally {
      try {
        pstmt.close();
        conn.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
}
/**
 * A class to hold a copy of "BOOK" data type
 */
class Book implements SQLData, Serializable {
  public static final String SQL_TYPE_NAME = "BOOK";
  public String isbn;
  public String title;
  public String author;
  public int edition;
  public Book() {
  }
  public Book(String isbn, String title, String author, int edition) {
    this.isbn = isbn;
    this.title = title;
    this.author = author;
    this.edition = edition;
  }
  // retrieves the fully qualified name of the SQL
  // user-defined type that this object represents.
  public String getSQLTypeName() {
    return SQL_TYPE_NAME;
  }
  // populates this object with data it reads from stream
  public void readSQL(SQLInput stream, String sqlType) throws SQLException {
    this.isbn = stream.readString();
    this.title = stream.readString();
    this.author = stream.readString();
    this.edition = stream.readInt();
  }
  // writes this object to stream
  public void writeSQL(SQLOutput stream) throws SQLException {
    stream.writeString(this.isbn);
    stream.writeString(this.title);
    stream.writeString(this.author);
    stream.writeInt(this.edition);
  }
  public void print() {
    System.out.println("isbn=" + isbn);
    System.out.println("title=" + title);
    System.out.println("author=" + author);
    System.out.println("edition=" + edition);
  }
}