【问题标题】:SELECT a column from a mySQL table and check validation从 mySQL 表中选择一列并检查验证
【发布时间】:2013-08-27 10:13:02
【问题描述】:

我有一个名为 userinfo 的 mySQL 表,其中包含列-userId、userName、Password、city、age-userId 是 Pkey 和 Autoincremnt

当用户在 login.jsp 上登录时,他会提交用户名和密码。

login.jsp的这两个参数在UserLogin servlet中接收,然后在userinfo表中检查。如果匹配,他可以登录。

我尝试了 SELECT 但我收到了很多错误。正确的方法应该是什么:-

try {           

         String sql = "Select UserName, UserPW From  SocialNetwork.RegisteredUser";

           conn = ConnectionFactory.getConnection();

           PreparedStatement ptmt = (PreparedStatement) conn
                    .prepareStatement(sql);

         ptmt.executeQuery();

         Statement stmt = (Statement) conn.createStatement();
        s = connection.prepareStatement("select id_usuario, id_grupo from usuarios_grupos where id_grupo = ?");

            //storing user data in ResultSet
            ResultSet rs = stmt.executeQuery(sql);


            while (rs.next())  {
            String refName = rs.getString("UserName");

            String refPass = rs.getString("UserPW");

            if (user.equals(refName) && pw.equals(refPass) ) {
                out.println("<html>");
                out.println("<body>");
                out.println("You are In");
                out.println("</body>");
                out.println("</html>");

                System.out.println("sucess");   


            }


           }
     }catch (SQLException e) {

        e.printStackTrace();
    }

【问题讨论】:

  • 您遇到了哪些大量错误
  • 为什么要触发两次查询?

标签: mysql select jdbc


【解决方案1】:

通过使用Statement 接口,您不能动态设置值。使用PreparedStatement接口进行第二次查询。

在你的类中导入包import javas.sql.*;

try {           

         String sql = "Select UserName, UserPW From  SocialNetwork.RegisteredUser UserName = ?";
         conn = ConnectionFactory.getConnection();
         PreparedStatement ptmt =conn.prepareStatement(sql);
           ptmt.setString(1, user)
          ResultSet rs= ptmt.executeQuery();
            while (rs.next())  {
            String refName = rs.getString(1);//field index of user name
            String refPass = rs.getString(2);//field index of password

            if (user.equals(refName) && pw.equals(refPass) ) {
                out.println("<html>");
                out.println("<body>");
                out.println("You are In");
                out.println("</body>");
                out.println("</html>");
                System.out.println("sucess");   
            }
       }
     }catch (SQLException e) {
        e.printStackTrace();
    }

【讨论】:

  • 当我运行这个String sql = "SELECT UserName, UserPW From SocialNetwork.RegisteredUser WHERE UserName = ?";时,我得到了语法错误for the right syntax to use near '?' at line 1
  • 所以删除 ptmt.setString(1, user) 并使用这个查询。 String sql = "SELECT UserName, UserPW From SocialNetwork.RegisteredUser WHERE UserName ='"+user+"'";
【解决方案2】:

您是要完整的代码清单吗?在您当前的代码中,您似乎无缘无故地执行了一些查询,然后获取所有用户的列表并遍历他们以寻找匹配项。尝试使用类似

的查询
sql ="Select UserName, UserPW From  SocialNetwork.RegisteredUser where UserName=?"
ResultSet rs = stmt.executeQuery(sql);

然后检查代码中的密码

if(rs.next()){
  String refPass = rs.getString("UserPW");
  if (pw.equals(refPass) )
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2015-02-05
    • 2016-07-22
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    相关资源
    最近更新 更多