使用jsp将值插入到oracle表中

时间:2012-11-17 07:18:27

标签: java sql

我使用以下代码将值插入表中。

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列。我不得不在以后插入它。

3 个答案:

答案 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位);