Java 选择其特定字段不为空的所有记录

Java 选择其特定字段不为空的所有记录,java,mysql,select,prepared-statement,notnull,Java,Mysql,Select,Prepared Statement,Notnull,我有一个名为stars的MySQL表,其中一个字段是id\u num,默认值为NULL。我想通过中的PreparedStatement选择id\u num不为NULL的所有记录 现在我正在尝试: private final String idStarsSQL = "select * from `stars` where id_num is not ?"; ... preparedStatement = (PreparedStatement) connection.prepareStatemen

我有一个名为
stars
MySQL
表,其中一个字段是
id\u num
,默认值为
NULL
。我想通过中的
PreparedStatement
选择
id\u 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()));
Statement Statement=con.createStatement();
ResultSet result=statement.executeQuery(“从昵称不为NULL的用户中选择用户名、年龄、昵称”);
List allUserNullNickname=new ArrayList();
while(result.next()){
用户=新用户();
user.setUsername(result.getString(“用户名”);
user.setAge(result.getInt(“age”);
添加(用户);
}
System.out.println(“没有昵称的所有用户:”);
AllUserNull昵称.stream().forEach(用户->系统.out.println(“用户名:”+user.getUsername()+“年龄:”+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的主要功能是在SQL语句中插入参数,在您的情况下,您不需要这样做,因为null不是参数,因此您可以清楚地执行以下操作:

PreparedStatement myRequest= 
            connection.prepareStatement("select * from `stars` where id_num is not NULL");
ResultSet myResult= preparedStatement.executeQuery();

你不需要在这里准备一份声明。只需使用id_num不为null的stars中的
select*
@Jens,我将如何将此字符串连接到数据库?我的意思是,现在我有了
.executeQuery()。声明此字符串后,我将做什么?
.executeQuery(idStarsSQL)。您也可以将其与准备好的语句一起使用,但不必使用parameter@Jens啊,那么你的意思是我应该删除语句
preparedStatement.setString(1,NULL),对吗?在我的字符串中写
NULL
。是的,这就是我的意思,这就是我要说的。。。根据你的回答,我确实需要一份准备好的声明。我知道了,非常感谢!!好了,现在你改了。