IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Insertion dans la base de donnée


Sujet :

JDBC Java

  1. #1
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut Insertion dans la base de donnée


    je travail avec jdbc pour faire la connexion aux base de données, oracle 10g
    pour une simple raison je veux utilisé une methode qui permet d'inserer les champs dans la base de donnée et vue la non resistance aux changement dans l'ordre des champs dans la base de donnée (avec Sql INSERT INTO .....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO tab VALUES ('" + admGroup + "','F','" + Item1 + "','" + Item2 + "','" + Item3 + "' )
    )
    j'ai commencé à utilisé une autre façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
           PreparedStatement ps =null;
           ResultSet rs = null;
           try {
              ps = con.prepareStatement("SELECT * FROM tab",ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
               rs = ps.executeQuery();
               rs.moveToInsertRow();
               rs.updateString("groupe",admGroup);
               rs.updateString("type_secure","F");
               rs.updateString("item1",Item1);
               rs.updateString("item2", Item2 == null ? null : Item2);
               rs.updateString("item3", Item3 == null ? null : Item3);
               rs.insertRow();
           } catch( Exception e ){
               System.out.println(e.toString() + " ***** " + e.getMessage());
           }
    mais toujours il passe par catch().

    Merci pour l'aide?

  2. #2
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 137
    Points : 88
    Points
    88
    Par défaut
    tchize_ va vous donnez une bonne réponse

  3. #3
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    voila le resultat de l'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.sql.SQLException: Opération non valide sur un ensemble de résultats de type read-only : moveToInsertRow
    voila meme un lien utile http://java.developpez.com/faq/jdbc/...inserSuppLigne

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pour insérer en nommant les colonnes, en sql, c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into table (nom,prenom,age) values ('centenaire','marie',100);

    Sinon, je te recommande fortement les preparedstatements

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       PreparedStatement pstmt = con.prepareStatement("insert into table (nom,prenom,age) values (?,?,?)");
       pstmt.setString(1, name);
       pstmt.setString(2, firstname);
       pstmt.setInt(3,age);
       int result = pstmt.executeUpdate();

  5. #5
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    +1 pour les PreparedStatement.

    Si tu renseignes toutes les colonnes et dans l'ordre, tu n'est pas obligé de préciser le nom des colonnes dans les ordre INSERT ...

    As tu essayé tout de même de faire comme dans la FAQ est d'utiliser ResultSet.TYPE_SCROLL_SENSITIVE et non ResultSet.TYPE_SCROLL_INSENSITIVE ?
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  6. #6
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    salut
    voila j'ai changé avec le code suivant mais toujours l'exception est générée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
           PreparedStatement ps =null;
           ResultSet rs = null;
           try {
               ps = con.prepareStatement("SELECT * FROM tp.secure",ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
               rs = ps.executeQuery();
               rs.moveToInsertRow();
               rs.updateString("groupe",admGroup);
               rs.updateString("type_secure","F");
               rs.updateString("item1",Item1);
               rs.updateString("item2", Item2 == null ? null : Item2);
               rs.updateString("item3", Item3 == null ? null : Item3);
               rs.insertRow();
           } catch( Exception e ){
               System.out.println(e.toString() + " ***** " + e.getMessage());
               e.printStackTrace();
           }
    mais la meme exception!!!!!
    Merci pour l'aide

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pourquoi tu te casse le c* à faire un select plutot qu'un insert???

  8. #8
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    je ne veux pas respecter l'ordre des champs c'est pourkoi j'ai utilisé cette methode pour ne pas passer par insert into......

    et si on consulte le lien suivant on trouve la meme chose? http://java.developpez.com/faq/jdbc/...inserSuppLigne

    Merci pour votre aide

  9. #9
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par opensource Voir le message
    je veux utilisé une methode qui permet d'inserer les champs dans la base de donnée et vue la non resistance aux changement dans l'ordre des champs dans la base de donnée
    Citation Envoyé par opensource
    je ne veux pas respecter l'ordre des champs c'est pourkoi j'ai utilisé cette methode pour ne pas passer par insert into......
    Mais au contraire INSERT INTO te permets de mettre les champs que tu veux dans ton SQL ... Il n'y a pas d'histoire d'ordre ...

    tchize_ t'as même donné la syntaxe à utiliser :


    Citation Envoyé par tchize_
    pour insérer en nommant les colonnes, en sql, c'est:
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into table (nom,prenom,age) values ('centenaire','marie',100);

    Et pendant que tu y es utilise un PreparedStatement ... là encore on t'as déjà donné la syntaxe ...



    [EDIT] Au fait, j'ai un doute mais tu veux faire un INSERT ou un UPDATE ?
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  10. #10
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    mais la methode que j'ai utilisé est correcte, mais la question qui se pose pourkoi elle genere une exception!!!!!!
    c'est deja utilisé dans d'autres exemple

    voila l'exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
        private boolean insererTiers() {
            ResultSet rs;
            PreparedStatement ps = null;
            boolean valeurRetour = false;
            try {
                ps = con.prepareStatement("Select * from Tiers", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
                rs = ps.executeQuery();
                rs.moveToInsertRow();
                prepareResultSet(rs);
                rs.insertRow();
                valeurRetour = true;
            } catch (SQLException e) {
                mDebug.afficheMessage(100, e.getMessage());
                valeurRetour = false;
            }
            finally{
                mDBaccess.ClosePrepareStatement(ps);
                return valeurRetour;
            }
        }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        private void prepareResultSet(ResultSet rs){
            try {
                //Combobox
                rs.updateString("periode_vl", PeriodeVl);
                rs.updateString("type_pmv", TypePmv);
                rs.updateString("methode_frais_gestion", MethodeFraisGestion);
                rs.updateString("base_frais_gestion", BaseFraisGestion);
     
              //  if ( Pattern.matches(strings,mCode.getText().trim())) {
     
                rs.updateString("code",  mCode.getText());
                rs.updateString("description",          (mDescription.getText()));
                rs.updateString("flag_actif",           mFlagActif.isSelected() ? "O" : "N");
                rs.updateString("flag_pp",              mFlagPp.isSelected() ? "O" : "N");
            } catch(Exception ex){
                System.out.println(ex.getMessage());
                ex.printStackTrace();
            }
        }
    et sa marche tres bien

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par opensource Voir le message
    salut
    voila j'ai changé avec le code suivant mais toujours l'exception est générée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
           PreparedStatement ps =null;
           ResultSet rs = null;
           try {
               ps = con.prepareStatement("SELECT * FROM tp.secure",ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
               rs = ps.executeQuery();
               rs.moveToInsertRow();
               rs.updateString("groupe",admGroup);
               rs.updateString("type_secure","F");
               rs.updateString("item1",Item1);
               rs.updateString("item2", Item2 == null ? null : Item2);
               rs.updateString("item3", Item3 == null ? null : Item3);
               rs.insertRow();
           } catch( Exception e ){
               System.out.println(e.toString() + " ***** " + e.getMessage());
               e.printStackTrace();
           }
    mais la meme exception!!!!!
    Merci pour l'aide
    Peux-tu regarder comment est obtenue ta connexion ?
    Il se pourrait que tu es un "connection.setReadOnly(true)" qui traine, à moins que tu ne récupères la connexion d'un pool, auquel cas, il faut regarder les paramètres (readonly)

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    l'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    java.sql.SQLException: Opération non valide sur un ensemble de résultats de type read-only : moveToInsertRow  Opération non valide sur un ensemble de résultats de type read-only : moveToInsertRow
    java.sql.SQLException: Opération non valide sur un ensemble de résultats de type read-only : moveToInsertRow
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:138)
    le code est le voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
           PreparedStatement ps =null;
           ResultSet rs = null;
           try {
     
               ps = con.prepareStatement("SELECT * FROM tp.secure",ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
             //  ps = con.prepareStatement("INSERT INTO tp.secure (groupe,type_secure,item1,item2,item3) VALUES(?,?,?,?,?)",ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
              con.setReadOnly(false);
               rs = ps.executeQuery();
     
               rs.moveToInsertRow();
               rs.updateString("groupe",admGroup);
               rs.updateString("type_secure","F");
               rs.updateString("item1",Item1);
               rs.updateString("item2", Item2 == null ? null : Item2);
               rs.updateString("item3", Item3 == null ? null : Item3);
               rs.insertRow();
           } catch( Exception e ){
               System.out.println(e.toString() + " ****** " + e.getMessage());
               e.printStackTrace();
           }

  13. #13
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Comme te l'a dis OButterlin il faudrait regarder comment tu récupère ton attribut con. Il est possible que tu es un "con.setReadOnly(true)" qui traine.
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  14. #14
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    voila j'ai récupéré l'attribut con, elle est a false
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
           PreparedStatement ps =null;
           ResultSet rs = null;
           try {
               JOptionPane.showMessageDialog(this, con.isReadOnly()); 
               ps = con.prepareStatement("SELECT * FROM tp.secure",ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
             //  ps = con.prepareStatement("INSERT INTO tp.secure (groupe,type_secure,item1,item2,item3) VALUES(?,?,?,?,?)",ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
              con.setReadOnly(false);
               rs = ps.executeQuery();
              
               rs.moveToInsertRow();
               rs.updateString("groupe",admGroup);
               rs.updateString("type_secure","F");
               rs.updateString("item1",Item1);
               rs.updateString("item2", Item2 == null ? null : Item2);
               rs.updateString("item3", Item3 == null ? null : Item3);
               rs.insertRow();
           } catch( Exception e ){
               System.out.println(e.toString() + " Perenity Software " + e.getMessage());
               e.printStackTrace();
           }
    l'attribut est = false

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    Désolé de ressortir ce vieux sujet mais c'est juste pour dire que j'ai eu le même problème et que j'ai trouvé la solution.
    En fait, cette exception est générée lorsque le preparredStatement contient un SELECT *.

    Remplacez le * par les noms de colonnes dans votre table et ça fonctionnera.
    Il semble que le ResultSet ne supporte pas trop cette syntaxe malheureusement.

    J'espère que cette réponse, bien que tardive, saura aider quelqu'un un jour

  16. #16
    Membre régulier Avatar de Michel38
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2005
    Messages : 218
    Points : 113
    Points
    113
    Par défaut
    Bonjour à tous,

    Et j'en rajoute une couche. :-) près de 10 ans après.

    C'est pareil avec un Statement.

    Dans des conditions un peu similaires, quand je veux insérer une ligne, j'ai eu le même problème.

    Quand dans ma requête, je mets SELECT * FROM nom_table, j'ai l'erreur suivante :
    Opération non valide sur un ensemble de résultats de type read-only: moveToInsertRow
    Et quand je mets ma requête avec le nom de tous les champs, plus aucun problème, l'insertion se passe très bien.

    Très bizarre

    En espérant que ça puisse dépanner.

    Michel

Discussions similaires

  1. Parcours d'un fichier et insertion dans une base de données !
    Par condor_01 dans le forum Général Java
    Réponses: 2
    Dernier message: 24/04/2008, 09h24
  2. [paradox7] Problème d'insertion dans la base de données
    Par mouna201 dans le forum Bases de données
    Réponses: 4
    Dernier message: 01/02/2006, 09h47
  3. problème d'insertion dans une base de données
    Par belmansour tidjani dans le forum JDBC
    Réponses: 7
    Dernier message: 18/01/2006, 22h13
  4. [Hibernate] problème d'insertion dans la base de données
    Par Willy7901 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 18/08/2005, 13h19
  5. Probleme d'insertion dans la base de données
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 11/06/2004, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo