繁体   English   中英

Java-遍历数据库记录的有效方法

[英]Java - Efficient way to loop through the database records

我想验证电话号码是否存在于数据库列( 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);
}

即使在数据库中找不到这些值,上述代码也会返回一个真值。 不知道我在做什么错。 谁能帮我吗

我认为您在这里没有正确使用数据库。 数据库旨在有效地遍历给定表中的所有记录并回答业务问题。 另一方面,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。 这使您可以确定是否找到了相关记录。

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

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

注意:您可以在表的“电话号码”列上创建index 索引可提高搜索性能。 如果您保留了电话number类型为number而不是varchar列,那么使用索引将更快,因为数字比较比文本比较快。 还要注意,使用索引会消耗数据库上的更多空间,因此在使用它们时要小心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM