JAVA 调用存储过程报错 java.sql.SQLException: 无效的列索引

报错信息
java.sql.SQLException: 无效的列索引
at oracle.jdbc.driver.OracleCallableStatement.registerOutParameterInternal(OracleCallableStatement.java:125)
我的代码报错在这里
at com.sino.base.db.procedure.SQLStoreProcedure.execProcedure(SQLStoreProcedure.java:72)
at com.sino.ies.basedefine.project.plan.dao.ProjectPlanDao.searchdetailplanQTYData(ProjectPlanDao.java:839)
以下为我的方法的代码
public void searchdetailplanQTYData(HttpServletRequest req, String[] detailParam) throws Exception {
// TODO Auto-generated method stub
String sqlProcedure = "BEGIN IES_ITEM_PLAN_AVABLE_QTY.AVAILABLE_PLAN_CURSOR_NEW(?,?,?,?) ; END;";
try {
SQLProcedureParameterList paraList = new SQLProcedureParameterList();
paraList.setParameter(SQLProcedureParameter.STRING, "P_PRODUCT_ID",
detailParam[0], SQLProcedureParameter.IN);
paraList.setParameter(SQLProcedureParameter.INTEGER,
"P_PROJECT_ID", detailParam[1],
SQLProcedureParameter.IN);
paraList.setParameter(SQLProcedureParameter.INTEGER, "P_ORGAN_ID",
detailParam[2],
SQLProcedureParameter.IN);
paraList.setParameter(SQLProcedureParameter.STRING,
"P_BEGIN_DATE", detailParam[3], SQLProcedureParameter.IN);
paraList.setParameter(SQLProcedureParameter.OBJECT, "P_IMP_MSG_INFO",
null, SQLProcedureParameter.OUT);
paraList.setParameter(SQLProcedureParameter.INTEGER, "P_MSG_CODE",
null, SQLProcedureParameter.OUT);
paraList.setParameter(SQLProcedureParameter.STRING, "P_MSG_INFO",
null, SQLProcedureParameter.OUT);
SQLStoreProcedure proc = new SQLStoreProcedure();
proc.setConnection(conn);
proc.execProcedure(sqlProcedure, paraList, null);
RowSet rowSet = proc.getCursorRowSet("P_IMP_MSG_INFO");
req.setAttribute(QueryConstant.SPLIT_DATA_VIEW, rowSet);
} finally {

}
}
已经找到原因了,因为占位符写少了,我只写了进的参数的占位符,没写出的占位符,所以报错,第一次写这个,实在蛋疼,谢谢大家了。

第1个回答  2016-05-25
游标参数在哪一位登记的就在哪一位取,
call.registerOutParameter(4, oracle.jdbc.OracleTypes.CURSOR); //在第4个登记
ResultSet rs = (ResultSet) call.getObject(4); //在第4个取本回答被网友采纳

java.sql.SQLException: 无效的列索引? 救命啊。help
java.sql.SQLException: 无效的列索引 “无效的列索引”其实是个低级的错误,原因无非几个:1、sql串的?号数目和提供的变量数目不一致:例如:jdbcTemplate.update(sql, new Object[] {newState,oldState});如果sql里面有1个?号,Object[]送了2个,就会报错。2、sql串里的?号书写不正确 英文?和...

java连接oracle数据库java.sql.SQLException: 无效的列索引问题
这和用什么用户无关,只要能连上数据库、并且使用的用户对该表有插入权限,就没问题。现在出现的“无效的列索引的异常”,是指在语句pstmt.setString(2,str2);中,列索引2是无效的,因为sql语句中只有一个问号。PreparedStatement 对象中的 setString方法的第一个参数是列索引,这个参数的取值范围是和...

java.sql.SQLException: 无效的列索引
改成 String sql2="insert into caselocus(pmid,caseno,flowtache,status,begindate,enddate) values(?,?,?,?,?,?)";\/\/pstmt.setInt(1, i); 这句去掉 这里id如果是自动增长的标识字段,那它是不能insert赋值的!

java连接oracle数据库java.sql.SQLException:无效的列索引问题?
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:207)atoracle.jdbc.driver.OraclePreparedStatement.setStringInternal(Ora...

java.sql.SQLException: 无效的列索引
sql语句的问题吧 这句 select dwmc,sum(unit) unitSum,sum(spds) spdsSum 应该是有问题的应该是 select dwmc,sum(unit),unitSum,sum(spds),spdsSum吧。

nested exception is java.sql.SQLException: 无效的列索引_百度...
你的Sql语句中。insert()这里面定义的操作列个数是9个。而values()里面实际传参数量是8个。传参数量不匹配。就造成了"无效列索引"的提示。你可以检查一下。values参数中,process_begin_time列值前应该还缺少一个参数

java.sql.SQLException: 无效的列索引
String sql = "insert into student1 (name,age) values (name=?,age=?)";--此处就指定了两个?try { PreparedStatement ps = conn.prepareStatement(sql);ps.setString(2, name);--这个地方和 ps.setInt(3, age);--这个地方就错了哦 ps.execute();应该改成:ps.setString(1,name);-...

java连接oracle数据库java.sql.SQLException: 无效的列索引问题
at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:5320)看样子,是你用了一个压根没有的列序号。at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:5320)看样子,是你用了一个压根没有的列序号。

JAVA 调用存储过程报错 java.sql.SQLException: 无效的列索引
游标参数在哪一位登记的就在哪一位取,call.registerOutParameter(4, oracle.jdbc.OracleTypes.CURSOR); \/\/在第4个登记 ResultSet rs = (ResultSet) call.getObject(4); \/\/在第4个取

在java连接oracle时候java.sql.SQLException: 无效的列索引_百度...
String str = "select * from management where name=? and password=?";String str = "select * from management where name='"+txtId.getText()+"' and password='"+txtPass.getText()+"'";pstat = datacon.prepareStatement(str);pstat.setString(1, txtId.getText());pstat.setString...

相似回答
大家正在搜