我想验证电话号码是否存在于数据库列(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中的整个表以寻找匹配项。这有以下问题:
数据库和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。这使您可以确定是否找到了相关记录。