我正在对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作为数据库,我想确切地说明为什么收到此错误。
答案 0 :(得分:4)
这表明通过Callable的表结构和插入语句在查询中可用和提供的列中不匹配
Java封装了此异常,以更深入地了解callable / prepared / sql语句。
需要检查?
的占位符索引,然后将您的硬编码值从HOME and sysdate
中间移到远端,然后占位符索引的连续性会很好。 / p>
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();
答案 1 :(得分:2)
setString()
索引号应该是指?
占位符的第n次出现。
您的查询有两个硬编码值
'HOME', sysdate
它们不算作占位符索引。