我想做了 insert 功能 ,按提交以后 出现这种问题.....怎么解决哦~~~ 
javax.servlet.ServletException: 无效的列索引 
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545) 
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486) 
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274) 
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) 
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:709) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
root cause java.sql.SQLException: 无效的列索引 
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125) 
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162) 
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227) 
oracle.jdbc.driver.OraclePreparedStatement.setIntInternal(OraclePreparedStatement.java:3970) 
oracle.jdbc.driver.OraclePreparedStatement.setInt(OraclePreparedStatement.java:3961) 
com.yourcompany.struts.dao.StrutsDao.addEmp(StrutsDao.java:34) 
com.yourcompany.struts.action.StrutsAction.execute(StrutsAction.java:99) 
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484) 
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274) 
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) 
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:709) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
create table proemp( 
        empid number primary key, 
        empno number, 
        ename varchar2(), 
        job varchar2(), 
        mgr varchar2(), 
        hiredate date, 
        sal number(7,2), 
        comm number(7), 
        deptno number(2) 
  ) 
  
  insert into proemp (empid,empno,ename,job,mgr,hiredate,sal,comm,deptno) " + 
"VALUES(s_proemp_seq.nextval,?,?,?,?,to_date('?','yyyy-mm-dd'),?,?,?)ORACLEL里 单独执行的话可以,还有 我建了 sequences ID是自增的 CREATE SEQUENCE s_premp_seq 
          INCREMENT BY 1 
          START WITH  1 
          NOCYCLE 
          NOCACHE;

解决方案 »

  1.   

    应该是你向?里面填充参数的时候的下标有问题
    不是sql语句的问题
      

  2.   

    你java程序需要给 ? 赋值吧。。就是那个索引有问题
    是你java程序的问题
      

  3.   

    public int addEmp(StrutsForm strutsForm,Connection conn) throws Exception {
    PreparedStatement ps = null;
    int ret = -1;
    String strSQL = "insert into proemp (empid,empno,ename,job,mgr,hiredate,sal,comm,deptno) " +
    "VALUES(s_proemp_seq.nextval,?,?,?,?,to_date('?','yyyy-mm-dd'),?,?,?)";
    try {
    ps = conn.prepareStatement(strSQL);
    ps.setInt(1, strutsForm.getId());
    ps.setInt(2, strutsForm.getNo());
    ps.setString(3, strutsForm.getName());
    ps.setString(4, strutsForm.getJob());
    ps.setInt(5, strutsForm.getMgr());
    ps.setString(6, strutsForm.getHiredate());
    ps.setInt(7, strutsForm.getSal());
    ps.setInt(8, strutsForm.getComm());
    ps.setInt(9, strutsForm.getDeptno());
    ret = ps.executeUpdate();
    } finally {
    if(ret != -1){
    conn.commit();
    }
    if (ps != null) {
    ps.close();
    }
    }
    return ret;
    }
      

  4.   

    这个ID项要写吗?  ps.setInt(1, strutsForm.getId());
      

  5.   

    我刚才用DEBUG了  ret = ps.executeUpdate();  ret 为什么 还是-1呢?  什么问题哦
      

  6.   

    先不管要不要写。。
    你现在出现这个错误就是  ?的个数和你下面set。的个数不匹配。。
      

  7.   

    我已经该了.
    public int addEmp(StrutsForm strutsForm,Connection conn) throws Exception {
    PreparedStatement ps = null;
    int ret = -1;
    String strSQL = "insert into proemp (empid,empno,ename,job,mgr,hiredate,sal,comm,deptno) " +
    "VALUES(s_proemp_seq.nextval,?,?,?,?,to_date('?','yyyy-mm-dd'),?,?,?)";
    try {
    ps = conn.prepareStatement(strSQL);
    ps.setInt(1, strutsForm.getNo());
    ps.setString(2, strutsForm.getName());
    ps.setString(3, strutsForm.getJob());
    ps.setInt(4, strutsForm.getMgr());
    ps.setString(5, strutsForm.getHiredate());
    ps.setInt(6, strutsForm.getSal());
    ps.setInt(7, strutsForm.getComm());
    ps.setInt(8, strutsForm.getDeptno());
    ret = ps.executeUpdate();
    } finally {
    if(ret != -1){
    conn.commit();
    }
    if (ps != null) {
    ps.close();
    }
    }
    return ret;
    }