[Java - JDBC] Erreur lors de création de table
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

[Java - JDBC] Erreur lors de création de table



  1. #1
    invite48ca7510

    [Java - JDBC] Erreur lors de création de table


    ------

    Bonsoir à tous,

    J'essaye de créer une table dans une base de données distante de mon PC.

    J'ai pour cela deux classes, une Connection (qui ouvre et ferme les connexion à la BD), et une Requetes (qui contient, comme son nom l'indique, les requêtes que je souhaite effectuer sur la BD).

    Voici mes deux fichiers :

    Connection.java
    Code:
    package AccesBD;
    
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class Connection {
    
        private String url = "", user = "", passwd = "";
        public static java.sql.Connection conn;
    
        public Connection() {
    
            url = "jdbc:oracle:thin:@xxxxxxxxxxxxx:1521:orcl";
            user ="monNom";
            passwd = "monMdp";
    
        }
    
        public void open() {
            try {
                Class.forName("oracle.jdbc.OracleDriver");
                conn = DriverManager.getConnection(url, user, passwd);
            } catch (SQLException | ClassNotFoundException e) {
                System.out.println("Problème lors de la connection : Connection()");
                System.out.println(e.getMessage());
            }
        }
    
        public Statement createStatement() {
            try {
                return conn.createStatement();
            } catch (SQLException e) {
                System.out.println("Problème lors de la connection : Connection.createStatement()");
                System.out.println(e.getMessage());
            }
            return null;
        }
    
        public void close() {
            try {
                conn.close();
            } catch (SQLException e) {
                System.out.println("Problème lors de la connection : Connection.close()");
                System.out.println(e.getMessage());
            }
    
        }
    }
    Requetes.java :
    Code:
    package AccesBD;
    
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    
    public class Requetes {
    
        private String insertPlayer = "", deletePlayer = "";
        private Connection conn;
    
        public Requetes() {
            insertPlayer = "INSERT INTO Player(fname_player,lname_player,natio_player,atprank_player)"
                    + "VALUES(?,?,?,?)";
            deletePlayer = "DELETE FROM player where lname_player = ? and fname_player = ?";
            conn = new Connection();
        }
    
        public void insertPlay(String fname, String lname, String natio, int atp) {
            try {
                System.out.println("1");
                conn.open();
                System.out.println("2");
    
                Statement state = conn.createStatement();
                System.out.println("3");
    
                ResultSet res = state.executeQuery("CREATE TABLE IF NOT EXISTS player"
                        + "(id_player int NOT NULL auto_increment, fname_player varchar(255), lname_player varchar(255),"
                        + "natio_player varchar (255), atprank int, constraint pk_player primary key (id_player))");
                System.out.println("3.5");
                PreparedStatement insPlay = Connection.conn.prepareStatement(insertPlayer);
                System.out.println("4");
                insPlay.setString(1, fname);
                insPlay.setString(2, lname);
                insPlay.setString(3, natio);
                insPlay.setInt(4, atp);
                System.out.println("5");
                insPlay.executeUpdate();
                System.out.println("6");
                conn.close();
                System.out.println("7");
            } catch (SQLException e) {
                System.out.println("Problème lors de la requête insertPlay");
                System.out.println(e.getMessage());
            }
        }
    
        public ArrayList<String> listNames() {
            try {
                ArrayList<String> names = new ArrayList();
                conn.open();
                Statement state = conn.createStatement();
                ResultSet result = state.executeQuery("SELECT lname_player, fname_player from player");
                ResultSetMetaData resultMeta = result.getMetaData();
                while (result.next()) {
                    String fname, lname, name;
                    lname = result.getObject(1).toString();
                    fname = result.getObject(2).toString();
                    name = lname + " " + fname;
                    names.add(name);
                }
                conn.close();
                return names;
            } catch (SQLException | NullPointerException e) {
                System.out.println("Problème lors de la requête listNames");
                System.out.println(e.getMessage());
            }
            return null;
        }
    
        public void deletePlayer(String lastName, String firstName) {
            try {
                conn.open();
                PreparedStatement delPlay = Connection.conn.prepareStatement(deletePlayer);
                delPlay.setString(1, lastName);
                delPlay.setString(2, firstName);
                delPlay.executeUpdate();
                conn.close();
            } catch (SQLException e) {
                System.out.println("Problème lors de la requête deletePlayer");
                System.out.println(e.getMessage());
            }
        }
    }
    J'ai testé ce code en local (avec postgresql), et il fonctionne... Lorsque je souhaite effectuer la requête insertPlay, elle se bloque au moment de "create table if not exists ..." (d'où les println(x); afin de m'aider à voir où se trouve l'erreur).

    J'ai ce message d'erreur :
    run:
    1
    2
    3
    Problème lors de la requête insertPlay
    ORA-00922: option erronée ou absente

    BUILD SUCCESSFUL (total time: 17 seconds)
    J'ai regardé la manière de créer une table, et la mienne me semble bonne....

    Merci d'avance pour votre aide !

    -----

  2. #2
    bisou10

    Re : [Java - JDBC] Erreur lors de création de table

    1. Tu devrais ajouter un espace devant la seconde ligne, devant (id_player (ce qui donne: " (id_player etc..." )
    2. Mets un ; a la fin de ta requete
    3. Tu devrais rejouer la requete CREATE en local sur ton serveur PG-SQL, hors code java

    C'est juste 3 petites reflexions en lisant le code, là je ne peux pas tester.
    Dernière modification par bisou10 ; 11/03/2014 à 10h07.

  3. #3
    invite0bbe92c0

    Re : [Java - JDBC] Erreur lors de création de table

    Bonjour

    Je ne comprends pas très bien.

    Tu dis que as testé avec PostGre, mais l'erreur remontée est une erreur ORACLE.

    Merci de préciser avec quel DBMS tu travailles ? (si c'est ORACLE, quelle version ?)

    Je précise que à ma connaissance, l'option AUTO INCREMENT n'existe pas avec Oracle (il faut - ou fallait ? - définir une SEQUENCE pour cela).

  4. #4
    bisou10

    Re : [Java - JDBC] Erreur lors de création de table

    Bien vu Bluedeep !

    Il est possible que tu utilises le mauvais connecteur JDBC. De mémoire, les namespaces associés seraient plutot sous la forme java.postgresql.xxxx, que simplement java.sql, qui doivent être ceux d'oracle.

    De mémoire aussi, il faut installer le connecteur PostgreSQL depuis le site de PGSql.

  5. A voir en vidéo sur Futura
  6. #5
    invite48ca7510

    Re : [Java - JDBC] Erreur lors de création de table

    Bonjour,

    merci pour vos réponses.

    Or, l'erreur était simplement due à une erreur de syntaxe (le "if not exists" n'a pas l'air reconnu)...

    Merci encore, et bonne journée !

  7. #6
    invite0bbe92c0

    Re : [Java - JDBC] Erreur lors de création de table

    Citation Envoyé par bisou10 Voir le message
    Bien vu Bluedeep !

    Il est possible que tu utilises le mauvais connecteur JDBC. De mémoire, les namespaces associés seraient plutot sous la forme java.postgresql.xxxx, que simplement java.sql, qui doivent être ceux d'oracle.

    De mémoire aussi, il faut installer le connecteur PostgreSQL depuis le site de PGSql.
    Et surtout, avec PostGre, la ligne suivante n'aurait aucune chance d'aboutir au résultat escompté :

    Code:
    Class.forName("oracle.jdbc.OracleDriver");

  8. #7
    invite48ca7510

    Re : [Java - JDBC] Erreur lors de création de table

    Pour me connecter a Postgre, je n'utilisais bien sûr pas le driver Oracle ! ^^

    J'ai suivi le tutoriel d'OpenClassroom (ancien "Site du zéro").

  9. #8
    invite1c6b0acc

    Re : [Java - JDBC] Erreur lors de création de table

    Citation Envoyé par Lechero Voir le message
    Pour me connecter a Postgre, je n'utilisais bien sûr pas le driver Oracle ! ^^
    Et tu obtenais "ORA-00922: option erronée ou absente" ???

Discussions similaires

  1. Java serialization and JDBC
    Par inviteed5cf7ab dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 04/06/2013, 08h01
  2. [Java] Probleme lors de l'exécution du .jar
    Par invitec3c3e59d dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 10/12/2012, 21h36
  3. [C] - Création d'une table
    Par invite3c35244f dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 22/12/2010, 13h44
  4. Probleme de table lors de calcul de roulement
    Par invite8bce346d dans le forum Technologies
    Réponses: 5
    Dernier message: 22/05/2007, 23h11
  5. Erreur lors de la creation d'une structure en VB
    Par invite74b73858 dans le forum Logiciel - Software - Open Source
    Réponses: 13
    Dernier message: 02/04/2007, 16h12