JDBC com.ibm.as400.access.AS400JDBCDriver CallableStatement java.sql.SQLException
下面的代码使用JDBCODBC桥连接到IBMIAccess,但由于JDK8升级,对JDBCODBC桥的支持已不复存在JDBC com.ibm.as400.access.AS400JDBCDriver CallableStatement java.sql.SQLException,java,jdbc,db2,jt400,Java,Jdbc,Db2,Jt400,下面的代码使用JDBCODBC桥连接到IBMIAccess,但由于JDK8升级,对JDBCODBC桥的支持已不复存在 DriverManager.registerDriver((Driver) Class.forName("sun.jdbc.odbc.JDBCODBCDriver").newInstance()); Connection con = DriverManager.getConnection(jdbcURL, userName, password); CallableStateme
DriverManager.registerDriver((Driver) Class.forName("sun.jdbc.odbc.JDBCODBCDriver").newInstance()); Connection con = DriverManager.getConnection(jdbcURL, userName, password);
CallableStatement cs = con.prepareCall("{ call IDBMOD.SPGIFTHOLD(?,?,?,?) }");
String acctNum = doc.getElementsByTagName("account_number").item(0).getTextContent();
String amount = doc.getElementsByTagName("amount").item(0).getTextContent();
String valueDate = doc.getElementsByTagName("value_date").item(0).getTextContent();
String returnCode = "";
cs.setString(1, acctNum);
cs.setString(2, amount);
cs.setString(3, valueDate);
cs.registerOutParameter(4, Types.VARCHAR);
boolean ret = cs.execute();
所以我们为IBMIAccess使用了正确的jt400.jarJDBC驱动程序,只更改了连接代码,但我们得到了错误
“java.sql.SQLException:设置的参数值或
“注册的参数数与参数数不匹配”
更改的代码在这里
DriverManager.registerDriver((Driver) Class.forName("com.ibm.as400.access.AS400JDBCDriver").newInstance());
Connection con = DriverManager.getConnection(jdbcURL, userName, password);
CallableStatement cs = con.prepareCall("{ call IDBMOD.SPGIFTHOLD(?,?,?,?) }");
String acctNum = doc.getElementsByTagName("account_number").item(0).getTextContent();
String amount = doc.getElementsByTagName("amount").item(0).getTextContent();
String valueDate = doc.getElementsByTagName("value_date").item(0).getTextContent();
String returnCode = "";
cs.setString(1, acctNum);
cs.setString(2, amount);
cs.setString(3, valueDate);
cs.registerOutParameter(4, Types.VARCHAR);
boolean ret = cs.execute();
不确定我们为什么会得到异常java.sql.SQLException:设置或注册的参数值数量与参数数量不匹配通过将第四个参数设置为INOUT参数(如下所示),这一问题得到了解决
cs.setString(4,"");
cs.registerOutParameter(4,Types.VARCHAR);
请显示此存储过程的定义。与您的问题无关,但用户代码不应调用
DriverManager.registerDriver
。该方法仅适用于驱动程序在加载时进行自我注册(通过自动加载驱动程序,或仅使用Class.forName
)。不幸的是,这是针对客户端的,我们要求提供SP代码,他们说他们无权查看SP,因为SP位于AS400应用程序中。您建议我如何在不调用DriverManager.registerDriver的情况下重新编写它?