从Java调用Oracle存储过程

时间:2010-09-09 08:12:32

标签: java oracle

我正在使用JDBC瘦驱动程序调用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 我在课堂上用这个。

感谢。

1 个答案:

答案 0 :(得分:4)

尝试

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

而不是

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

利用在Oracle中,空字符串与NULL相同的事实。

在我目前的项目中,我遇到了类似的NULL问题,可以通过这种方式解决。 (是的,那很难看)