我想验证数据库列(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);
}
即使在DB中找不到值,上面的代码也会返回一个真值。不知道我在这里做错了什么。任何人都可以帮助我
答案 0 :(得分:2)
我认为你这里没有正确使用你的数据库。数据库旨在有效地迭代给定表中的所有记录并回答业务问题。另一方面,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
。您也可以尝试使用top
或limit
从数据库中仅获取第一行。
注意:您可以在表格的TelephoneNumber列中创建index
。索引可提高搜索性能。如果您保留了number
类型的TelephoneNumber列而不是varchar
,那么使用索引会更快,因为数字比较比文本比较更快。另请注意,使用索引会占用数据库上的更多空间,因此请务必小心使用它们。