我的getFetchSize()
功能有问题。
我只需要知道 SQL 查询是否返回零行。
我试过这个简单的说法:
if (rs.getFetchSize()==0)
System.out.println("HEADLINE");
wherers
是ResultSet
类型。上面的代码似乎不起作用。它总是打印消息是否rs
为空。
我检查了 SQL 查询本身,当存在行时它正确返回了非空结果。
关于如何确定查询是否返回 0 行的任何想法?我用谷歌搜索并找不到任何答案。
ResultSet.getFetchSize()不返回结果数!从这里:
标准 JDBC 还允许您指定查询的每个数据库往返获取的行数,这个数字称为获取大小
您可以遍历结果集,如果没有任何条目,则可以确定没有结果。为什么你不能立即得到结果大小?因为数据库正在向您返回一个指向其结果的指针,并且它依赖于您对其进行迭代(每行返回服务器)。
提取大小是每次往返中应从数据库中检索的行数。它与返回的行数无关。
你应该做的是调用 rs.next() - 如果你的查询没有返回任何行,它将返回 false。
实际上,我认为另一种方法可以做你正在寻找的事情是这样的:
Class.forName("org.exempleDatabase.Driver");
Connection conn = DriverManager.getConnection("jdbc:exempleDatabase:/../smartytwiti", "username", "password");
ResultSet resset = conn.createStatement().executeQuery("select count(*) from yourTable;");
resset.last();
int resnum = resset.getRow();
if(resnum<1)System.out.println("HEADLINE");
这将获取 ResultSet,移动到集合的最后一行,然后在resnum中给出该行的编号。如果您要使用resset.next()遍历结果,请记住使用resset.beforeFirst()向后移动。
希望有帮助。
在 SQL Server 上你可以把它放到 sql 查询中:
COUNT(*) OVER(PARTITION BY 1)
像这儿:
select COUNT(*) OVER(PARTITION BY 1) as NUM,ident as ID,employee as EMP from invoice where date between '2017-01-01 00:00:00.000' and '2017-01-31 00:00:00.000'
然后,您会得到如下结果:
NUM, ID, EMP
4, 28912, JOHN
4, 28913, JOHN
4, 28914, ADAM
4, 28915, PETER
现在,在处理所有数据之前,您只能读取第一个 col 和第一个单元格以获取记录数。用于存储结果的对象数组 [invoices] 仅声明一次,同时获得渴求结果。
Object[][] invoices = null;
Boolean b_inv = false;
[...]
try {
Statement stmt = db_conn.createStatement();
boolean results = stmt.execute(sql_query);
if (results) {
try (ResultSet rs1 = stmt.getResultSet()) {
Integer l = 0;
while (rs1.next()) {
if (!b_inv) {
invoices = new Object[rs1.getInt(1)][2];
b_inv = true;
}
invoices[l][0] = rs1.getInt(1);
invoices[l][1] = rs1.getString(2);
l++;
}
}
stmt.close();
}
} catch (SQLException | NumberFormatException dbsi1) {}
将记录计数放在 SQL Server 端不是很好吗?
您可以使用以下代码执行您想要的操作:
Class.forName("org.exempleDatabase.Driver");
Connection conn = DriverManager.getConnection("jdbc:exempleDatabase:/../smartytwiti", "username", "password");
ResultSet resset = conn.createStatement().executeQuery("select count(*) from yourTable;");
resset.next();//set the pointer to the first row(important!)
if(resset.getInt(1)==0)
System.out.println("HEADLINE");
如前所述,getFetchSize 没有得到结果的数量..
你可以做这样的事情。初始化一个整数并增加它..
int count = 0
while(rs.next()) {
count++;
}