2012-10-27 22 views
8

我嘗試了不同的方法來獲取java JDBC中的行數,但沒有一個螺母似乎給出了正確的結果。我在做什麼不對?在Java中查找rowcount的正確方法JDBC

即使客戶表是空的,我應該得到rowcount爲0,我不明白爲什麼我得到一個非零rowcount值。

方法1 -

query = "SELECT * FROM customer WHERE username ='"+username+"'"; 
rs = stmt.executeQuery(query); 
ResultSetMetaData metaData = rs.getMetaData(); 
rowcount = metaData.getColumnCount(); 

方法2 -

query = "SELECT * FROM customer WHERE username ='"+username+"'"; 
rs = stmt.executeQuery(query); 
rowcount = rs.last() ? rs.getRow() : 0; 
+4

你應該執行'COUNT'語句:'String query =「SELECT COUNT(*)FROM customer WHERE username =?」; stmt.setString(1,username); rs = stmt.executeQuery(query);' –

+3

方法1獲取列數 - 爲什麼你認爲這可能工作? – Mark

回答

13

看到這個代碼片段:

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(); 
     } 
    } 
} 
2

當您使用不支持TYPE_FORWARD_ONLY使用JDBC工作這個方法獲取rowcount。

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)."); 

您可以使用上述方法獲取行數。

謝謝..

-1

同方法名稱指定metaData.getColumnCount()將返回設置結果列的總數而不是總沒有行(計數)的。

+0

你也應該提供一個問題的解決方案,即哪個函數可以用來獲得行數 – mynawaz

+0

我會說「獲取行數」不能從元數據檢索,因爲它不是元數據,但依賴於「真實」數據。 – Krischu

2

這是我用得到的行數在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."; 

我希望這可以幫助您。

問候。

+0

你爲什麼要做rs.last()和rs.beforeFirst()? –