如何检查带有条件的SQLite表中是否存在行

时间:2015-04-15 01:49:48

标签: java sql sqlite

我在我的软件中使用SQLite本地数据库。我想根据行的给定者值检查是否存在行。例如:"SELECT * FROM ftp WHERE Host LIKE '"+ host +"' AND Username LIKE '"+ username +"' "

但是我想得到布尔结果所以如果找到记录做某事而不做其他事情。锄我可以这样做吗?

这是我累了但总是如此,因为它检查问题是否运行而不是返回数据。

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();
    }
}

知道怎么解决吗? 感谢

2 个答案:

答案 0 :(得分:2)

执行此操作的一般方法是获取结果并检查它是否为空。对于您的问题,计算返回的行是合乎逻辑的。

正如@MadProgrammer所说,查询如下:

String query = "SELECT COUNT(*) FROM ftp WHERE Host LIKE '"+ host +"' AND Username LIKE '"+ username +"' ";

现在你只需得到计数并检查它是否为0(未找到)或未找到(找不到)

答案 1 :(得分:2)

因此,您可以使用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 AccessUsing Prepared Statements了解详情