SQL异常:索引超出范围
当我运行我的程序时,它显示列超出范围的错误。连接正常SQL异常:索引超出范围
对于〔实施例
updateRecoredtoStudent(15, "Annies","Bot"," Ionia", "1/1/2013","firstname","Anny")
private static void updateRecordToStudent(int studentid, String firstname, String lastname,String address, String dateofbirth, String cond_col, String cond_val) throws SQLException {
Connection dbConnection = null;
PreparedStatement preparedStatement = null;
String updateTableSQL = "UPDATE student SET 'studentid' = ? 'firstname' = ? 'lastname' = ? 'address' = ? dateofbirth' = ? WHERE ? = ?";
try {
dbConnection = getDBConnection();
preparedStatement = dbConnection.prepareStatement(updateTableSQL);
preparedStatement.setInt(1, studentid);
preparedStatement.setString(2, firstname);
preparedStatement.setString(3, lastname);
preparedStatement.setString(4, address);
preparedStatement.setString(5, dateofbirth);
preparedStatement.setString(6, cond_col);
preparedStatement.setString(7, cond_val);
// execute update SQL stetement
preparedStatement.executeUpdate();
System.out.println("Record is updated to STUDENT table!");
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
if (preparedStatement != null) {
preparedStatement.close();
}
if (dbConnection != null) {
dbConnection.close();
}
}
}
Student table contains
-studentid(int-PK)
-Firstname(String)
-lastname(String)
-Address(String)
-Dateofbirth(String)
我认为你错了代码语句。请尝试以下。
String updateTableSQL = "UPDATE student SET 'studentid' = ? 'firstname' = ? 'lastname' = ? 'address' = ? dateofbirth' = ? WHERE " + cond_col + "= ?";
try {
dbConnection = getDBConnection();
preparedStatement = dbConnection.prepareStatement(updateTableSQL);
preparedStatement.setInt(1, studentid);
preparedStatement.setString(2, firstname);
preparedStatement.setString(3, lastname);
preparedStatement.setString(4, address);
preparedStatement.setString(5, dateofbirth);
preparedStatement.setString(6, cond_val);
我认为但是所有的输入都正确,表中有相应的限制 –
我认为sql查询中的错误,可能是在准备好的语句中 –
它作品。你呢 –
String updateTableSQL = "UPDATE student SET studentid = ?, firstname = ?, lastname = ?, address = ?, dateofbirth = ? WHERE "+cond_col+" = ?";
preparedStatement.setInt(1, studentid);
preparedStatement.setString(2, firstname);
preparedStatement.setString(3, lastname);
preparedStatement.setString(4, address);
preparedStatement.setString(5, dateofbirth);
preparedStatement.setString(6, cond_val);
只有列值可以被设置。如果你想传递动态列名,你应该用查询来连接它。列名之间缺少,
还有一件事。
更改您的SQL语法是这样的:
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
所以你的SQL UPDATE查询将是:
String updateTableSQL = "UPDATE student SET studentid=?, firstname=?, lastname=?, address=?, dateofbirth=? WHERE " + fieldName + " = ?";
它的工作。谢谢你 –
好,你可以投票赞成有效的答案。 – roeygol
你有拼写错误(缺少引号)。您也有错误的索引(多次5) – cghislai
您不能将列名称作为准备语句中的参数 - http://*.com/questions/20008336/having-a-column-name-as-input-parameter -'--------------------------- - “ –
SET'studentid'=?'是无效的SQL。列名需要用双引号括起来,而不是单引号(或者根本没有引号) –