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

代替 pstmt.setString(17,place);

pstmt.setString(15,place);

您得到错误的原因是:

您的预准备语句查询中没有 17 个?符号,您只有 15 个?符号,这意味着您只能为该预准备语句设置 15 个值(15 列)。

现在您正在做的是在第 17 个索引处设置一个参数,并且您没有在查询中的索引 17 处指定任何列,您只有 15 列和 15 个?符号用于在各自的 15 列中插入的值。

所以用我上面提到的替换它,它会起作用。

于 2012-11-17T07:23:56.173 回答
0

在您的查询中,您需要设置 15 个参数。你正试图给出第 17 个索引的值。您应该将其更改为 15 而不是 17。

IE

pstmt.setString(15,place);

于 2012-11-17T07:30:47.760 回答