代码之家  ›  专栏  ›  技术社区  ›  rakeeee

使用PreparedStatement更新JdbcTemplate以插入数据时出现异常

  •  1
  • rakeeee  · 技术社区  · 9 年前

    我正在使用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 回复  |  直到 9 年前
        1
  •  0
  •   Jan    9 年前

    您仍然在幕后使用JDBC—所以将语句重新编码为

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

    你会没事的

    使用 NamedParameterJdbcTemplate 作为模板。

        2
  •  0
  •   snoopy    9 年前

    JdbcTemplate不支持(:Name,:ID)use(?,?)等命名参数替换占位符,或使用NamedParameterJdbcTemplate或SimpleJdbcDaoSupport修复错误