JDBC- 无法检索值并删除 mysql 数据库中的 table

JDBC- cant retrive value and delete table in mysql database

我将 JDBC 与 wamp 和 phpmyadmin 一起使用。创建帐户后,我想检索该帐户的 ID。 table 帐户我有 ID、姓名、余额。 它会生成 SQLException:Column 'id' not found

sql = "INSERT INTO account (name, balance) VALUES ('" + name + "', " + 0 + ");";
        stmt.executeUpdate(sql);
        sql = "SELECT MAX(id) from account";
         ResultSet id = stmt.executeQuery(sql);
          while(id.next()){
          id_user  = id.getInt("id");
        }
        System.out.println(id_user);

当我想删除现有帐户时,它会生成此执行:java.sql.SQLException:无法使用 executeQuery() 发出数据操作语句。 代码是:

sql = "SELECT * FROM account WHERE id=" + id + "; ";
        ResultSet rs = stmt.executeQuery(sql);
        while(rs.next()){
          id_user  = rs.getInt("id");
        }
        if (id_user==id) {
            sql = "DELETE FROM contas WHERE id=" + id + "; ";
            stmt.executeQuery(sql);
            result = true;
        } else {
            result = false;
        }

您可能应该将 PreparedStatement 与绑定变量一起使用。不管怎样,这

sql = "DELETE FROM contas WHERE id=" + id + "; ";
stmt.executeQuery(sql);

正在尝试执行 update(特别是 delete,而不是 select),因此您需要

stmt.executeUpdate(sql);

stmt.execute(sql);

Statement.executeQuery(String) returns一个ResultSet.

已解决

解决方案是按升序排序

 sql = "SELECT id from account ORDER BY id ASC";
        ResultSet rs = stmt.executeQuery(sql);
        while (rs.next()) {
            id_account = rs.getInt("id");
        }
 return id_account

我知道你在做一些不同的事情,但有一些插入的小技巧:

Java 有一种独立于数据库的方法来获取 INSERT 生成的键。 在多用户环境中,这比之后或之前使用 MAX 安全得多。

错误 ID 场景:

  1. 先插入
  2. 第二次插入
  3. 第一SELECT
  4. 秒SELECT

也使用 PreparedStatement,用于安全(SQL 注入)和转义(如果名称包含单引号或反斜杠等。

并且 try-withresources 总是关闭事物,即使在 return 或异常时也是如此。

String sql = "INSERT INTO account (name, balance) VALUES (?, 0)";
try (PreparedStatement stmt = conn.prepareStatement(sql,
        Statement.RETURN_GENERATED_KEYS)) {
    stmt.setString(1, name);
    int updateCount = stmt.executeUpdate(); // 1
    try (ResultSet id = stmt.getGeneratedKeys()) {
        id_user = 0;
        if (id.next()) { // 'if' as just 1 row inserted.
            id_user = id.getInt(1); // 1 key per row.
        }
    }
    System.out.println(id_user);
}