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 :

[DBUNIT]AmbiguousTableNameException


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 196
    Points : 94
    Points
    94
    Par défaut [DBUNIT]AmbiguousTableNameException
    Bonjour,
    j'essaye de me connecter à une base de données pour effectuer des tests avec Dbunit. ma méthode de connection est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String driver="oracle.jdbc.driver.OracleDriver";
    		String url = "jdbc:oracle:xxxxxxxxxxxxxxxxxxxxxxxxxx01";
    		String login = "login";
    		String password = "mdp";
    la connection s'établie puis je prend une erreur :
    org.dbunit.database.AmbiguousTableNameException: 1TableDeLaBase
    at org.dbunit.database.DatabaseDataSet.initialize(DatabaseDataSet.java:140)
    at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:186)
    at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:98)
    at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:67)
    at org.dbunit.DatabaseTestCase.executeOperation(DatabaseTestCase.java:87)
    at org.dbunit.DatabaseTestCase.setUp(DatabaseTestCase.java:104)
    at junit.framework.TestCase.runBare(TestCase.java:138)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:131)
    at junit.framework.TestSuite.runTest(TestSuite.java:173)
    at junit.framework.TestSuite.run(TestSuite.java:168)
    at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
    at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.extensions.TestSetup.run(TestSetup.java:23)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
    J'ai alors regarder sur internet, tombe sur la FAQ DbUnit ou je trouve:
    This error occurs when no schema is specified and that DbUnit detect that it is getting columns information from multiple tables having the same name and located in different schemas.

    You can solve this problem in three different ways:

    Provide the schema name when creating the database connection. Note that for Oracle you must specify the schema name in uppercase.
    Ensure that the connection is restricted to access only one schema.
    Enable the qualified table names feature.
    Mais je ne sais pas quoi en faire... Comment puis-je mettre en oeuvre une des solutions données???
    Merci de votre aide!

  2. #2
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    question bete mais sur ta base oracle tu a bien la base de donnée qui s'appel "xxxxxxxxxxxxxxxxxxxxxxxxxx01" ???
    "vaste programme"

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 196
    Points : 94
    Points
    94
    Par défaut
    oui, j'ai vérifié. D'ailleur dans le message d'erreur, le nom d'une des table est donné... donc il se connect a la base. Par contre, il se connect sur le mauvais schema... que puis-je faire???

  4. #4
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    mettre "Schema.Table" au lieu de juste "Table" dans tes requêtes ?
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 196
    Points : 94
    Points
    94
    Par défaut
    ben je sais pas trop comment parce que ça foire sur un getTables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Connection jdbcConnection = _connection.getConnection();
    String schema = _connection.getSchema();//schema est alors à null
    String[] tableType = (String[])_connection.getConfig().getProperty(DatabaseConfig.PROPERTY_TABLE_TYPE);
     
    DatabaseMetaData databaseMetaData = jdbcConnection.getMetaData();
    ResultSet resultSet = databaseMetaData.getTables(null, schema, "%", tableType);
    Donc ça scanner tous les schéma... Une chtite hypothèse c'est que l'API vautre peut être à cause de tables et de synonymes qui portent le même nom....

  6. #6
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    T'est sur que c'est à cette ligne que ça foire ?
    Parce que je vois pas cette methode getTable dans la trace de ton exception.

    T'es allé en debug pour y voir un peu plus clair ?
    Je sais que désormais vivre est un calembour,
    La mort est devenue un état permanent,
    Le monde est aux fantômes, aux hyènes et aux vautours.
    Moi je vous dis bravo et vive la mort.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 196
    Points : 94
    Points
    94
    Par défaut
    en fait c'est juste en dessous dans le code de l'API:
    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
     try
            {
                Connection jdbcConnection = _connection.getConnection();
                String schema = _connection.getSchema();
                String[] tableType = (String[])_connection.getConfig().getProperty(
                        DatabaseConfig.PROPERTY_TABLE_TYPE);
     
                DatabaseMetaData databaseMetaData = jdbcConnection.getMetaData();
                ResultSet resultSet = databaseMetaData.getTables(
                        null, schema, "%", tableType);
     
                try
                {
                    List nameList = new ArrayList();
                    while (resultSet.next())
                    {
                        String schemaName = resultSet.getString(2);
                        String tableName = resultSet.getString(3);
                        String tableT = resultSet.getString(4);
                        System.out.println("schema=" + schemaName + ", table=" + tableName + ", type=" + tableT + "");
                        tableName = getQualifiedName(schemaName, tableName);
     
                        // prevent table name conflict
                        if (_tableMap.containsKey(tableName.toUpperCase()))
                        {
                            throw new AmbiguousTableNameException(tableName);
                        }
                        nameList.add(tableName);
                        _tableMap.put(tableName.toUpperCase(), null);
                    }
     
                    _nameList = nameList;
                }
                finally
                {
                    resultSet.close();
                }
            }
            catch (SQLException e)
            {
                throw new DataSetException(e);
            }
    c'est par le if que ça sort en levant une exception.
    Ce qui serai cool, ce serai de pouvoir preciser le shema sur le quel je travail, plutot que de tous les scanner... et ce, sans modifier l'API. Ce serait pas possible de faire ça au niveau de la chaine de connexion?

    Merci de ton aide!

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je suis un petit nouveau sur ce forum et j'espère y trouver mon bonheur

    Voilà mon problème :
    J'ai changé l'adresse IP du serveur où se trouvait ma base de données.
    Depuis, lorsque je lance mes tests unitaires avec Junit, j'ai le message :
    org.dbunit.database.AmbiguousTableNameException: <Nom d'une table de mon schéma>

    J'ai beau chercher je ne trouve pas comment m'en sortir. J'ai vérifié sur mon disque pour rechercher toute trace de l'ancienne adresse IP du serveur mais impossible d'en trouver...
    Le problème est donc ailleurs ! Mais ou ?...

    Si jamais vous avez une petite idée je suis preneur !!!

    D'avance merci

Discussions similaires

  1. [Unitils] [TestNG][DBUnit][JPA][Hibernate] problème de sequence lors d'un insert.
    Par Faiche dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 19/10/2009, 16h39
  2. [DBUnit] test une methode d'insert d'un dao avec DBUnit
    Par foucha dans le forum Tests et Performance
    Réponses: 3
    Dernier message: 14/08/2009, 20h14
  3. configurer dbunit sans lancer tomcat
    Par mziti dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 12/08/2009, 16h54
  4. [DBUnit] Test Unitaire de dao avec DbUnit & HSQLDB
    Par ReaM dans le forum Tests et Performance
    Réponses: 0
    Dernier message: 16/03/2009, 10h51
  5. Réponses: 3
    Dernier message: 29/08/2007, 14h27

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