[JDBC] deleteRow()

deleteRow() [JDBC] - Java - Programmation

Marsh Posté le 07-01-2005 à 16:04:43    

Je voudrais supprimer une ligne dans la table d'une BD.
Cette table est représentée dans une jTable.
Je selectionne la ligne.
Avec un resultSet.absolute(numLigne) je me place au bon endroit.
resultSet.deleteRow() qui supprime la ligne courante.
 
Seulement, erreur a l'execution, il me dit que l'ensemble resultat est en read-only.  Pourtant, connection jdbc n'est pas en read only. et le resultset non plus, du moins je pense !
 
 

Code :
  1. try {
  2.             connect.setReadOnly(false);
  3.             Statement statement = null;           
  4.             statement = connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  5.             ResultSet results = statement.executeQuery(cmd);                       
  6.             results.absolute(numRow);
  7.             results.deleteRow();         
  8.         }
  9.          catch (Exception e) {
  10.             e.printStackTrace();
  11.         }

Reply

Marsh Posté le 07-01-2005 à 16:04:43   

Reply

Marsh Posté le 07-01-2005 à 16:13:16    

Quelle base et quels drivers ? Certain ne supportent pas les resultset updatable.

Reply

Marsh Posté le 07-01-2005 à 16:18:50    

base: oracle 9i
drivers: ojdbc14.jar, JDBC 3.0
 
j'ai plutot vu que les resultset updatable sont relatif a la version du JDBC, a partir de la 2.0, donc j'ai la 3.0 ... donc normalement ...
 
l'erreur, a l'execution:
 
java.sql.SQLException: OpÚration non valide sur un ensemble de rÚsultats de type read-only : deleteRow


Message édité par tomsawyer121 le 07-01-2005 à 16:19:13
Reply

Marsh Posté le 07-01-2005 à 16:24:30    

oui :)
Mais y a certaines versions de drivers qui n'implantent pas toutes les nouveautés, et les ResultSet updatables en font souvent partie. Enfin les drivers Oracle doivent tout supporter je pense.
Tu es sûr de ton numRow ?

Reply

Marsh Posté le 07-01-2005 à 16:29:14    

Code :
  1. public void deleteResults(String cmd, int numRow) throws java.rmi.RemoteException {
  2.         try {
  3.             connect.setReadOnly(false);
  4.             Statement statement = null;           
  5.             statement = connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
  6.             ResultSet results = statement.executeQuery(cmd);                       
  7.             results.absolute(numRow);
  8.             results.deleteRow();         
  9.         }
  10.          catch (Exception e) {
  11.             e.printStackTrace();
  12.         }
  13.     }


 
 
oui je suis sur ... mais meme, l'erreur de vient pas de la ...
c'est vraiment embetant

Reply

Marsh Posté le 07-01-2005 à 17:35:45    

Personne ? lol
sinon on pourrait créer soi-même la requete "delete from ma_table where ca_et_ca = cela and ..."
Mais bon ... c'est un traitement tres lourd car il faudrait connaitre le type de chaque variable...

Reply

Marsh Posté le 07-01-2005 à 18:28:05    

Mais jcomprends pas vraiment comment ça marche là :??
Comment le numRow peut il être différent de 1 ?

Reply

Marsh Posté le 07-01-2005 à 21:30:03    

Glod 2 a écrit :

Mais jcomprends pas vraiment comment ça marche là :??
Comment le numRow peut il être différent de 1 ?


 
parce que numRow= le num de ligne courante dans ma jTable,
je travaille avec RMI et JDBC, acces a une base de donnée a distance donc.
quand je click sur le bouton delete, (j'ai donc selectionner une ligne dans ma jTable qui correspond a un "select * from matable" auparavant) il connai le num de ligne ! que je passe a ma méthode deleteResult qui se trouve sur le serveur, enfin ca c'est du detail !

Reply

Marsh Posté le 10-01-2005 à 12:54:17    

Ce qui colle pas dans le code c'est que la commande cmd est "SELECT * FROM EMP" par exemple si on met "SELECT Empno,Ename from emp" alors on peut faire le deleteRow()!!
 
 Etrange : donc en fait si on fait un "select all"  
 
--> le ResultSet passe en read-only qqu'un c pourquoi et comment contourner la chose ?
 
Merci


Message édité par tomsawyer121 le 10-01-2005 à 13:46:56
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed