Java - 循环数据库记录的有效方法

时间:2017-03-06 09:02:40

标签: java sql-server

我想验证数据库列(TelephoneNumber)中是否存在电话号码。如果存在,我将返回truefalse 此代码不仅用于验证TelephoneNumber列,还可以验证其他数据库列,例如FirstNameLastNameEmailAddress etc

public boolean executeDBQuery(String tableName, String columnName,
        String columnValue) {
    try {
        PreparedStatement ps = null;
        String query = "SELECT TOP 1 " + columnName + "FROM" + tableName
                + "WHERE" + columnName + "=" + '?';
        ps = conn.prepareStatement(query);
        ps.setString(1, columnValue);
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            return true;
        } else {
            return false;
        }
    } catch (SQLException ex) {

    }

    return false;
}

主要方法:

public static void main(String[] args) {
Database db = new Database();
boolean result = db.executeDBQuery("Application","FirstName","asd");
System.out.println(result);
}

即使在DB中找不到值,上面的代码也会返回一个真值。不知道我在这里做错了什么。任何人都可以帮助我

2 个答案:

答案 0 :(得分:2)

我认为你这里没有正确使用你的数据库。数据库旨在有效地迭代给定表中的所有记录并回答业务问题。另一方面,Java并不是真的为此而设计的。目前,您正在Java中搜索匹配的整个表。这有以下问题:

  • 在您的数据库和Java应用程序之间通过网络传递潜在的大量数据
  • 在此搜索期间,可能无法使用索引等辅助工具,这可能效率低下
  • Java并不是为了进行低级数据库操作而构建的,因此在应用程序中花费的计算时间可能会轻易超过数据库对同一查询所需的资源。这项操作是值得肯定的资源。


在您的情况下,由于您使用的是SQL Server,因此以下单个查询应该与您当前的代码完成相同的操作:

SELECT TOP 1 TelephoneNumber FROM Application WHERE TelephoneNumber = '6553438888';

以下是您可以尝试的代码段:

try {
    PreparedStatement ps = null;
    String sql = "SELECT TOP 1 TelephoneNumber FROM Application ";
           sql += "WHERE TelephoneNumber = ?;";
    ps = conn.prepareStatement(sql);
    ps.setString(1, "6553438888");
    ResultSet rs = ps.executeQuery();
    if (rs.next()) {
        System.out.println("Found the phone number");
    }
    else {
        System.out.println("Did not find the phone number");
    }
} catch (SQLException e) {
    // handle exception
} finally {
    // cleanup, close connections, etc.
}

如果找不到该号码,则上述结果集将为空,并且对rs.next()的调用将返回false。这可以让您确定是否找到了相关记录。

答案 1 :(得分:0)

您可能不希望通过Java应用程序中的查询获取大约一百万行。你很可能会用完空间。因此,不建议使用此类查询。

您可以做的是,在where子句中将要查找的所需电话号码发送到数据库查询。如果返回的行数为零,那么您可以返回false,否则您可能会返回true。您也可以尝试使用toplimit从数据库中仅获取第一行。

注意:您可以在表格的TelephoneNumber列中创建index。索引可提高搜索性能。如果您保留了number类型的TelephoneNumber列而不是varchar,那么使用索引会更快,因为数字比较比文本比较更快。另请注意,使用索引会占用数据库上的更多空间,因此请务必小心使用它们。