我遇到getFetchSize()
函数问题。
我只需要知道SQL查询是否返回零行。
我尝试过这个简单的陈述:
if (rs.getFetchSize()==0)
System.out.println("HEADLINE");
其中rs
属于ResultSet
类型。上面的代码似乎不起作用。它始终打印消息rs
是否为空。
我检查了SQL查询本身,当行存在时,它正确返回非空结果。
有关如何确定查询是否返回0行的任何想法? 我用Google搜索,找不到任何答案。
答案 0 :(得分:21)
ResultSet.getFetchSize()不会返回结果数量!来自here:
标准JDBC还允许您指定提取的行数 每个数据库往返查询,并引用此数字 作为获取大小
您可以遍历结果集,如果您没有任何条目,则可以确定没有结果。为什么不能立即获得结果大小?因为数据库正在返回指向其结果的指针,并且它依赖于您迭代它(返回到每行的服务器)。
答案 1 :(得分:4)
获取大小是每次往返应从数据库中检索的行数。它与返回的行数无关。
你应该做的是调用rs.next() - 如果你的查询没有返回任何行,它将返回false。
答案 2 :(得分:3)
实际上,我认为另一种方法可以做到这一点:
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() 返回强>
希望有所帮助。
答案 3 :(得分:1)
在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和第一个单元格以获取记录数。用于存储结果的对象数组[发票]仅被声明一次,同时获得口渴结果。
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端对记录进行计数是不是很好?
答案 4 :(得分:0)
您可以使用此代码执行您要查找的内容:
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");
答案 5 :(得分:0)
如前所述,getFetchSize不能获取结果数。
您可以执行以下操作。 初始化整数并递增。.
int count = 0
while(rs.next()) {
count++;
}