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 :

NetBeans ne m'affiche pas le contenu de ma table : problème ODBC


Sujet :

JDBC Java

  1. #41
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 340
    Points : 31
    Points
    31
    Par défaut
    Oulala, je vais faire un test en local car c'est de la Prod là.
    Je te tiens au courant

  2. #42
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 791
    Points
    4 791
    Par défaut
    Ben j'espère que tu n'étais pas en train de faire des essais sur la base de prod !!!

    Parce qu'une base Access est un simple fichier de données ... sans protection.
    Ce n'est pas comme les bases MySQL, Sql Server etc ... auxquelles on n'a accès qu'en passant par le serveur de base de données qui vérifie l'intégrité des commandes.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #43
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 340
    Points : 31
    Points
    31
    Par défaut
    On progresse, le compactage nous a permis de retirer les Warning du début :
    WARNING:Error in the metadata of the table ChargeAffaire: table's row count in the metadata is 51 but 50 records have been found and loaded by UCanAccess. All will work fine, but it's better to repair your database.
    WARNING:Error in the metadata of the table PlageHoraire: table's row count in the metadata is 0 but 5 records have been found and loaded by UCanAccess. All will work fine, but it's better to repair your database.
    WARNING:Error in the metadata of the table Societe: table's row count in the metadata is 137 but 138 records have been found and loaded by UCanAccess. All will work fine, but it's better to repair your database.

    Par contre il a l'air de faire une erreur.
    Je m'explique, il m'affiche "erreur de connexion à la base de donnée", nous sommes donc dans le 2ème catch (SQLException ex):

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    java.sql.SQLClientInfoException
            at org.hsqldb.jdbc.JDBCConnection.setClientInfo(Unknown Source)
            at net.ucanaccess.jdbc.UcanaccessConnection.setClientInfo(UcanaccessConnection.java:684)
            at coactivite2.Connexion.<init>(Connexion.java:55)
            at coactivite2.Fenetre.<init>(Fenetre.java:39)
            at coactivite2.CoActivite2App.startup(CoActivite2App.java:19)
            at org.jdesktop.application.Application$1.run(Application.java:171)
            at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
            at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
            at java.awt.EventQueue.access$000(EventQueue.java:84)
            at java.awt.EventQueue$1.run(EventQueue.java:602)
            at java.awt.EventQueue$1.run(EventQueue.java:600)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:611)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    Caused by: java.sql.SQLFeatureNotSupportedException: feature not supported
            at org.hsqldb.jdbc.JDBCUtil.notSupported(Unknown Source)
            ... 20 more
    Erreur de connexion à la base de données!
    java.sql.SQLClientInfoException
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
            at coactivite2.Zone.AffichageZone(Zone.java:179)
            at coactivite2.Fenetre$EcouteurFenetre.windowActivated(Fenetre.java:7959)
            at java.awt.Window.processWindowEvent(Window.java:1877)
            at javax.swing.JFrame.processWindowEvent(JFrame.java:274)
            at java.awt.Window.processEvent(Window.java:1823)
            at java.awt.Component.dispatchEventImpl(Component.java:4651)
            at java.awt.Container.dispatchEventImpl(Container.java:2099)
            at java.awt.Window.dispatchEventImpl(Window.java:2478)
            at java.awt.Component.dispatchEvent(Component.java:4481)
            at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850)
            at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:910)
            at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:409)
            at java.awt.Component.dispatchEventImpl(Component.java:4523)
            at java.awt.Container.dispatchEventImpl(Container.java:2099)
            at java.awt.Window.dispatchEventImpl(Window.java:2478)
            at java.awt.Component.dispatchEvent(Component.java:4481)
            at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
            at java.awt.EventQueue.access$000(EventQueue.java:84)
            at java.awt.EventQueue$1.run(EventQueue.java:602)
            at java.awt.EventQueue$1.run(EventQueue.java:600)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
            at java.awt.EventQueue$2.run(EventQueue.java:616)
            at java.awt.EventQueue$2.run(EventQueue.java:614)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
            at java.awt.SentEvent.dispatch(SentEvent.java:55)
            at java.awt.DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent.dispatch(DefaultKeyboardFocusManager.java:183)
            at java.awt.DefaultKeyboardFocusManager.sendMessage(DefaultKeyboardFocusManager.java:210)
            at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:286)
            at java.awt.Component.dispatchEventImpl(Component.java:4523)
            at java.awt.Container.dispatchEventImpl(Container.java:2099)
            at java.awt.Window.dispatchEventImpl(Window.java:2478)
            at java.awt.Component.dispatchEvent(Component.java:4481)
            at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
            at java.awt.EventQueue.access$000(EventQueue.java:84)
            at java.awt.EventQueue$1.run(EventQueue.java:602)
            at java.awt.EventQueue$1.run(EventQueue.java:600)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
            at java.awt.EventQueue$2.run(EventQueue.java:616)
            at java.awt.EventQueue$2.run(EventQueue.java:614)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
            at java.awt.SequencedEvent.dispatch(SequencedEvent.java:101)
            at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
            at java.awt.EventQueue.access$000(EventQueue.java:84)
            at java.awt.EventQueue$1.run(EventQueue.java:602)
            at java.awt.EventQueue$1.run(EventQueue.java:600)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
            at java.awt.EventQueue$2.run(EventQueue.java:616)
            at java.awt.EventQueue$2.run(EventQueue.java:614)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
            at coactivite2.ChargeAffaire.isAdmin(ChargeAffaire.java:312)
            at coactivite2.Fenetre$EcouteurFenetre.windowOpened(Fenetre.java:7900)

  4. #44
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 340
    Points : 31
    Points
    31
    Par défaut
    Sinon, pour nos essaies nous ne faisions que d'essayer une connexion, aucune modification donc pas de soucis. De plus j'ai fait un backup avant

  5. #45
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 791
    Points
    4 791
    Par défaut
    Caused by: java.sql.SQLFeatureNotSupportedException: feature not supported
    at org.hsqldb.jdbc.JDBCUtil.notSupported(Unknown Source)
    Le message indique une sorte de mélange entre le driver ucanaccess et un autre driver de base de données : hsqldb (qui est un autre SGBD très différent d'Access)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  6. #46
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 791
    Points
    4 791
    Par défaut
    Bon ben on n'est pas au bout là

    Après avoir regardé vite fait la doc de ucanaccess,
    j'ai vu qu'il utilise en interne une base hsqldb pour ses propres besoins.

    Il semble qu'il y ait un conflit avec la méthode setClientInfo
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #47
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 791
    Points
    4 791
    Par défaut
    Tu peux re-poster le code de la classe où ça plante ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  8. #48
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 178
    Points : 274
    Points
    274
    Par défaut
    Propose une vue project plutôt que FileSystem et quel est ton classpath, je pense que c'est là que le bât blesse

  9. #49
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 340
    Points : 31
    Points
    31
    Par défaut
    Code de class connexion :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    package coactivite2;
     
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.InputStreamReader;
    import java.sql.*;
     
    public class Connexion {
     
        public static Connection con;
        public static String query;
        public static Statement stmt;
        public static ResultSet res;
        public static ResultSetMetaData metaBase;
     
        public Connexion()
        {
            String url = null;
            try
            {
                String fichier = "path/connexion.xml";
                FileInputStream ips = new FileInputStream(fichier);
                InputStreamReader ipsr = new InputStreamReader(ips);
                BufferedReader br = new BufferedReader(ipsr);
                url = br.readLine();
                br.close();
            }
            catch (Exception e)
            {
                System.out.println(e.toString());
            }
     
            try
            {
                Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
                url = "path/xxx.mdb";
                String url2= "jdbc:ucanaccess://"+url;
                System.out.println(url2);
     
                con = DriverManager.getConnection(url2,"xxx","xxx");
     
                java.util.Properties prop = new java.util.Properties();
                prop.put("charSet", "ISO-8859-1");
                con.setClientInfo(prop);
     
                System.out.println("Connexion établie avec succès");
                stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            }
            catch (ClassNotFoundException ex) {
                ex.printStackTrace();
                //System.err.println("Base de données non trouvée!");
                System.err.println(ex);
            }
            catch (SQLException ex) {
                ex.printStackTrace();
                System.err.println("Erreur de connexion à la base de données!");
                System.err.println(ex);
            }
         }
     
        public static ResultSet rechercher(String query)
        {
            try
            {
                res=stmt.executeQuery(query);
                System.out.println("Element trouvé");
            }
            catch (SQLException ex)
            {
                System.err.println(ex);
            }
     
            return res;
         }
     
        public static void ajouter(String query)
        {
            try
            {
                stmt.executeUpdate(query);
                System.out.println("Element ajouté à la base");
            }
            catch (SQLException e)
            {
                System.err.println(e.getMessage());
            }
        }
     
        public static void modifier(String query)
        {
            try
            {
            stmt.executeUpdate(query);
            System.out.println("Element Modifié");
            }
            catch (SQLException ex)
            {
                System.err.println(ex);
            }
        }
     
        public static void supprimer(String query)
        {
            try
            {
            stmt.executeUpdate(query);
            System.out.println("Element suprimé");
            }
            catch (SQLException ex)
            {
                System.err.println(ex);
            }
        }
     
        public static void fermer()
        {
            try
            {
                res.close();
                System.out.println("Base de données Fermée");
            }
            catch (SQLException e)
            {
                System.out.println(e.getMessage());
     
            }       
        }
    }
    Je ne te suis pas ehsavoie, c'est quoi la vue project ?
    Et mon ClassPath c'est quoi et où ?

    Merci de ta contribution ehsavoie !

    FYI, le résultat :
    run:
    jdbc:ucanaccess://path/xxx.mdb
    java.sql.SQLClientInfoException
    at org.hsqldb.jdbc.JDBCConnection.setClientInfo(Unknown Source)
    at net.ucanaccess.jdbc.UcanaccessConnection.setClientInfo(UcanaccessConnection.java:684)
    at coactivite2.Connexion.<init>(Connexion.java:55)
    at coactivite2.Fenetre.<init>(Fenetre.java:39)
    at coactivite2.CoActivite2App.startup(CoActivite2App.java:19)
    at org.jdesktop.application.Application$1.run(Application.java:171)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
    at java.awt.EventQueue.access$000(EventQueue.java:84)
    at java.awt.EventQueue$1.run(EventQueue.java:602)
    at java.awt.EventQueue$1.run(EventQueue.java:600)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:611)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    Caused by: java.sql.SQLFeatureNotSupportedException: feature not supported
    at org.hsqldb.jdbc.JDBCUtil.notSupported(Unknown Source)
    ... 20 more
    Erreur de connexion à la base de données!
    java.sql.SQLClientInfoException
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at coactivite2.Zone.AffichageZone(Zone.java:179)
    at coactivite2.Fenetre$EcouteurFenetre.windowActivated(Fenetre.java:7959)
    at java.awt.Window.processWindowEvent(Window.java:1877)
    at javax.swing.JFrame.processWindowEvent(JFrame.java:274)
    at java.awt.Window.processEvent(Window.java:1823)
    at java.awt.Component.dispatchEventImpl(Component.java:4651)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850)
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:910)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:409)
    at java.awt.Component.dispatchEventImpl(Component.java:4523)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
    at java.awt.EventQueue.access$000(EventQueue.java:84)
    at java.awt.EventQueue$1.run(EventQueue.java:602)
    at java.awt.EventQueue$1.run(EventQueue.java:600)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:616)
    at java.awt.EventQueue$2.run(EventQueue.java:614)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
    at java.awt.SentEvent.dispatch(SentEvent.java:55)
    at java.awt.DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent.dispatch(DefaultKeyboardFocusManager.java:183)
    at java.awt.DefaultKeyboardFocusManager.sendMessage(DefaultKeyboardFocusManager.java:210)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:286)
    at java.awt.Component.dispatchEventImpl(Component.java:4523)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
    at java.awt.EventQueue.access$000(EventQueue.java:84)
    at java.awt.EventQueue$1.run(EventQueue.java:602)
    at java.awt.EventQueue$1.run(EventQueue.java:600)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:616)
    at java.awt.EventQueue$2.run(EventQueue.java:614)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
    at java.awt.SequencedEvent.dispatch(SequencedEvent.java:101)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
    at java.awt.EventQueue.access$000(EventQueue.java:84)
    at java.awt.EventQueue$1.run(EventQueue.java:602)
    at java.awt.EventQueue$1.run(EventQueue.java:600)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:616)
    at java.awt.EventQueue$2.run(EventQueue.java:614)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at coactivite2.ChargeAffaire.isAdmin(ChargeAffaire.java:312)
    at coactivite2.Fenetre$EcouteurFenetre.windowOpened(Fenetre.java:7900)
    at java.awt.Window.processWindowEvent(Window.java:1862)
    at javax.swing.JFrame.processWindowEvent(JFrame.java:274)
    at java.awt.Window.processEvent(Window.java:1823)
    at java.awt.Component.dispatchEventImpl(Component.java:4651)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
    at java.awt.EventQueue.access$000(EventQueue.java:84)
    at java.awt.EventQueue$1.run(EventQueue.java:602)
    at java.awt.EventQueue$1.run(EventQueue.java:600)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:616)
    at java.awt.EventQueue$2.run(EventQueue.java:614)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

  10. #50
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 791
    Points
    4 791
    Par défaut
    Citation Envoyé par ehsavoie Voir le message
    Propose une vue project plutôt que FileSystem et quel est ton classpath, je pense que c'est là que le bât blesse
    Je ne vois pas le rapport
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  11. #51
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 340
    Points : 31
    Points
    31
    Par défaut
    Bon je pense qu'on est dans une sacrée histoire d'incompatibilité

    Est ce que tout problème peut être résolu ? ^^

  12. #52
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 791
    Points
    4 791
    Par défaut
    Quand tu utilises la classe Connexion, tu l'initialises une fois
    et ensuite tu utilises les méthodes statiques pour accéder à la base.

    Concernant Access, je ne sais pas si c'est une bonne idée d'essayer d'économiser sur le code de cette façon.
    Les méthodes statiques sont dangereuses car elles ne libèrent pas les ressources utilisées.

    Essaye de refaire ta classe bdddetest bien propre avec le code ci-dessous
    pour qu'on soit sûr de l'endroit où se situe le problème :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    import java.sql.*;
     
    public class bdddetest {
        public static void main(String[] args) {
            try{
                System.out.println(System.getProperty("java.version"));
     
                Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
                System.out.println("UcanaccessDriver chargé avec succès");
     
                String url= "jdbc:ucanaccess://path/xxx.mdb";
                System.out.println(url);
     
                Connection con = DriverManager.getConnection(url,"xxx","xxx"); 
                System.out.println("Connexion établie avec succès");
     
                java.util.Properties prop = new java.util.Properties();
                prop.put("charSet", "ISO-8859-1");
                con.setClientInfo(prop); 
                System.out.println("charSet ajouté avec succès");
     
                Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
                System.out.println("Statement créé avec succès");
     
                String sql = "Select * From Playlist";
                ResultSet rs = stmt.executeQuery(sql);
                while(rs.next()){
                    System.out.println("\n"+rs.getString("Sr no")+rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t"+rs.getString(4));
                }
     
                rs.close();
                stmt.close();
                con.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }  
    }
    C'est un peu bourrin de mettre des System.out.println mais bon avec ça on vérifie l'endroit où ça plante ...
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  13. #53
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 340
    Points : 31
    Points
    31
    Par défaut
    Merci encore...

    Sur cette base, je n'ai pas de passe mais j'ai tout de même laisser ce code.

    Résultat :
    run:
    1.8.0_60
    UcanaccessDriver chargé avec succès
    jdbc:ucanaccess://C:/Users/Spiicky/Documents/NetBeansProjects/ConnexionBDD/Test.accdb
    Connexion établie avec succès
    java.sql.SQLClientInfoException
    at org.hsqldb.jdbc.JDBCConnection.setClientInfo(Unknown Source)
    at net.ucanaccess.jdbc.UcanaccessConnection.setClientInfo(UcanaccessConnection.java:684)
    at bdddetest.main(bdddetest.java:20)
    Caused by: java.sql.SQLFeatureNotSupportedException: feature not supported
    at org.hsqldb.jdbc.JDBCUtil.notSupported(Unknown Source)
    ... 3 more
    BUILD SUCCESSFUL (total time: 0 seconds)

    IMPORTANT : Ce teste est effectué sur mon pc portable win 10 64bits avec un access 2016.

    Le soft de mon entreprise est dev sur un Win7 32bits.

  14. #54
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 791
    Points
    4 791
    Par défaut
    on a encore le même blocage ici org.hsqldb.jdbc.JDBCConnection.setClientInfo(Unknown Source)
    avec java.sql.SQLFeatureNotSupportedException: feature not supported
    ce qui veut dire que l'ajout de l'encodage n'est pas supporté par ce driver.

    Peux-tu vérifier en retirant le charset :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    import java.sql.*;
     
    public class bdddetest {
        public static void main(String[] args) {
            try{
                System.out.println(System.getProperty("java.version"));
     
                Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
                System.out.println("UcanaccessDriver chargé avec succès");
     
                String url= "jdbc:ucanaccess://C:/Users/Spiicky/Documents/NetBeansProjects/ConnexionBDD/Test.accdb";
                System.out.println(url);
     
                Connection con = DriverManager.getConnection(url,"xxx","xxx"); 
                System.out.println("Connexion établie avec succès");
     
    //            java.util.Properties prop = new java.util.Properties();
    //            prop.put("charSet", "ISO-8859-1");
    //            con.setClientInfo(prop); 
    //            System.out.println("charSet ajouté avec succès");
     
                Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
                System.out.println("Statement créé avec succès");
     
                String sql = "Select * From Playlist";
                ResultSet rs = stmt.executeQuery(sql);
                while(rs.next()){
                    System.out.println("\n"+rs.getString("Sr no")+rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t"+rs.getString(4));
                }
     
                rs.close();
                stmt.close();
                con.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }  
    }
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  15. #55
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 340
    Points : 31
    Points
    31
    Par défaut
    Cela fonctionnement parfaitement !!!

    Résultat :
    run:
    1.8.0_60
    UcanaccessDriver chargé avec succès
    jdbc:ucanaccess://C:/Users/Spiicky/Documents/NetBeansProjects/ConnexionBDD/Test.accdb
    Connexion établie avec succès
    Statement créé avec succès

    11 Roar Prism Katy Perry

    22 Wake Me Up Avicii Avicii

    33 Mirrors 20/20 Justin timberlac

    44 Hello Seattle Ocean Eyes Owl City
    BUILD SUCCESSFUL (total time: 0 seconds)

  16. #56
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2015
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2015
    Messages : 340
    Points : 31
    Points
    31
    Par défaut
    En essayant sur la bécane du boulot (sans les props):
    run:
    jdbc:ucanaccess://path/xxx.mdb
    Connexion établie avec succès
    java.lang.UnsupportedOperationException: Cannot write indexes of this type due to unsupported collating sort order SortOrder[1036(0)] for text index (Db=xxx.mdb;Table=Annexe;Index=1)
    at com.healthmarketscience.jackcess.impl.IndexData$ReadOnlyColumnDescriptor.writeNonNullValue(IndexData.java:1839)
    at com.healthmarketscience.jackcess.impl.IndexData$ColumnDescriptor.writeValue(IndexData.java:1523)
    at com.healthmarketscience.jackcess.impl.IndexData.createEntryBytes(IndexData.java:1244)
    at com.healthmarketscience.jackcess.impl.IndexData.prepareAddRow(IndexData.java:581)
    at com.healthmarketscience.jackcess.impl.IndexData.prepareAddRow(IndexData.java:559)
    at com.healthmarketscience.jackcess.impl.TableImpl.addRows(TableImpl.java:1599)
    at com.healthmarketscience.jackcess.impl.TableImpl.addRow(TableImpl.java:1462)
    at net.ucanaccess.converters.UcanaccessTable.addRow(UcanaccessTable.java:44)
    at net.ucanaccess.commands.InsertCommand.insertRow(InsertCommand.java:101)
    at net.ucanaccess.commands.InsertCommand.persist(InsertCommand.java:148)
    at net.ucanaccess.jdbc.UcanaccessConnection.flushIO(UcanaccessConnection.java:315)
    at net.ucanaccess.jdbc.UcanaccessConnection.commit(UcanaccessConnection.java:205)
    at net.ucanaccess.jdbc.AbstractExecute.executeBase(AbstractExecute.java:161)
    at net.ucanaccess.jdbc.ExecuteUpdate.execute(ExecuteUpdate.java:50)
    at net.ucanaccess.jdbc.UcanaccessStatement.executeUpdate(UcanaccessStatement.java:220)
    at coactivite2.Annexe.recupererIdAnnexeCree(Annexe.java:203)
    at coactivite2.Fenetre$EcouteurFenetre.windowOpened(Fenetre.java:7910)
    at java.awt.Window.processWindowEvent(Window.java:1862)
    at javax.swing.JFrame.processWindowEvent(JFrame.java:274)
    at java.awt.Window.processEvent(Window.java:1823)
    at java.awt.Component.dispatchEventImpl(Component.java:4651)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
    at java.awt.EventQueue.access$000(EventQueue.java:84)
    at java.awt.EventQueue$1.run(EventQueue.java:602)
    at java.awt.EventQueue$1.run(EventQueue.java:600)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:616)
    at java.awt.EventQueue$2.run(EventQueue.java:614)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    UCAExc:::3.0.6 Cannot write indexes of this type due to unsupported collating sort order SortOrder[1036(0)] for text index (Db=xxx.mdb;Table=Annexe;Index=1)
    UCAExc:::3.0.6 connection exception: closed
    UCAExc:::3.0.6 connection exception: closed

  17. #57
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 791
    Points
    4 791
    Par défaut
    Bon, c'est déjà ça !

    Maintenant essaye avec toutes les autres tables de la base car Playlist n'a peut-être pas d'index.
    Pour rappel, on avait un message d'erreur "unsupported collating sort order" sur les index.

    EDIT : je n'avais pas vu ton dernier message
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  18. #58
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 791
    Points
    4 791
    Par défaut
    En essayant sur la bécane du boulot (sans les props):
    Avec la classe bdddetest ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  19. #59
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 178
    Points : 274
    Points
    274
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Je ne vois pas le rapport
    Parce que là on 'imagine' le classpath, dans la vue projet tu vois tous les jars importés dans le classpath.
    Pour une ClassNotFoundException ca peut faire sens non ?

  20. #60
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 178
    Points : 274
    Points
    274
    Par défaut
    Pour l'unsupported collating sort order c'est expliqué sur SO https://stackoverflow.com/questions/...base-from-java

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 31 PremièrePremière 123456713 ... DernièreDernière

Discussions similaires

  1. ListView qui change de taille mais n'affiche pas le contenu d'une ObservableCollection
    Par Atellane dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 14/08/2014, 10h46
  2. DataGrid n'affiche pas le contenu de certaines colonnes d'un Datatable
    Par alucia dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 20/09/2013, 13h39
  3. .load qui n'affiche pas le contenu de la page
    Par tonydu91 dans le forum jQuery
    Réponses: 4
    Dernier message: 06/04/2013, 23h58
  4. [SimpleXML] Problème avec simpleXML : il n'affiche pas le contenu de mon élément
    Par ploxien dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 05/05/2007, 19h43
  5. GUI Java par netbeans - ne s'affiche pas
    Par G_angel dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 31/01/2007, 11h38

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