Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JDBC:用户ID作为主键,在Java代码中增加_Java_Mysql_Sql_Jdbc - Fatal编程技术网

JDBC:用户ID作为主键,在Java代码中增加

JDBC:用户ID作为主键,在Java代码中增加,java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,关于我的最后一个问题: 我有一个SQL表,包含几个列,其中一列是UserID,它是PK和AI 代码的作用是什么 1.从用户处获取用户名、电子邮件和密码。 2.检查表中是否已存在用户名或电子邮件。 3.如果表中既不存在用户也不存在电子邮件,我将在表中插入用户名、电子邮件和密码 但是,当我插入时,我仍然需要插入一个用户ID 因为工作台MySQL有问题,所以我现在无法运行代码,所以我只想知道这段代码是否有效: 然后当我使用INSERT查询时: 你觉得怎么样 这是我的全班: import jav

关于我的最后一个问题:

我有一个SQL表,包含几个列,其中一列是UserID,它是PK和AI

代码的作用是什么 1.从用户处获取用户名、电子邮件和密码。 2.检查表中是否已存在用户名或电子邮件。 3.如果表中既不存在用户也不存在电子邮件,我将在表中插入用户名、电子邮件和密码

但是,当我插入时,我仍然需要插入一个用户ID

因为工作台MySQL有问题,所以我现在无法运行代码,所以我只想知道这段代码是否有效:

然后当我使用INSERT查询时:

你觉得怎么样

这是我的全班:

    import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
公共类数据库{

private String usr;
private String eml;
private String pwd;

private int id = 0;

private ResultSet resultSet;
private Statement statement;
private Connection connection;

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



int flag = 0;

public boolean checkSignUp(String usr, String eml, String pwd) {
    try {

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

        /* checks that last UserID in the Table */
        String command = "SELECT UserID FROM users";
        resultSet = statement.executeQuery(command);

        resultSet.last();
        id = resultSet.getInt("UserID") + 1;

        /* runs over the UserName column */
        command = "SELECT UserName FROM users WHERE UserName LIKE '"
                + usr.toString() + "';";
        resultSet = statement.executeQuery(command);

        while (resultSet.next()) {
            if (usr.equalsIgnoreCase(resultSet.getString("UserName"))) {
                System.out.println("UserName : " + usr.toString() + " is taken!");
                flag++;
            }
        }

        /* runs over the Email column */
        command = "SELECT Email FROM users WHERE UserName LIKE '"
                + usr.toString() + "';";
        resultSet = statement.executeQuery(command);

        while (resultSet.next()) {
            if (eml.equalsIgnoreCase(resultSet.getString("Email"))) {
                System.out.println("Email : " + this.eml + " is taken!");
                flag +=2;
            }
        }

        /* if user\email exists or not */
        if (flag == 0) {

            System.out.println("Email : " + this.eml + " and UserName : "
                    + usr + " are AVAILABLE!");

            command = "INSERT users SET UserID = '" + id + "', UserName = '" + usr.toString()
                    + "',Email = '" + eml.toString()
                    + "',Password = '" + pwd.toString()
                    + "',Status = '0' ,Connected = '1';";
            statement.executeUpdate(command);
            return true;
        }
        else if (flag == 1) {
            //show error message
        }
        else if (flag == 2) {
            //show error message
        }
        else if (flag == 3) {

        }
    } catch (SQLException e) {
        System.out.println("SQLException: " + e.getMessage());
        System.out.println("Vendor error: " + e.getErrorCode());

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    flag = 0;
    return false;
}

}此代码存在许多问题:

SELECT语句正在选择整个users表。可能不是个好主意。 如果您是从用户表中选择的,您可能应该在某个地方有一个WHERE或LIMIT。 不清楚为什么要在用户ID中添加1,可能需要添加注释。 您的INSERT语句在语法上似乎有点偏离。请参阅文档。。。SET用于更新,INSERT语句看起来更像INSERT INTO。。。。 创建新用户条目时,可能不应该显式设置UserID。相反,您应该使该列自动递增,然后在INSERT语句中忽略它,这依赖于表的声明,从而导致自动计算和设置该值。 您正在将密码直接存储到用户的表中。如果要存储密码,至少要对其进行加密,或者更好的是,只存储密码的salt散列,而不存储任何可以重构密码的内容。然而,如果您使用OAuth,则更好。 您需要转义一些注释中提到的用户提供的字段,准备好的语句就是这样做的方法。 您可以更改表结构以自动增加用户ID

否则,您可以从用户处获取id值为SELECT maxUserID+1


由于它是用户凭据,而不是纯文本,建议在DB中加密它们

从用户中选择用户ID按用户ID顺序描述限制1将确保从数据库返回最大的用户ID,不需要从数据库中查询每个用户ID并获取最大的用户ID。而且SQL很容易受到注入攻击。尝试使用for update。如果是自动递增列,则不需要为该列提供值。这可能导致两个相互竞争的线程为PK插入相同的值。Insert应该更多地采用Insert into[table]{column{,column…}}values…@SAIEMAHMED的格式,在SELECT UserID from users ORDER BY UserID DESC LIMIT 1 int id=resultSet.getIntUserID+1@所以它应该是,。。。在用户中插入用户名、用户名、电子邮件,。。值id,usr,eml,pwd,…我将1添加到UserID中,因为当我插入新行时,我希望它在最后一行之后有一个新的UserIDUserID@user3651124使用4,在声明表时,可以将某些列配置为在插入时自动设置。例如,数值可以自动递增,也就是说,每次插入都会将该值设置为比先前插入的记录的值多一个值。类似地,日期可以配置为在插入时初始化为当前时间,也可以配置为在更新时再次更新,这对于跟踪上次修改的时间很有用。@user3651124和5,基本上存储密码是不安全的。最好不要存储它们,甚至不要向用户索要它们。相反,您应该使用OAuth,它允许用户使用自己选择的身份提供商(如Google)登录。然后,您将存储一个OAuth标识符而不是密码,。。值id、usr、eml、pwd等,。。。必须没有用户ID。。身份证件
    import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
private String usr;
private String eml;
private String pwd;

private int id = 0;

private ResultSet resultSet;
private Statement statement;
private Connection connection;

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



int flag = 0;

public boolean checkSignUp(String usr, String eml, String pwd) {
    try {

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

        /* checks that last UserID in the Table */
        String command = "SELECT UserID FROM users";
        resultSet = statement.executeQuery(command);

        resultSet.last();
        id = resultSet.getInt("UserID") + 1;

        /* runs over the UserName column */
        command = "SELECT UserName FROM users WHERE UserName LIKE '"
                + usr.toString() + "';";
        resultSet = statement.executeQuery(command);

        while (resultSet.next()) {
            if (usr.equalsIgnoreCase(resultSet.getString("UserName"))) {
                System.out.println("UserName : " + usr.toString() + " is taken!");
                flag++;
            }
        }

        /* runs over the Email column */
        command = "SELECT Email FROM users WHERE UserName LIKE '"
                + usr.toString() + "';";
        resultSet = statement.executeQuery(command);

        while (resultSet.next()) {
            if (eml.equalsIgnoreCase(resultSet.getString("Email"))) {
                System.out.println("Email : " + this.eml + " is taken!");
                flag +=2;
            }
        }

        /* if user\email exists or not */
        if (flag == 0) {

            System.out.println("Email : " + this.eml + " and UserName : "
                    + usr + " are AVAILABLE!");

            command = "INSERT users SET UserID = '" + id + "', UserName = '" + usr.toString()
                    + "',Email = '" + eml.toString()
                    + "',Password = '" + pwd.toString()
                    + "',Status = '0' ,Connected = '1';";
            statement.executeUpdate(command);
            return true;
        }
        else if (flag == 1) {
            //show error message
        }
        else if (flag == 2) {
            //show error message
        }
        else if (flag == 3) {

        }
    } catch (SQLException e) {
        System.out.println("SQLException: " + e.getMessage());
        System.out.println("Vendor error: " + e.getErrorCode());

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    flag = 0;
    return false;
}