大家好我想尝试使用用户在html中输入的用户名从数据库验证用户名,假设
un//be the variable where username entered now from html form is stored
现在如何从用户表
中检索uname的所有列uname //column name in mysql for usernames
user //table name in mysql
并检查天气的用户名,即现在未输入的数据库中是否存在 我正在使用
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/mebps","root","admin");
Statement stmt = (Statement) con.createStatement();
ResultSet rs = stmt.executeQuery("select un from userinfo");
while(rs.next())
{
if(rs.getString("uname") == un)
{
out.println("user is present");
}
}
答案 0 :(得分:0)
至少有两个重大错误:
您要按==
比较字符串实例,而不是按equals()
方法比较它们的值。正确的行是if (rs.getString("uname").equals(un))
。
你不是让数据库完成返回正确行的工作,而是将整个数据库表复制到Java的内存中并用Java进行比较。这是非常低效的。以智能方式利用SQL,以便始终返回完全您需要的信息。例如,WHERE
条款。
在一个不相关的说明中,您似乎没有在使用后正确关闭数据库资源。这将导致资源泄漏,这也是一个坏主意,因为它可能会导致您的应用程序长期崩溃。此外,列名uname
和un
不相同。但我会假设它过于简单化了这个例子。
这是一个小改写:
public boolean exist(String username) throws SQLException {
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
boolean exist = false;
try {
connection = database.getConnection();
statement = connection.prepareStatement("SELECT uname FROM userinfo WHERE uname=?");
statement.setString(1, username);
resultSet = statement.executeQuery();
exist = resultSet.next();
} finally {
if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
}
return exist;
}
你看,如果匹配,则返回true
(至少一条记录),否则false
(没有一条记录)。无需将整个表复制到Java的内存中,并使用Java进行爬行。
最后但同样重要的是,此代码不属于JSP文件,而是属于普通的Java类,从servlet开始。另请参阅our servlets wiki page以了解有关它的更多信息。