我想做了 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;
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;
不是sql语句的问题
是你java程序的问题
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;
}
你现在出现这个错误就是 ?的个数和你下面set。的个数不匹配。。
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;
}