java - 参数索引超出范围(4 > 参数个数,即 2)
问题描述
我正在制作一个简单的 java jdbc 程序,我必须在表上插入用户历史记录,但在那里有存货。这是我的代码
public void insertIntoHistory(ArrayList<QuestionAnswer> questionAnswer) throws Exception {
try {
conn.setAutoCommit(false);
int maxId = getMaxSets() + 1;
for (QuestionAnswer qa : questionAnswer) {
String getSql = "INSERT INTO userhist(id, questionid, "
+ "givenanswerid, isCorrect, questionSet) "
+ "VALUES (NULL,?,?,?,?)";
pst = conn.prepareStatement(getSql);
pst.setInt(1, qa.getQuestionId());
pst.setInt(2, qa.getAnswerId());
pst.setBoolean(3, (isCorrect(qa.getQuestionId(), qa.getAnswerId())));
pst.setInt(4, maxId);
pst.executeUpdate();
}
conn.commit();
} catch (SQLException e) {
System.out.println(e.getMessage());
conn.rollback();
throw e;
}
}
错误是:
参数索引超出范围(4 > 参数数量,即 0)。java.sql.SQLException:参数索引超出范围(4 > 参数个数,即 0)。在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974 ) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919) 在 com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3813) 在 com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java: 3795) 在 com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3840) 在 com.mysql.jdbc.PreparedStatement.setInt(PreparedStatement.java:3784) 在 HistoryController.insertIntoHistory(HistoryController.java:
我认为问题来自这种方法
private boolean isCorrect(int questionId, int ansId) throws SQLException {
String sql = "SELECT COUNT(*) AS Total FROM correctanswer where questionid = ? and answerid = ?";
boolean isCorrect = false;
try {
pst = conn.prepareStatement(sql);
pst.setInt(1, questionId);
pst.setInt(2, ansId);
ResultSet res = pst.executeQuery();
int count = 0;
if (res.next()) {
count = res.getInt(1);
}
isCorrect = count > 1;
} catch (SQLException e) {
System.out.println(e.getMessage());
throw e;
}
return isCorrect;
}
这里发生了什么请帮助我
解决方案
问题可能源于您尝试将 aNULL
插入id
列中。由于它是自动增量非空,因此您应该假装它不存在以用于INSERT
命令。
推荐阅读
- python - 通过 pip 安装 gTTS 工作正常,但将其导入程序会引发错误
- r - 如何将第二个数据集添加到 R 中的点图?
- python - 为什么这个函数会产生 (0,0,0,0,0)
- html-agility-pack - HtmlAgilitypack SelectSingleNode“System.NullReferenceException”
- node.js - 在 NodeJS 中的 async/await 内部循环
- java - 将dll文件加载到java类中
- python - fillna() 取决于列类型函数
- php - 在两个 laravel 中将 2 个集合合并到另一个具有相同值的集合中
- python - 全球宣言
- excel - 根据列表值在 Power Query 中创建条件列