从 mySQL 表中选择一列并检查验证

Posted

技术标签:

【中文标题】从 mySQL 表中选择一列并检查验证【英文标题】:SELECT a column from a mySQL table and check validation 【发布时间】: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();
    

【问题讨论】:

您遇到了哪些大量错误 为什么要触发两次查询? 【参考方案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) )

【讨论】:

以上是关于从 mySQL 表中选择一列并检查验证的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MySQL 查询从表中选择除一列之外的所有内容? [复制]

mysql插入tbl(从2个表中选择)

如何从表中选择所有列并计数?

PostgreSQL - 从连接表中选择聚合列并使用它来求和

如何从多个表中选择列并在 yii 框架中显示

如何从一个表中获取一列并插入到另一个表中