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
そして今、すべてのデータを処理する前に、最初の列と最初のセルのみを読み取ってレコード数を取得できます。結果を格納するオブジェクト配列 [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 側にレコードのカウントを入れるのはよくないですか?