Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java存储过程:Java.lang.NoSuchMethodError_Java_Sql_Stored Procedures_Db2 - Fatal编程技术网

Java存储过程:Java.lang.NoSuchMethodError

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

我试图执行从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_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代码之间的参数数量也是不同的