我使用以下代码将值插入表中。
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
列。我不得不在以后插入它。
答案 0 :(得分:1)
将要插入的列名称包含在SQL语句中更安全,如:
String sql = "INSERT INTO APPLICATION VALUES (EMP_ID,NAME, ....) // etc
(?,?,?,?,?,?,TO_DATE(?,'DD/MMYYYY'),?,TO_DATE(?,'DD/MM/YYYY'),?,?,?,?,?,SYSDATE,'X',?)";
通过这种方式,您可以更好地控制索引以及语句中使用的列。
答案 1 :(得分:0)
替换pstmt.setString(17,place);
与
pstmt.setString(15,place);
您得到错误的原因是:
您的查询中没有17个?
符号用于预准备语句,您只有15个?
符号,这意味着您只能为该预准备语句设置15个值(15列)。
现在您正在做的是在第17个索引处设置参数,并且在查询中没有在索引17处指定任何列,您只有15列和15个?
符号用于值插入相应的15列。
所以用我上面提到的内容替换它,它会起作用。
答案 2 :(得分:0)
在您的查询中,您需要设置15个参数。而你正试图给出第17个指数的价值。您应该将其更改为15而不是17。
即
pstmt.setString(15位);