2

次のコードを使用して値をテーブルに挿入しています。

String sql = "INSERT INTO APPLICATION VALUES (?,?,?,?,?,?,TO_DATE(?,'DD/MMYYYY'),?,TO_DATE(?,'DD/MM/YYYY'),?,?,?,?,?,SYSDATE,'X',?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,Integer.parseInt(sr));
pstmt.setString(2,nm);
pstmt.setString(3,(String)session.getValue("ITSGTYP"));
pstmt.setString(4,pst);
pstmt.setString(5,dox);
pstmt.setString(6,zo);
pstmt.setString(7,dob);
pstmt.setString(8,cdr);
pstmt.setString(9,cdrdt);
pstmt.setString(10,qual);
pstmt.setString(11,mail);
pstmt.setString(12,bond);
pstmt.setInt(13,Integer.parseInt((String)session.getValue("USER")));
pstmt.setString(14,request.getRemoteAddr());
pstmt.setString(17,place);

値が挿入されるテーブルの説明は次のとおりです。

EMP_ID                    NOT NULL NUMBER(6)
NAME                      VARCHAR2(25)
APPLN_TYP                 VARCHAR2(10)
POST                      VARCHAR2(100)
DIV                       VARCHAR2(25)
ZONE                      VARCHAR2(5)
DOB                       DATE
CADRE                     VARCHAR2(5)
CADRE_DATE                DATE
QUALIFICATION             VARCHAR2(100)
EMAIL_ID                  VARCHAR2(70)
BOND                      VARCHAR2(3)
SUBMITTED_BY              NUMBER(6)
SUBMIT_IP                 VARCHAR2(30)
SUBMIT_DATE               DATE
FLAG                      VARCHAR2(1)
PLACE                     VARCHAR2(20)

上記のコードを実行すると、次のエラーが発生します

 Error: java.sql.SQLException: Invalid column index

このクエリは以前は正常に機能していました。

PLACE前のテーブルには列がありませんでした。後で挿入する必要がありました。

4

3 に答える 3

1

次のように、SQL ステートメントに挿入する列名を含める方が安全です。

String sql = "INSERT INTO APPLICATION VALUES (EMP_ID,NAME, ....)   // etc   
(?,?,?,?,?,?,TO_DATE(?,'DD/MMYYYY'),?,TO_DATE(?,'DD/MM/YYYY'),?,?,?,?,?,SYSDATE,'X',?)";

このようにして、ステートメントで使用しているインデックスと列をより詳細に制御できます。

于 2012-11-17T07:26:30.640 に答える
0

クエリには、設定する 15 個のパラメーターがあります。そして、あなたは17番目のインデックスの値を与えようとしています. 17 ではなく 15 に変更する必要があります。

すなわち

pstmt.setString(15,場所);

于 2012-11-17T07:30:47.760 に答える
0

交換 pstmt.setString(17,place);

pstmt.setString(15,place);

エラーの理由は次のとおりです。

?準備済みステートメントのクエリには 17 個のシンボルがありません。15 個のシンボルしか?ないため、その準備済みステートメントには (15 列に対して) 15 個の値しか設定できません。

?ここで、17 番目のインデックスにパラメーターを設定していて、クエリでインデックス 17 に指定された列がなく、それぞれの 15 列に挿入される値に対して15 列と 15 シンボルしかありません。

したがって、それを上記のものに置き換えると、機能します。

于 2012-11-17T07:23:56.173 に答える