Java存储过程:Java.lang.NoSuchMethodError
我试图执行从DB2存储过程触发的Java存储过程,但是,我得到了一个错误 我的DB2存储过程:Java存储过程:Java.lang.NoSuchMethodError,java,sql,stored-procedures,db2,Java,Sql,Stored Procedures,Db2,我试图执行从DB2存储过程触发的Java存储过程,但是,我得到了一个错误 我的DB2存储过程: CREATE PROCEDURE SP_INSERT_UPDATE_REPNUMHD ( IN RECNUM INTEGER, IN REPNUMHD_ID INTEGER, IN BINNEN_DATUM DATE, IN BINNEN_INI VARCHAR(2), IN REP_ST
CREATE PROCEDURE SP_INSERT_UPDATE_REPNUMHD (
IN RECNUM INTEGER,
IN REPNUMHD_ID INTEGER,
IN BINNEN_DATUM DATE,
IN BINNEN_INI VARCHAR(2),
IN REP_STATUS SMALLINT,
IN BEVESTIGD CHAR(1),
IN BEVESTIGD_DATUM DATE,
IN BEVESTIGD_INI VARCHAR(2),
IN KLANT_REF VARCHAR(20),
IN ACTION CHAR(1)
)
SPECIFIC SP_INSERT_UPDATE_REPNUMHD
DYNAMIC RESULT SETS 0
DETERMINISTIC
LANGUAGE JAVA
PARAMETER STYLE JAVA
NO DBINFO
NOT FENCED
THREADSAFEre
MODIFIES SQL DATA
PROGRAM TYPE SUB
EXTERNAL NAME 'RepairMigration!insertRepairHeader'
我的java存储过程如下所示:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Date;
import java.util.Properties;
import java.util.logging.Logger;
import java.util.logging.FileHandler;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class RepairMigration {
private static final Properties config = new Properties();
private static final Logger log = Logger.getLogger( RepairMigration.class.getName() );
/**
* Inserts a record from table REPNUMHD (DB2) to repair_repair (Postgres)
* <p>
*
* @param db2RecNum RECNUM,
* @param repairId REPNUMHD_ID,
* @param receivedDate BINNEN_DATUM,
* @param receivedIni BINNEN_INI,
* @param repairStatusId REP_STATUS,
* @param confirmed BEVESTIGD,
* @param confirmedDate BEVESTIGD_DATUM,
* @param confirmedIni BEVESTIGD_INI,
* @param customerRef KLANT_REF,
* @param customerId KLANTNUMMER,
* @param action ACTION,
*/
public static void insertRepairHeader(
int db2RecNum,
int repairNumber,
Date receivedDate,
String receivedIni,
int repairStatusId,
String confirmed,
Date confirmedDate,
String confirmedIni,
String customerRef,
int customerId,
String action
) throws Exception {
String query = "";
PreparedStatement pstmt = null;
Connection con = RepairMigration.connect();
if (action == "I")
{
query = "INSERT INTO repair_repair("+
" status_id, " +
" customer_id, " +
" contact_id, " +
" repair_number, " +
" received_date, " +
" received_uid, " +
" received_initials, " +
" confirmed, " +
" confirmed_date, " +
" confirmed_uid, " +
" confirmed_initials, " +
" customer_reference, " +
" db2_recnum) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)";
pstmt = con.prepareStatement(query);
pstmt.setInt(1, getStatusId(repairStatusId, con));
pstmt.setInt(2, getCustomerId(customerId, con));
pstmt.setNull(3, java.sql.Types.INTEGER);
pstmt.setInt(4, repairNumber);
pstmt.setDate(5, receivedDate);
pstmt.setNull(6, java.sql.Types.INTEGER);
pstmt.setString(7, receivedIni);
pstmt.setBoolean(8, confirmed == "1" ? true : false);
pstmt.setDate(9, confirmedDate);
pstmt.setNull(10, java.sql.Types.INTEGER);
pstmt.setString(11, confirmedIni);
pstmt.setString(12, customerRef);
pstmt.setInt(13, db2RecNum);
pstmt.executeUpdate();
}
else{ // action = "U"
query = "UPDATE repair_repair "+
" SET received_date = ?, " +
" received_initials = ?, " +
" status_id = ?, " +
" confirmed = ?, " +
" confirmed_date = ?, " +
" confirmed_initials = ?, " +
" customer_reference = ? " +
" WHERE db2_recnum = ?";
pstmt = con.prepareStatement(query);
pstmt.setDate(1, receivedDate);
pstmt.setString(2, receivedIni);
pstmt.setInt(3, getStatusId(repairStatusId, con));
pstmt.setBoolean(4, confirmed == "1" ? true : false);
pstmt.setDate(5, confirmedDate);
pstmt.setString(6, confirmedIni);
pstmt.setString(7, customerRef);
pstmt.setInt(8, db2RecNum);
pstmt.executeUpdate();
}
}
}
根据错误消息,似乎我的整数参数不见了。这就是问题所在吗?如果是,我如何解决这个问题
提前谢谢
根据错误消息,似乎我的整数参数不见了。这就是问题所在吗
不完全是。本签名的含义
RepairMigration.insertRepairHeader(IILjava/sql/Date;Ljava/lang/String;
SLjava/lang/String;Ljava/sql/Date;
Ljava/lang/String;Ljava/lang/String;
Ljava/lang/String;)V
是:
将其与您的代码进行比较,似乎repairStatusId
的类型已更改,并且缺少customerId
参数
基本上,问题在于存储过程类与CREATE storage procedure…
语句中的参数类型不匹配。比较一下。甚至SQL和java代码之间的参数数量也是不同的
根据错误消息,似乎我的整数参数不见了。这就是问题所在吗
不完全是。本签名的含义
RepairMigration.insertRepairHeader(IILjava/sql/Date;Ljava/lang/String;
SLjava/lang/String;Ljava/sql/Date;
Ljava/lang/String;Ljava/lang/String;
Ljava/lang/String;)V
是:
将其与您的代码进行比较,似乎repairStatusId
的类型已更改,并且缺少customerId
参数
基本上,问题在于存储过程类与CREATE storage procedure…
语句中的参数类型不匹配。比较一下。甚至SQL和java代码之间的参数数量也是不同的
根据错误消息,似乎我的整数参数不见了。这就是问题所在吗
不完全是。本签名的含义
RepairMigration.insertRepairHeader(IILjava/sql/Date;Ljava/lang/String;
SLjava/lang/String;Ljava/sql/Date;
Ljava/lang/String;Ljava/lang/String;
Ljava/lang/String;)V
是:
将其与您的代码进行比较,似乎repairStatusId
的类型已更改,并且缺少customerId
参数
基本上,问题在于存储过程类与CREATE storage procedure…
语句中的参数类型不匹配。比较一下。甚至SQL和java代码之间的参数数量也是不同的
根据错误消息,似乎我的整数参数不见了。这就是问题所在吗
不完全是。本签名的含义
RepairMigration.insertRepairHeader(IILjava/sql/Date;Ljava/lang/String;
SLjava/lang/String;Ljava/sql/Date;
Ljava/lang/String;Ljava/lang/String;
Ljava/lang/String;)V
是:
将其与您的代码进行比较,似乎repairStatusId
的类型已更改,并且缺少customerId
参数
基本上,问题在于存储过程类与CREATE storage procedure…
语句中的参数类型不匹配。比较一下。甚至SQL和java代码之间的参数数量也是不同的