gpt4 book ai didi

java - 如何将 MySQL 命令的输出存储到 java 变量中 (JDBC)

转载 作者:行者123 更新时间:2023-11-29 15:14:39 25 4
gpt4 key购买 nike

我想知道如何发出一个 MySQL 命令来检查数据库中的表是否为空,然后将 boolean 结果存储到 java 变量中。我正在尝试使用 JDBC 命令来执行此操作。这是我到目前为止所拥有的,但它不能正常工作:

@Override
public boolean isEmpty(Connection connection) {
Statement statement = null;
ResultSet resultSet = null;
Boolean var = true;

try {
statement = connection.createStatement();

System.out.println(statement.execute("SELECT EXISTS (SELECT 1 FROM Persons) AS OUTPUT"));

if(statement.execute("SELECT EXISTS (SELECT 1 FROM Persons)")) {
var = false;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return var;
}

当我使用全新的、未填充的 mySQL 表运行程序时,该函数返回 true。有谁知道解决方案吗?

最佳答案

您的测试检查表是否存在,而不是您想要查看表是否包含任何行。为此,请从表中选择行数并验证其是否大于 0。喜欢PreparedStatement超过 Statement (它更高效且性能更高),并且您需要一个 ResultSet 来实际迭代服务器的结果。比如,

@Override
public boolean isEmpty(Connection connection) {
PreparedStatement statement = null;
ResultSet resultSet = null;
boolean res = false; // no need for the wrapper type here.

String sql = "SELECT COUNT(*) FROM Persons";
try {
statement = connection.prepareStatement(sql);

System.out.println(sql);
resultSet = statement.executeQuery();
if (resultSet.next()) {
res = resultSet.getInt(1) > 0;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return res;
}

var 更改为 res,因为(从 Java 10 开始)var 现在是 Java 中的关键字。

关于java - 如何将 MySQL 命令的输出存储到 java 变量中 (JDBC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59816257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com