Java - Exception in thread "main" java.lang.Error: Unresolved compilation problems

82,563

Solution 1

This error happens when you use Eclipse as IDE and try to run code that doesn't even compile. Check your Problems view in Eclipse, and fix the compilation errors before executing the application.

Solution 2

You are using a MySQL driver, but your class uses an Oracle BLOB class. Either use the Oracle JDBC driver, or use a different class for BLOB.

Since your code mentions HSQL, MySQL and Oracle, you will probably want to get rid of the Oracle-specific BLOB implementation.

Share:
82,563
vivek rai
Author by

vivek rai

Updated on July 09, 2022

Comments

  • vivek rai
    vivek rai almost 2 years

    I have some problem in my JDBC code. I am trying to connect through MySQL but it gives me an error. My error log is given below if you have some time.

    Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
        BLOB cannot be resolved to a type
        BLOB cannot be resolved to a type
    
        at serialize.SerializeDeserialze.main(SerializeDeserialze.java:73)
    

    My code is given below. I am using mysql-connector-java-5.1.20.jar driver:

    package serialize;
    /*
     By vivek
    */
    
    import java.io.InputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.OutputStream;
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.ArrayList;
    import java.util.List;
    
    import oracle.sql.BLOB;
    
    /****
    CREATE TABLE java_objects (object_id NUMBER, object_name varchar(128), object_value BLOB DEFAULT empty_blob(), primary key (object_id));
    SQL> desc java_objects;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     OBJECT_ID                                 NOT NULL NUMBER
     OBJECT_NAME                                        VARCHAR2(128)
     OBJECT_VALUE                                       BLOB
    
    SQL> select SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, INCREMENT_BY, LAST_NUMBER from  user_sequences;
    
    SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY LAST_NUMBER
    ------------------------------ ---------- ---------- ------------ -----------
    ID_SEQ                                  1 1.0000E+27            1          21
    JAVA_OBJECT_SEQUENCE                    1 1.0000E+27            1           1
    
    */
    public class SerializeDeserialze {
      public static void main(String[] args) throws Exception {
        String WRITE_OBJECT_SQL = "BEGIN "
            + "  INSERT INTO java_objects(object_id, object_name, object_value) "
            + "  VALUES (?, ?, empty_blob()) " + "  RETURN object_value INTO ?; " + "END;";
        String READ_OBJECT_SQL = "SELECT object_value FROM java_objects WHERE object_id = ?";
    
        Connection conn = getOracleConnection();
        conn.setAutoCommit(false);
        List<Object> list = new ArrayList<Object>();
        list.add("This is a short string.");
        list.add(new Integer(1234));
        list.add(new java.util.Date());
    
        // write object to Oracle
        long id = 0001;
        String className = list.getClass().getName();
        CallableStatement cstmt = conn.prepareCall(WRITE_OBJECT_SQL);
    
        cstmt.setLong(1, id);
        cstmt.setString(2, className);
    
        cstmt.registerOutParameter(3, java.sql.Types.BLOB);
    
        cstmt.executeUpdate();
        BLOB blob = (BLOB) cstmt.getBlob(3);
        OutputStream os = blob.getBinaryOutputStream();
        ObjectOutputStream oop = new ObjectOutputStream(os);
        oop.writeObject(list);
        oop.flush();
        oop.close();
        os.close();
    
        // Read object from oracle
        PreparedStatement pstmt = conn.prepareStatement(READ_OBJECT_SQL);
        pstmt.setLong(1, id);
        ResultSet rs = pstmt.executeQuery();
        rs.next();
        InputStream is = rs.getBlob(1).getBinaryStream();
        ObjectInputStream oip = new ObjectInputStream(is);
        Object object = oip.readObject();
        className = object.getClass().getName();
        oip.close();
        is.close();
        rs.close();
        pstmt.close();
        conn.commit();
    
        // de-serialize list a java object from a given objectID
        List listFromDatabase = (List) object;
        System.out.println("[After De-Serialization] list=" + listFromDatabase);
        conn.close();
      }
    
      private static Connection getHSQLConnection() throws Exception {
        Class.forName("org.hsqldb.jdbcDriver");
        System.out.println("Driver Loaded.");
        String url = "jdbc:hsqldb:data/tutorial";
        return DriverManager.getConnection(url, "sa", "");
      }
    
      public static Connection getMySqlConnection() throws Exception {
        String driver = "org.gjt.mm.mysql.Driver";
        String url = "jdbc:mysql://localhost/demo2s";
        String username = "oost";
        String password = "oost";
    
        Class.forName(driver);
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
      }
    
      public static Connection getOracleConnection() throws Exception {
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:databaseName";
        String username = "userName";
        String password = "password";
    
        Class.forName(driver); // load Oracle driver
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
      }
    
  • Nick Constantine
    Nick Constantine over 5 years
    Thanks, this was it. This happened to me when I added an import statement before the package statement.