如何将MySQL命令的输出存储到java变量(JDBC)中
我想知道如何发出MySQL命令,检查数据库中的表是否为空,然后将布尔结果存储到java变量中。我正在尝试使用JDBC命令来实现这一点。 到目前为止,这是我所拥有的,但它不能正常工作:如何将MySQL命令的输出存储到java变量(JDBC)中,java,mysql,jdbc,Java,Mysql,Jdbc,我想知道如何发出MySQL命令,检查数据库中的表是否为空,然后将布尔结果存储到java变量中。我正在尝试使用JDBC命令来实现这一点。 到目前为止,这是我所拥有的,但它不能正常工作: @Override public boolean isEmpty(Connection connection) { Statement statement = null; ResultSet resultSet = null; Boolean var = true; try {
@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
。优先于语句
(它更高效、更高效),您需要一个结果集
来实际迭代来自服务器的结果。大概
@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中的一个关键字。在执行select语句时,您应该使用并迭代其结果集,而不是使用
execute(…)
的布尔返回值指示第一个值是否为结果集。它不是查询中的布尔列。如果您不知道它是哪种类型的语句,或者它是一个可以生成多个结果(更新计数和结果集)的语句,通常只应使用execute(…)
因此,请使用:
boolean exists;
try (ResultSet rs = statement.executeQuery("SELECT EXISTS (SELECT 1 FROM Persons)")) {
exists = rs.next() && rs.getBoolean(1);
}
请阅读javadoc以获取更多信息。布尔返回值并不表示您认为它的作用。提示:select
始终返回结果集(或引发异常)。