使用PreparedStatement插入数据进行JdbcTemplate更新的异常

时间:2016-01-04 06:05:47

标签: java spring jdbc jdbctemplate

我正在使用jdbcTemplate的prepared语句将一些数据写入表中。目前,我面临以下异常,我不确定我做错了什么。

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 个答案:

答案 0 :(得分:0)

你仍然在引擎盖下使用JDBC - 所以将你的陈述重新编码为

String sql = "insert into table1 (columns1, columns2) values (?,?)";

你会很好

使用NamedParameterJdbcTemplate作为模板。

答案 1 :(得分:-1)

JdbcTemplate不支持像(:Name,:ID)这样的命名参数使用(?,?)占位符,或者使用NamedParameterJdbcTemplate或SimpleJdbcDaoSupport来修复错误