[英]Java - Efficient way to loop through the database records
我想验证电话号码是否存在于数据库列( TelephoneNumber
)中。 如果存在,我将返回true
或false
此代码不仅用于验证TelephoneNumber
列,还可以验证其他数据库列,例如FirstName
, LastName
, EmailAddress
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中的整个表以查找匹配项。 这有以下问题:
在您的情况下,由于您使用的是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
。 您也可以尝试使用top
或limit
从数据库仅获取第一行。
注意:您可以在表的“电话号码”列上创建index
。 索引可提高搜索性能。 如果您保留了电话number
类型为number
而不是varchar
列,那么使用索引将更快,因为数字比较比文本比较快。 还要注意,使用索引会消耗数据库上的更多空间,因此在使用它们时要小心。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.