[英]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.