Ниже приведен код, использующий мост JDB C ODB C для подключения к IBM iAccess, но после обновления JDK 8 поддержка моста JDB C ODB C больше не существует.
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();
Итак, мы использовали правильный драйвер JDB C jt400.jar для iBm iAccess и изменили только код подключения, но мы получаем ошибку
"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: Количество установленных или зарегистрированных значений параметров не соответствует числу параметров