Mysql 数据库 select 来自 table where 字段语句 java
Mysql DB select from table where field statement java
我正在尝试使用 java 查询数据库,我不明白这个函数的问题。它 return 一个垃圾值。
我只想从 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")));
}
您可以使用两种方式,第一种是将您的查询与您要搜索的 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)使用准备好的语句
您不能在查询字符串中只包含 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
documentation and documentation of JdbcTemplate.query(String sql, Object[] args, RowMapper<T> rowMapper)
.
我正在尝试使用 java 查询数据库,我不明白这个函数的问题。它 return 一个垃圾值。
我只想从 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")));
}
您可以使用两种方式,第一种是将您的查询与您要搜索的 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)使用准备好的语句
您不能在查询字符串中只包含 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
documentation and documentation of JdbcTemplate.query(String sql, Object[] args, RowMapper<T> rowMapper)
.