7

我的getFetchSize()功能有问题。

我只需要知道 SQL 查询是否返回零行。

我试过这个简单的说法:

if (rs.getFetchSize()==0)
    System.out.println("HEADLINE");

wherersResultSet类型。上面的代码似乎不起作用。它总是打印消息是否rs为空。

我检查了 SQL 查询本身,当存在行时它正确返回了非空结果。

关于如何确定查询是否返回 0 行的任何想法?我用谷歌搜索并找不到任何答案。

4

6 回答 6

24

ResultSet.getFetchSize()不返回结果数!从这里

标准 JDBC 还允许您指定查询的每个数据库往返获取的行数,这个数字称为获取大小

您可以遍历结果集,如果没有任何条目,则可以确定没有结果。为什么你不能立即得到结果大小?因为数据库正在向您返回一个指向其结果的指针,并且它依赖于您对其进行迭代(每行返回服务器)。

于 2013-01-11T10:34:59.430 回答
4

提取大小是每次往返中应从数据库中检索的行数。它与返回的行数无关。

你应该做的是调用 rs.next() - 如果你的查询没有返回任何行,它将返回 false。

于 2013-01-11T10:37:54.890 回答
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()向后移动。

希望有帮助。

于 2015-12-02T23:01:28.597 回答
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 和第一个单元格以获取记录数。用于存储结果的对象数组 [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 端不是很好吗?

于 2017-02-10T09:33:55.023 回答
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");
于 2014-01-16T13:35:06.790 回答
0

如前所述,getFetchSize 没有得到结果的数量..

你可以做这样的事情。初始化一个整数并增加它..

 int count = 0
 while(rs.next()) {
    count++;
 }
于 2020-10-29T03:44:32.093 回答