有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用jsp在oracle表中插入值

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

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


共 (2) 个答案

  1. # 1 楼答案

    更安全的做法是在SQL语句中包含要插入的列名,如:

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

    这样,您就可以更好地控制语句中使用的索引和列

  2. # 2 楼答案

    替换pstmt.setString(17,place);

    pstmt.setString(15,place);

    出现错误的原因是:

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

    现在你要做的是在第17个索引处设置一个参数,在你的查询中没有在索引17处指定任何列,你只有15列和15个?符号,用于在相应的15列处插入值

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