我正在使用CallableStatement的插入查询。这是我的字符串形式的查询:
String strInsert = "INSERT INTO this_table (loc_nbr, rpt_nbr, rpt_type, office_code, date_submitted, rpt_seq, alcohol, drugs, cyber, priority) VALUES (?, ?, ?, 'HOME', sysdate, ?, ?, ?, ?, ?);";
我使用的CallableStatement是:
CallableStatement cs = Connection.prepareCall(strInsert);
cs.setString(1, "'" + strLocationNumber + "'");
cs.setString(2, "'" + strReportNumber + "'");
cs.setString(3, "'" + strReportType + "'");
cs.setString(6, "'" + strReportSeq + "'");
cs.setString(7, "'" + strAlcohol + "'");
cs.setString(8, "'" + strDrugs + "'");
cs.setString(9, "'" + strCyber + "'");
cs.setString(10, "'" + strPriority + "'");
cs.execute();
在运行此命令时,我会得到一个java.sql.SQLException: Invalid column index
我目前正在使用Oracle作为数据库,我想知道为什么我会收到这个错误。
发布于 2018-09-22 03:24:03
这表示表结构和insert语句通过Callable在查询中提供的可用列中不匹配
Java包装了这个异常,以便更深入地了解callable/prepared/sql语句。
需要对占位符索引进行校正,检查?
,然后像HOME and sysdate
一样将硬编码值从中间移到远端,这样占位符索引的连续性就会很好地工作。
String strInsert = "INSERT INTO this_table (loc_nbr, rpt_nbr, rpt_type, rpt_seq, alcohol, drugs, cyber, priority,office_code,date_submitted) VALUES (?, ?, ?, ?, ?, ?, ?, ?,'HOME', sysdate,);";
CallableStatement cs = Connection.prepareCall(strInsert);
cs.setString(1, "'" + strLocationNumber + "'");
cs.setString(2, "'" + strReportNumber + "'");
cs.setString(3, "'" + strReportType + "'");
cs.setString(4, "'" + strReportSeq + "'");
cs.setString(5, "'" + strAlcohol + "'");
cs.setString(6, "'" + strDrugs + "'");
cs.setString(7, "'" + strCyber + "'");
cs.setString(8, "'" + strPriority + "'");
cs.execute();
发布于 2018-09-22 03:20:19
setString()
索引号应该引用?
占位符的第n个匹配项。
查询有两个硬编码值
'HOME', sysdate
它们不会计入占位符索引。
https://stackoverflow.com/questions/52449857
复制相似问题