使用参数时出现JdbcTemplate更新错误

时间:2015-04-09 08:52:07

标签: java spring-mvc

我在SpringMVC数据库应用程序中编码。当我尝试使用带参数的JdbcTemplate对象更新方法将数据插入数据库时​​,我在插入数据时出错。参数编码很好,如下:

String sql = "INSERT INTO contact (name, email, address, telephone)"
                + " VALUES ('" + contact.getName() + "', '" + contact.getEmail() + "', '" 
                + contact.getAddress() + "', '" + contact.getTelephone() + "')";
jdbcTemplate.update(sql);

但是当我使用参数时,它会出错:

String sql = "INSERT INTO contact (name, email, address, telephone)"
                    + " VALUES (?, ?, ?, ?)";
jdbcTemplate.update(sql, contact.getName(), contact.getEmail(),
                contact.getAddress(), contact.getTelephone());

请帮助我!

2 个答案:

答案 0 :(得分:1)

你必须修改参数。请查看以下示例。

//insert with named parameter
    public void insertNamedParameter(Customer customer){

        String sql = "INSERT INTO CUSTOMER " +
            "(CUST_ID, NAME, AGE) VALUES (:custId, :name, :age)";

        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("custId", customer.getCustId());
        parameters.put("name", customer.getName());
        parameters.put("age", customer.getAge());

        getSimpleJdbcTemplate().update(sql, parameters);

    }

您可以参考以下链接以供参考。

Spring Named Parameters examples in SimpleJdbcTemplate

答案 1 :(得分:0)

使用 SimpleJdbcInsert

private long addContact(Contact contact) {
    SqlParameterSource params = new MapSqlParameterSource()
        .addValue("name", contact.getName())
        .addValue("email", contact.getEmail())
        .addValue("address", contact.getAddress())
        .addValue("telephone", contact.getTelephone());
    return new SimpleJdbcInsert(DBConnection.getDataSource())
        .withTableName("contact")
        .usingGeneratedKeyColumns("id")
        .executeAndReturnKey(params)
        .longValue();
}