Java的SQL(JDBC):如何移动到下一列?(Java SQL (JDBC) : how to

2019-10-20 08:23发布

我试图检查“ 用户名 ”和“ 电子邮件 ”在我的构造函数参数的SQL表存在。

这是我的代码:

    public DB(String usr, String eml, String pwd) {
    this.usr = usr;
    this.eml = eml;
    this.pwd = pwd;

    String jdbcUrl = "jdbc:mysql://localhost:3306/registered";
    String jdbcUser = "....";
    String jdbcPassword = "....";

    try {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection(jdbcUrl, jdbcUser,
                jdbcPassword);
        statement = connection.createStatement();

现在,如果我使用SELECT有两列,就像这样:

String command = "SELECT UserName,Email FROM users WHERE UserName LIKE '" + this.usr.toString() + "';";
        resultSet = statement.executeQuery(command);

然后做我的环路的resultSet ......是这样的:

while (resultSet.next()) {

            if (usr.equalsIgnoreCase(resultSet.getString("UserName"))) {
                System.out.println("UserName : " + this.usr + " is taken!");

            }

            else if (eml.equalsIgnoreCase(resultSet.getString("Email"))) {
                System.out.println("Email : " + this.eml + " is taken!");

            }
            else {
                System.out.println("Email : " + this.eml + " and UserName : " + this.usr + " are AVAILABLE!");
                command = "INSERT users SET UserName = '" + this.usr.toString() + "',Email = '" + this.eml.toString() + "',Password = '" + this.pwd.toString() + "',Status = '0' ,Connected = '1';";        
                statement.executeUpdate(command);
    }
        }
    } catch (SQLException e) {
        System.out.println("SQLException: " + e.getMessage());
        System.out.println("Vendor error: " + e.getErrorCode());

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

resultSet.next()

只有运行在“第一”列,这意味着如果“USR”存在于它的工作表,但如果“USR”不存在于表中,其他两个if语句不,不会工作。

......我要检查两个第一栏和第二,......,也许第三或更多很快..,任何帮助吗?

Answer 1:

您的WHERE子句仅作为用户名的测试,所以如果用户名不匹配this.usr.toString()结果集将是空的,那么while循环将不被输入。

你应该更改查询,以配合您所关心的所有领域-像- "SELECT UserName,Email FROM users WHERE UserName = ... OR Email = ..."

如果结果是空的,你就会知道,你可以插入新记录。 否则,您可以检查哪些领域(用户名,电子邮件)的已被使用。

你应该知道的一两件事-执行SQL语句没有PreparedStatement使你的代码容易受到SQL注入式攻击。

您应该更改您的代码是这样的:

   PreparedStatement pstmt = con.prepareStatement("SELECT UserName,Email FROM users WHERE UserName = ? OR Email = ?");
   pstmt.setString(1, this.usr);
   pstmt.setString(2, this.eml);
   resultSet = pstmt.executeQuery();

你应该同样改变你的INSERT语句使用PreparedStatement



文章来源: Java SQL (JDBC) : how to move to the next column?