0

我正在使用 java 将用户插入到 sql 数据库表中。插入效果很好。但是,用户 id 是主键并且会自动递增。将新用户插入表后,我想获取用户 ID 的值。

这是插入部分:

PreparedStatement create_statement;
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO ");
sb.append(this.get_database());
sb.append(".dbo.");
sb.append(this.get_table());
sb.append(" ( username, password, email_addr, first_name, middle_name, last_name, dob, street_addr, phone_num, bio)   ");
sb.append(" VALUES( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? );");

try {
    create_statement = this.sql_connection.prepareStatement(sb.toString());
    create_statement.setString(1, this.username);
    create_statement.setString(2, this.password);
    create_statement.setString(3, this.email_addr);
    create_statement.setString(4, this.first_name);
    create_statement.setString(5, this.middle_name);
    create_statement.setString(6, this.last_name);
    create_statement.setString(7, this.dob);
    create_statement.setString(8, this.street_addr);
    create_statement.setString(9, this.phone_num);
    create_statement.setString(10, this.bio);
    create_statement.executeUpdate();

我正在寻找一个小时的答案,有些是通过使用ResultSet来完成的。但是,尝试从create_statement获取数据时,我不断收到错误或 null

帮助 :(

4

1 回答 1

3

在此处比较 executeQuery 和 executeUpdate:

http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/PreparedStatement.html

您不会从 executeUpdate 获得 ResultSet,因为它返回一个 int。你也不能在这里使用 executeQuery,因为你是在插入,而不是在选择任何东西。改用这个

create_statement = this.sql_connection.prepareStatement(sb.toString(),
                   Statement.RETURN_GENERATED_KEYS);
//your code
ResultSet res = create_statement.getGeneratedKeys();

而且即使在学习时,变量也应该适当命名,这不是create陈述,是吗?

于 2012-10-07T17:50:02.930 回答