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 :

Table pas trouvable


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 296
    Par défaut Table pas trouvable
    Bonjour

    J'ai fait un programme pour créer une table dans hsql
    voici le code

    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
     
    /**
             * @param args
             * @throws ClassNotFoundException 
             * @throws IllegalAccessException 
             * @throws InstantiationException 
             * @throws SQLException 
             */
    	public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
    		// TODO Raccord de méthode auto-généré
     
    		boolean bool = true;
    		Class.forName("org.hsqldb.jdbcDriver").newInstance();
    		Connection connexion = DriverManager.getConnection("jdbc:hsqldb:mem:database","sa","");
    		bool=connexion.isClosed();
    		System.out.println(bool);
    		Statement  statement = connexion.createStatement();
     
    		statement.executeUpdate("CREATE TABLE test(colonne1 INT,colonne2 INT)");
    		statement.executeUpdate("INSERT INTO test VALUES (10,12)");
    		statement.executeQuery("SHUTDOWN");
    		statement.close();
     
    		Class.forName("org.hsqldb.jdbcDriver").newInstance();
    		Connection connexion2 = DriverManager.getConnection("jdbc:hsqldb:mem:database","sa","");
    		Statement  statement2 = connexion2.createStatement();
    		ResultSet resultat = statement2.executeQuery("SELECT * FROM test ");
     
    		while(resultat.next()){
    			System.out.println(resultat.getDouble("colonne1"));		
    			}
    		statement.close();
     
    		}
    }
    et éclipse me trouve une erreur comme quoi il ne trouve pas la table
    Si quelqu'un pouvait m'aider merci

    Exception in thread "main" java.sql.SQLException: Table not found in statement [SELECT * FROM test]
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.jdbcStatement.executeQuery(Unknown Source)
    at Connexion.main(Connexion.java:36)

  2. #2
    in
    in est déconnecté
    Membre Expert 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
    Par défaut
    Salut,

    je n'apporte pas de réponse mais plutot "une" question ...

    Qu'est sensée faire cette ligne
    statement.executeQuery("SHUTDOWN");
    Arrêter la base ? Si oui, un simple execute() devrait suffir. Et il faudrait également fermer la connexion. D'ailleurs le fait de fermer c'est juste pour tester ? De plus, pour être propre, la fermeture des objets doit se faire dans un bloc finally.

    Ensuite, si tu arrêtes explicitement la base ... comment est elle redémarrée ? Instancier une nouvelle connexion suffit ? (j'ai jamais utilisé hsqldb)

    Enfin, as tu testé sans le Shutdown et en n'utilisant qu'un seul objet connexion. Parce que je me dis que connexion1 n'est pas close et le commit n'a pas été exécuté, du coup connexion2 ne peut pas voir la table test ... enfin je dis ça ... tente de faire un commit quoi ...

  3. #3
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Tu peux toujours t'aider de ce lien :

    http://baptiste-wicht.developpez.com...iel/java/hsql/

    Comme in je ne connais pas hsql mais la création en espace mémoire pause peut être problème? En effet, tu crées la base en mémoire, ferme la connexion à cette base avec un shutdown. Peut être un problème d'accès donc.

    Je suis aussi d'accord avec in, il ne sert à rien de faire deux objets connexion, il suffit juste de faire de nouveaux objets de statement uniquement.

    Enfin, le statement.executeQuery("SHUTDOWN"); doit intervenir en fin de code et pas s'amuser à ouvrir et fermer la connexion à la base à chaque fois que tu veux faire quelquechose dessus.

    En espérant t'avoir aidé

  4. #4
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Je pense que si tu va en bases tu ne trouvera effectivement pas cette table.
    En effet si l'autocommit n'est pas activer, il te faut committer à chaque creation, modification, suppression de table.


    A faire sur une Connection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Connection connection = ...................
    // La tu executes ta requete
     
    //puis ensuite
    connection.commit();

  5. #5
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Citation Envoyé par maxf1
    Je pense que si tu va en bases tu ne trouvera effectivement pas cette table.
    En effet si l'autocommit n'est pas activer, il te faut committer à chaque creation, modification, suppression de table.


    A faire sur une Connection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Connection connection = ...................
    // La tu executes ta requete
     
    //puis ensuite
    connection.commit();
    Totalement faux pour le LDD (language de définition de données) il ne faut ni de redémarrage de la base (sous Oracle en l'occurence), ni de commit.

    Essai de vider le cache de la BDD, mais je sais comment on fait sur Oracle, mais pas sur ce type de base.

    ALTER SYSTEM FLUSH shared_pool (sous oracle).

    Finalement pourquoi utiliser un PreparedStatement pour executer une création de table ???

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par thibaut
    Totalement faux pour le LDD (language de définition de données) il ne faut ni de redémarrage de la base (sous Oracle en l'occurence), ni de commit.
    Oui et Non avec HSQL

    En fait, il faut que le CREATE et le UPDATE soient dans deux Statement differents.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Statement st = null;
     
    st = conn.createStatement();
    st.executeUpdate("CREATE TABLE test(colonne1 INT,colonne2 INT)");
    st.close();
     
    st = conn.createStatement();
    st.executeUpdate("INSERT INTO test VALUES (10,12)");
    st.close();
     
    st = conn.createStatement();
    st.execute("SHUTDOWN");
    st.close();
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    C'est pas oui et non, pour le LDD pas besoin de commit, je m'excuse !!!

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Il y a toujours besoin de faire commit, que ce soit explicitement dit ou implicitement fait.

    Ps: Les membres experts n'ont pas besoin de s'excuser. C'est une nouvelle loi.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. Problème de définition de table (pas de SQL)
    Par Globalement dans le forum MySQL
    Réponses: 3
    Dernier message: 07/11/2010, 23h27
  2. Onglet supprimer Table pas disponible
    Par Pete_123456 dans le forum Sécurité
    Réponses: 1
    Dernier message: 29/07/2010, 11h30
  3. [AC-97] Table, pas d'enregistrement sur champs calcués
    Par yatmen dans le forum IHM
    Réponses: 2
    Dernier message: 18/02/2010, 15h33
  4. [CR 9] Nom de table pas mis à jour après changement de la source de données
    Par zodeno dans le forum Connectivité
    Réponses: 3
    Dernier message: 29/09/2009, 13h36
  5. requete sur 2 table (pas si simple)
    Par Sebou San dans le forum Requêtes
    Réponses: 7
    Dernier message: 29/11/2005, 14h08

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