在 Java JDBC 中查找行数的正确方法
Posted
技术标签:
【中文标题】在 Java JDBC 中查找行数的正确方法【英文标题】:Correct way to find rowcount in Java JDBC 【发布时间】:2012-10-17 16:07:30 【问题描述】:我尝试了不同的方法来获取 java JDBC 中的行数,但似乎没有一个给出正确的结果。我做错了什么吗?
即使客户表是空的并且我应该将行计数设为 0,但我不明白为什么我会得到一个非零行计数值。
方法一——
query = "SELECT * FROM customer WHERE username ='"+username+"'";
rs = stmt.executeQuery(query);
ResultSetMetaData metaData = rs.getMetaData();
rowcount = metaData.getColumnCount();
方法二——
query = "SELECT * FROM customer WHERE username ='"+username+"'";
rs = stmt.executeQuery(query);
rowcount = rs.last() ? rs.getRow() : 0;
【问题讨论】:
您应该执行COUNT
语句:String query = "SELECT COUNT(*) FROM customer WHERE username =?"; stmt.setString(1, username); rs = stmt.executeQuery(query);
方法 1 获取列数 - 为什么您认为这可能有效?
附带问题 - 如果您要使用原始非聚合查询中的数据,最好进行第二次查询以获取计数,还是循环并计数更好,或者跳到最后一行并检查 getRow()?似乎第二个查询来获得计数更好,每个 - ***.com/a/192104/620054
【参考方案1】:
查看这段代码:
import java.io.*;
import java.sql.*;
public class CountRows
public static void main(String[] args)
System.out.println("Count number of rows in a specific table!");
Connection con = null;
int count = 0;
try
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctutorial","root","root");
try
Statement st = con.createStatement();
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter table name:");
String table = bf.readLine();
ResultSet res = st.executeQuery("SELECT COUNT(*) FROM "+table);
while (res.next())
count = res.getInt(1);
System.out.println("Number of row:"+count);
catch (SQLException s)
System.out.println("SQL statement is not executed!");
catch (Exception e)
e.printStackTrace();
【讨论】:
这并不能真正回答问题。问题是关于他的查询(可能是任何查询)返回多少行,而不是如何查询行数。此外,此答案使用 SQL,而不是 Java。【参考方案2】:当您使用不支持TYPE_FORWARD_ONLY
的 JDBC 时,请使用此方法获取行数。
Statement s = cd.createStatement();
ResultSet r = s.executeQuery("SELECT COUNT(*) AS rowcount FROM TableName");
r.next();
int count = r.getInt("rowcount");
r.close();
System.out.println("MyTable has " + count + " row(s).");
您可以使用上述方法获取行数。
谢谢..
【讨论】:
【参考方案3】:由于方法名称指定 metaData.getColumnCount()
将返回结果集中的总列数,但不返回总行数(计数)。
【讨论】:
您还应该提供问题的解决方案,即可以使用哪个函数来获取行数 我想说“获取行数”无法从元数据中检索,因为它不是元数据,而是依赖于“真实”数据。【参考方案4】:这是我用来在 Java 中获取行数的方式:
String query = "SELECT * FROM yourtable";
Statement st = sql.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY );
ResultSet = st.executeQuery(query);
int rows = 0
rs.last();
rows = rs.getRow();
rs.beforeFirst();
System.out.println("Your query have " + rows + " rows.";
希望对你有所帮助。
问候。
【讨论】:
你为什么要做 rs.last() 和 rs.beforeFirst()? @Oliver rs.last() 会将结果集的光标移动到最后一个结果/行。 rs.beforeFirst() 会将其移回开始之前(因此任何执行 rs.next() 的进一步代码都将从开头而不是结尾开始) 你可能忘记声明 rs 问题是关于“正确方式”而不是基于意见的方式......【参考方案5】:在 android 中,没有结果会返回错误。所以在 while(resultset.next())
中增加计数之前检查这种情况if(resultset!=null)
//proceed with incrementing row count function
else
// No resultset found
【讨论】:
【参考方案6】:只需迭代和计数
ResultSet result = sta.executeQuery("SELECT * from A3");
int k=0;
while(result.next())
k++;
System.out.print(k); //k is the no of row
【讨论】:
以上是关于在 Java JDBC 中查找行数的正确方法的主要内容,如果未能解决你的问题,请参考以下文章
java指定文件夹下查找固定的字符串并将其所在的文件名,行数,该行全部内容写入txt文件中(具体实例)
java中有没有 读取大文本文件(500MB以上),指定行数的某一行数据的类库? 有的话请给出教程,谢谢~