Исключение при обновлении 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 для исправления ошибки.

Другие вопросы по тегам