2010-09-09 127 views
3

我使用JDBC瘦驅動程序調用Oracle存儲函數。
以下是代碼。從Java調用Oracle存儲過程

class testSP 
{ 
    public static void main (String args []) 
        throws SQLException, ClassNotFoundException 
    { 
     String driver_class = "oracle.jdbc.driver.OracleDriver"; 
     String connect_string = "jdbc:oracle:thin:@xxx.xx.xx.xx:1521:xxxx"; 

     Connection conn; 

     Class.forName(driver_class); 
     conn = DriverManager.getConnection(connect_string, "xxxx", "xxxx"); 

     // OracleCallableStatement ocs = 
     // (OracleCallableStatement)conn.prepareCall(
     //  "{? = call acpks_stmt_gen.fn_stmt_gen(?,?,?,?,?,?)}"); 
     CallableStatement ocs = 
     conn.prepareCall(
      "{? = call acpks_stmt_gen.fn_stmt_gen(?,?,?,?,?,?)}"); 

     ocs.registerOutParameter(1, java.sql.Types.ARRAY); 

     ocs.setString(2, "144000014"); 
     ocs.setString(3, "RET"); 
     ocs.setString(4, "N"); 
     ocs.setString(5, "3"); 
     ocs.setNull(6, java.sql.Types.DATE) ; 
     ocs.setNull(7, java.sql.Types.DATE); 



     ocs.executeUpdate(); 

    // java.sql.ResultSet rs2 = (java.sql.ResultSet) ocs.getResultSet(); 

    } 

} 

當我把這個我得到一個異常如下

Exception in thread "main" java.sql.SQLException: ORA-03115: unsupported network datatype or representation 

我使用Oracle提供的瘦驅動ojdbc6.jar
我正在使用這個在我的課程路徑。

謝謝。

+0

你正在使用哪個版本的oracle? – 2010-09-09 08:20:04

+0

我使用Oracle 11R2 – javaguy 2010-09-09 08:23:43

+1

什麼'fn_stmt_gen'返回?可能僅僅是類型的衝突,有各種各樣的'OracleTypes'可能更合適。可能更好地恢復到OracleCallableStatement。 – 2010-09-09 08:26:45

回答

4

嘗試

ocs.setString(6, "") ; 
    ocs.setString(7, ""); 

,而不是

ocs.setNull(6, java.sql.Types.DATE); 
    ocs.setNull(7, java.sql.Types.DATE); 

利用的事實是,在Oracle中,空字符串是一樣的NULL。

在我當前的項目中,我遇到了類似的NULL問題,可以通過這種方式解決。 (是的,這很難)