如何使用JSP验证来自MySql的用户名

时间:2012-04-03 14:21:33

标签: mysql database jsp jdbc

大家好我想尝试使用用户在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");
}
}

1 个答案:

答案 0 :(得分:0)

至少有两个重大错误:

  1. 您要按==比较字符串实例,而不是按equals()方法比较它们的值。正确的行是if (rs.getString("uname").equals(un))

  2. 你不是让数据库完成返回正确行的工作,而是将整个数据库表复制到Java的内存中并用Java进行比较。这是非常低效的。以智能方式利用SQL,以便始终返回完全您需要的信息。例如,WHERE条款。

  3. 在一个不相关的说明中,您似乎没有在使用后正确关闭数据库资源。这将导致资源泄漏,这也是一个坏主意,因为它可能会导致您的应用程序长期崩溃。此外,列名unameun不相同。但我会假设它过于简单化了这个例子。

    这是一个小改写:

    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以了解有关它的更多信息。