[英]Select all records whose specific field is not NULL
我有一个名为stars
的MySQL
表,其中一个字段是id_num
,默认值为NULL
。 我想通过java中的PreparedStatement
选择id_num
不为 NULL
所有记录。
现在我正在尝试这个:
private final String idStarsSQL = "select * from `stars` where id_num is not ?";
...
preparedStatement = (PreparedStatement) connection.prepareStatement(idStarsSQL);
preparedStatement.setString(1, NULL);
set = preparedStatement.executeQuery();
但它不起作用。
private final String idStarsSQL = "select * from `stars` where id_num is not NULL";
你不需要PreparedStatement
。
从我的角度来看,PreparedStatement应该用于带参数的SQL语句。 使用带参数的SQL语句的优点是,您可以使用相同的语句,并在每次执行时为其提供不同的值。
Statement statement = con.createStatement();
ResultSet result = statement.executeQuery("select username, age, nickname from user where nickname is not NULL");
List<User> allUserNullNickname = new ArrayList<>();
while(result.next()){
User user = new User();
user.setUsername(result.getString("username"));
user.setAge(result.getInt("age"));
allUserNullNickname.add(user);
}
System.out.println("All user without nickname:");
allUserNullNickname.stream().forEach(user -> System.out.println("username: "+user.getUsername()+" Age: "+user.getAge()));
因为null不是值,所以它更多是SQL中的关键字,因此您必须将其硬编码到sql语句中
private final String idStarsSQL = "select * from `stars` where id_num is not NULL";
您可以使用 :
PreparedStatement preparedStatement =
connection.prepareStatement("select * from `stars` where id_num is not NULL");
ResultSet result = preparedStatement.executeQuery();
while (result.next()) {
result.getString("attribute1");
result.getString("attribute2");
}
您可以在此处了解有关PreparedStatement和ResulSet的更多信息
preparedStatement的主要功能是将参数插入到SQL语句中,在您的情况下,您不需要这样做,因为null不是一个参数,所以您可以清楚地做到:
PreparedStatement myRequest=
connection.prepareStatement("select * from `stars` where id_num is not NULL");
ResultSet myResult= preparedStatement.executeQuery();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.