可能重复:
如何检查结果集是否有一行或更多行?
executeQuery(String sql)当SQL Query的结果为零行时将返回什么>?如果它返回一个ResultSetObject,我们将如何检测到SQL Query没有返回任何内容.
假设SQL Query是一个SELECT语句.
我在我的程序中使用HSQLDB.我想检查结果集是否为空.
//check if empty first
if(results.next() == false){
System.out.println("empty");
}
//display results
while (results.next()) {
String data = results.getString("first_name");
//name.setText(data);
System.out.println(data);
}
Run Code Online (Sandbox Code Playgroud)
上述方法无法正常工作.根据这个帖子我要打电话.first()或.beforeFirst()将光标停留在第一行,但.first()和.beforFirst()在HSQL不支持.我也尝试添加,connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
但我仍然得到相同的结果(我得到消息为空,数据来自数据库!!!)我在这里做错了什么?
我是sqlite的新手,并且有一个填充的数据库,我需要确定数据库中的任何数字生物是否具有适合度的阈值水平(适应度> = 2)并且存活(生命= 1).我还需要排除我想要找到合适配偶的生物体的indivID(主键)(indivID INTEGER PRIMARY KEY).
下面我尝试了第一行代码,但它引发了一个SQL错误:
[SQLITE_ERROR] SQL错误或缺少数据库("CASE"附近:语法错误).
但是我知道错误在SQL语句中,因为其他函数正在成功访问数据库.
SELECT indivID FROM population CASE fitness >=2 WHEN live = 1 AND indivID!=[specific individual] ELSE NULL END
Run Code Online (Sandbox Code Playgroud)
我已经尝试了下一行代码,但它没有正确排除特定个体的indivID:
SELECT [some column names] FROM [a database] WHERE fitness>=2 AND live=1 AND indivID!=[specific individual]
Run Code Online (Sandbox Code Playgroud)
我有三个问题:
1)我在上述陈述中的错误在哪里
2)使用"case ... when"和"where ... and"语句之间的区别是什么
3)在这些查询中可能甚至可能存在可能没有足够高适应度(大于2)的"live = 1"个体来获得select语句的资格,因此这两个查询的结果都是不可行的个人(如果写得正确)则为空?
在此先感谢您的帮助!
我有一个非常基本的代码执行一个select查询并返回一个布尔值,具体取决于结果集是否为空.
public boolean checkIfUserHasPreferences(String username){
ResultSet rs = null;
boolean checkBoolean = false;
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
con = DriverManager.getConnection(Messages.getString("OracleUserManagement.0"), Messages.getString("OracleUserManagement.1"), Messages.getString("OracleUserManagement.2")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
PreparedStatement statement = con.prepareStatement("SELECT USERNAME FROM USER_PREFERENCES WHERE USERNAME = ?");
statement.setString(1, username);
rs = statement.executeQuery();
if (rs == null){
System.out.println("I checked it was true!");
checkBoolean = true;
} else {
System.out.println("I checked it was false!");
checkBoolean = false;
}
con.commit();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return checkBoolean;
}
Run Code Online (Sandbox Code Playgroud)
让我感到困惑的是,即使表/数据库是空的,它总是打印出"我检查它是假的!".
这是因为即使结果集返回0行,它也不是= null?我应该使用while(rs.next())来检查吗?
这是一个简单的代码,可以打印数据库中的某些行。但是当我执行此操作时,屏幕上不会打印任何内容。我发现问题在于rs.next()方法正在跳过一行。那么,如何避免这种情况或重置rs.next()方法的位置?
String searchword = Searchtf.getText();
try {
Class.forName("com.mysql.jdbc.Driver");
java.sql.Connection con = DriverManager.getConnection(url, db_username, db_password);
java.sql.Statement stat = con.createStatement();
String searchQuery = "SELECT * FROM user WHERE Name LIKE '" + searchword + "' ";
java.sql.ResultSet rs = stat.executeQuery(searchQuery);
if (rs.next()) {
while (rs.next()) {
System.out.print(rs.getString("idUser") + " ,");
System.out.print(rs.getString("Name") + " ,");
System.out.print(rs.getString("Email") + " ,");
System.out.println(rs.getString("country") + " .");
}
} else {
JOptionPane.showMessageDialog(null, "Not Found");
}
} catch (Exception ex) {
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 似乎ResultSet空的标准检查在Spring的JDBC中不起作用ResultSetExtractor。我通过以下方式使用它:
return jdbcTemplate.query(sql, ps -> {
ps.setLong(1, fooParam1);
ps.setLong(2, fooParam2);
}, rs -> {
return rs.getLong(1);
});
Run Code Online (Sandbox Code Playgroud)
那么ResultSet在这种模式下检查空度的正确方法是什么?