从 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 查询从表中选择除一列之外的所有内容? [复制]