2012-06-27 75 views
4

嗨每一个我在我的jdbc代码有一些问题我想通过mysql连接,但它会给error.my错误日志如下给出if你有一些时间请帮助我。异常在线程“主”java.lang.Error:未解决的编译问题:

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) 

我的代码如下....我使用的MySQL连接器的Java-5.1.20.jar驱动

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; 
    } 
+1

你的classpath有没有oracle jar? – ant

+0

不,我只把mysql jar放在我的classpath中..... –

回答

8

当您将Eclipse用作IDE并尝试运行甚至无法编译的代码时,会发生此错误。在Eclipse中检查您的问题视图,并在执行应用程序之前修复编译错误。

3

您正在使用MySQL驱动程序,但你的类使用Oracle BLOB类。要么使用Oracle JDBC驱动程序,要么为BLOB使用不同的类。

由于您的代码提到了HSQL,MySQL和Oracle,您可能希望摆脱Oracle特定的BLOB实现。

相关问题