Mysql DB从表中选择字段语句java

时间:2017-02-15 09:05:24

标签: java jdbc spring-jdbc

我正在尝试使用java查询数据库,我不明白这个函数的问题。它返回垃圾值。

我只想从MySQL数据库中检索与first_name匹配的值。

public List<Customer> select(String cusDB) {
    return jdbcTemplate.query(
            "SELECT id, first_name, last_name FROM customers WHERE first_name= cusDB",
            (rs, rowNum) -> new Customer(rs.getLong("id"),
                    rs.getString("first_name"), rs.getString("last_name")));
}

2 个答案:

答案 0 :(得分:3)

您可以使用两种方法,第一种方法是将查询与要搜索的first_name连接起来:

"SELECT id, first_name, last_name FROM customers WHERE first_name= '" + cusDB + "'"

第二次使用PrepapredStatement,如此:

"SELECT id, first_name, last_name FROM customers WHERE first_name= ?"
st.setString(1, cusDB);

但是我没有看到关于PrepapredStatement的任何迹象,所以你可以在这里学习Prepared Statement doc

修改

就像@AndréSchild在评论中所说:

您很容易受到SQL注入攻击,例如'; delete from customers; //will remove all customers from your database的名字。始终(tm)使用准备好的陈述

答案 1 :(得分:1)

您不能在查询字符串中拥有Java参数的名称。您需要显式地为查询提供参数。为此,请将代码更改为:

public List<Customer> select(String cusDB) {
    return jdbcTemplate.query(
            "SELECT id, first_name, last_name FROM customers WHERE first_name= ?",
            new Object[] { cusDB },
            (rs, rowNum) -> new Customer(rs.getLong("id"),
                    rs.getString("first_name"), rs.getString("last_name")));
}

也就是说,在查询字符串中引入参数占位符(?),并向方法调用添加一个参数值数组(查询中每个参数占位符的一个值)。另请参阅JdbcTemplate documentationJdbcTemplate.query(String sql, Object[] args, RowMapper<T> rowMapper)和文档。