从Java调用Oracle存储过程
问题描述:
我使用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
。
我正在使用这个在我的课程路径。
谢谢。
答
尝试
ocs.setString(6, "") ;
ocs.setString(7, "");
,而不是
ocs.setNull(6, java.sql.Types.DATE);
ocs.setNull(7, java.sql.Types.DATE);
利用的事实是,在Oracle中,空字符串是一样的NULL。
在我当前的项目中,我遇到了类似的NULL问题,可以通过这种方式解决。 (是的,这很难)
你正在使用哪个版本的oracle? – 2010-09-09 08:20:04
我使用Oracle 11R2 – javaguy 2010-09-09 08:23:43
什么'fn_stmt_gen'返回?可能仅仅是类型的冲突,有各种各样的'OracleTypes'可能更合适。可能更好地恢复到OracleCallableStatement。 – 2010-09-09 08:26:45