Исключение при обновлении JdbcTemplate с использованием PreparedStatement для вставки данных
Я использую подготовленный оператор jdbcTemplate для записи некоторых данных в таблицу. В настоящее время я сталкиваюсь со следующим исключением, и я не уверен, что я делаю неправильно.
private void insertdata(String time, String data, Datasource datasource){
String sql = "insert into table1 (columns1, columns2) values (:time, :data)";
jdbcTemplate jdbctemplate = new jdbcTemplate(datasource);
Object[] params = {time, data};
int[] types = {Types.VARCHAR, Types.VARCHAR};
try{
jdbctemplate.update(sql, params, types);
}catch(Exception e){
//some error handling
}
}
Я получаю следующее исключение в журналах.
PreparedStatementCallback; SQL [insert into table1 (columns1, columns2) values (:time, :data)]; Parameter index out of range (1 > number of parameters, which is 0).; nested exception is java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
Я не знаю, где я делаю ошибку.
2 ответа
Решение
Вы все еще используете JDBC под капотом - так что перекодируйте свое заявление в
String sql = "insert into table1 (columns1, columns2) values (?,?)";
И ты будешь в порядке или
Используйте NamedParameterJdbcTemplate в качестве шаблона.
JdbcTemplate не поддерживает именованные параметры, такие как (:Name,:ID), вместо них используйте (?,?) Заполнители или используйте NamedParameterJdbcTemplate или SimpleJdbcDaoSupport для исправления ошибки.