Правильный способ найти rowcount в Java JDBC
Я пробовал разные способы получить количество строк в java JDBC, nut ни один не давал правильного результата. Что я делаю не так ?
хотя таблица customer пуста, и я должен получать 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;
5 ответов
посмотреть этот фрагмент кода:
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();
}
}
}
при работе с JDBC, который не поддерживает TYPE_FORWARD_ONLY
используйте этот метод для получения 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).");
Вы можете получить количество строк, используя метод, описанный выше.
спасибо..
таким образом я использую, чтобы получить количество строк в 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.";
Я надеюсь, что это поможет вам.
С уважением.
в Android отсутствие результатов возвращает ошибку. Поэтому проверьте этот случай, прежде чем увеличивать количество в while(resultset.next ())
if(resultset!=null)
{
//proceed with incrementing row count function
}
else
{
// No resultset found
}
Как указывает имя метода metaData.getColumnCount()
вернет общее количество столбцов в результирующем наборе, но не общее количество строк (количество).