2012-10-27 13 views
8

Próbowałem różnych sposobów, aby uzyskać liczbę wierszy JDBC Javy, orzech nie wydawał się dać prawidłowy wynik. Czy coś jest nie tak, co robię?Prawidłowy sposób na znalezienie wierszy w JDBC Java JDBC

Mimo że tabela klienta jest pusta, a ja powinienem otrzymać rząd wierszy jako 0, nie rozumiem, dlaczego otrzymuję niezerową wartość wiersza.

Metoda 1 -

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

Metoda 2 -

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

Powinieneś wykonać instrukcję 'COUNT':' String query = "SELECT COUNT (*) FROM customer WHERE username =?"; stmt.setString (1, nazwa użytkownika); rs = stmt.executeQuery (zapytanie); ' –

+3

Metoda 1 pobiera liczbę kolumn - dlaczego uważasz, że to może zadziałać? – Mark

Odpowiedz

13

Zobacz ten fragment kodu:

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

Podczas pracy z JDBC, który nie obsługuje TYPE_FORWARD_ONLY korzystania ta metoda, aby uzyskać 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)."); 

Można uzyskać liczbę wierszy za pomocą powyższej metody.

Dzięki ..

-1

jak nazwa metody określa metaData.getColumnCount() zwróci całkowitą liczbę kolumn w wyniku wymienionych ale nie żaden z wierszy (liczyć) ogółem.

+0

Powinieneś również podać rozwiązanie pytania, tj. Której funkcji można użyć do uzyskania liczby wierszy. – mynawaz

+0

Powiedziałbym, że nie można pobrać wartości "get count count" z metaData, ponieważ nie jest to metadane, ale zależy od "prawdziwych" danych. – Krischu

2

ten sposób mogę użyć, aby uzyskać liczbę wierszy w Javie:

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

Mam nadzieję, że to pomoże.

Pozdrawiam.

+0

Dlaczego robisz rs.last() i rs.beforeFirst()? –