Comment puis-je trouver que le ResultSet
, que j'ai obtenu en interrogeant une base de données, est vide ou non?
Immédiatement après votre instruction execute, vous pouvez avoir une instruction if. Par exemple
ResultSet rs = statement.execute();
if (!rs.next()){
//ResultSet is empty
}
Certainement, cela donne une bonne solution,
ResultSet rs = stmt.execute("SQL QUERY");
// With the above statement you will not have a null ResultSet 'rs'.
// In case, if any exception occurs then next line of code won't execute.
// So, no problem if I won't check rs as null.
if (rs.next()) {
do {
// Logic to retrieve the data from the resultset.
// eg: rs.getString("abc");
} while(rs.next());
} else {
// No data
}
Pour ce faire, utilisez rs.next()
:
while (rs.next())
{
...
}
Si l'ensemble de résultats est vide, le code à l'intérieur de la boucle ne s'exécutera pas.
Si vous utilisez rs.next (), vous déplacerez le curseur, alors vous devriez déplacer first () pourquoi ne pas vérifier directement avec first ()?
public void fetchData(ResultSet res, JTable table) throws SQLException{
ResultSetMetaData metaData = res.getMetaData();
int fieldsCount = metaData.getColumnCount();
for (int i = 1; i <= fieldsCount; i++)
((DefaultTableModel) table.getModel()).addColumn(metaData.getColumnLabel(i));
if (!res.first())
JOptionPane.showMessageDialog(rootPane, "no data!");
else
do {
Vector<Object> v = new Vector<Object>();
for (int i = 1; i <= fieldsCount; i++)
v.addElement(res.getObject(i));
((DefaultTableModel) table.getModel()).addRow(v);
} while (res.next());
res.close();
}
if (rs == null ||! rs.first ()) { //empty } else { // not empty }
Notez qu'après cet appel de méthode, si l'ensemble de résultats n'est pas vide, il se trouve au début.
Calcule la taille de Java.sql.ResultSet:
int size = 0;
if (rs != null) {
rs.beforeFirst();
rs.last();
size = rs.getRow();
}
( Source )