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 场景:
- 先插入
- 第二次插入
- 第一SELECT
- 秒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);
}
我将 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 场景:
- 先插入
- 第二次插入
- 第一SELECT
- 秒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);
}