J'essaie d'obtenir le nombre de lignes d'un résultat défini par:
rs.last();
int row_count = rs.getRow();
mais im obtenir une erreur Invalid operation for forward only resultset : last
. L'ensemble de résultats extrait ses données d'une base de données Oracle 10g.
Voici comment j'ai configuré ma connexion:
Class.forName("Oracle.jdbc.driver.OracleDriver");
String connectionString = "jdbc:Oracle:thin:@" + Oracle_ip_address + ":" + Oracle_db_port + ":" + Oracle_db_sid;
Connection conn = DriverManager.getConnection(connectionString, Oracle_db_username, Oracle_db_password);
ResultSet.last()
et les autres opérations de requête "index absolu" ne sont disponibles que lorsque le jeu de résultats est scrollable ; sinon, vous ne pouvez parcourir qu'un par un les ensembles forward-only result.
L'exemple suivant (from the javadocs ) montre comment créer une variable ResultSet
à défilement.
Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY
);
ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
N'oubliez pas que l'utilisation de requêtes à défilement a des conséquences sur les performances. Si l'objectif de cette ResultSet
particulière est uniquement de saisir sa dernière valeur, pensez à affiner votre requête pour ne renvoyer que ce résultat.
PreparedStatement ps = conn.prepareStatement ("SELECT * FROM
EMPLOYEE_TABLE WHERE LASTNAME = ?" ,
ResultSet.TYPE_SCROLL_INSENSITIVE ,
ResultSet.CONCUR_UPDATABLE ,
ResultSet.HOLD_CURSOR_OVER_COMMIT) ;
Pour les instructions préparées, vous devez spécifier au minimum le type et le mode d'accès simultané pour que last()
et isLast()
fonctionnent.
Merci à cheeken (2 posts ci-dessus), mais en Java 1.8, la fonction createStatement () nécessite désormais 2 paramètres
exemple:
stmt
= conx.createStatement
(ResultSet.TYPE_SCROLL_INSENSITIVE
,ResultSet.CONCUR_READ_ONLY
);