我在我的软件中使用 SQLite 本地数据库。我想根据行的给定值检查行是否存在。例如: "SELECT * FROM ftp WHERE Host LIKE '"+ host +"' AND Username LIKE '"+ username +"' "
但是我想获得 boolean 结果,因此如果找到记录则执行某些操作,如果没有则执行其他操作。锄头我能做到吗?
这是我厌倦的,但它总是正确的,因为它检查查询是否运行而不是它是否返回数据。
public void ftpTableCheck(String host, String port, String username, String password){
try{
String query = "SELECT * FROM ftp WHERE Host LIKE '"+ host +"' AND Username LIKE '"+ username +"' ";
PreparedStatement pst = conn.prepareStatement(query);
if (pst.execute() == true){
System.out.println("true");
}
}catch(Exception e){
e.printStackTrace();
}
}
知道如何解决吗? 谢谢
最佳答案
因此,您可以使用 select count(*) ...
或 select (count(*) > 0) as found ...
作为基础查询。
当你调用executeQuery
时,你将得到一个ResultSet
作为返回,从中,你需要确定它的内容。
在您的情况下,您只期望单行结果,因此您只需使用 ResultSet#next
移动到第一行,然后从中提取列值...
public void ftpTableCheck(String host, String port, String username, String password) {
try {
String query = "SELECT (count(*) > 0) as found FROM ftp WHERE Host LIKE ? AND Username LIKE ?";
PreparedStatement pst = conn.prepareStatement(query);
pst.setString(1, host);
pst.setString(2, username);
try (ResultSet rs = pst.executeQuery()) {
// Only expecting a single result
if (rs.next()) {
boolean found = rs.getBoolean(1); // "found" column
if (found) {
// You have rows
} else {
// You have no rows
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
仔细看看JDBC Database Access和 Using Prepared Statements了解更多详情
关于java - 如何通过条件检查 SQLite 表中是否存在行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29640246/