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 :

[ACCESS] Problème d'insertion


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Points : 74
    Points
    74
    Par défaut [ACCESS] Problème d'insertion
    Voila j'ai un probleme lors d'une insertion dans une base de donnée access en java.
    Voici comme je procède:

    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
     
    public int execUpdate(String s) {
    		this.CreateStatement();
     
    		try {
    			//System.out.print(s);
    			this.res = st.executeUpdate(s);
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return this.res;
    	}
    public void CreateStatement(){
    		try {
    			this.st = this.con.createStatement();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    public void connection() {
    		Connection con = null;
    		try {
    			Class cDriver = Class.forName(DRIVER);
    			Driver d = (java.sql.Driver)cDriver.newInstance();
    			DriverManager.registerDriver(d);
     
    			this.con = DriverManager.getConnection(URL,Constantes.USER,Constantes.PSW);
    			System.out.print("Connected");
    		} catch (Exception e) {
    			//e.printStackTrace();
    			System.out.print("Error connection");
    		}
    	}
    Je ne met pas la totalité du code sinon vous n'allez plus vous en sortir, mais en gros la fonction connection fonctionne correctement étant donné que mes SELECT ne posent pas de probleme.

    Voici mon appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String query ="INSERT INTO test_tab (id,myfield) VALUES ('1',\"test\")";
    		System.out.print(query);
    		s+=dao.execUpdate(query);
    Il n'y a pas d'erreur dans la querry elle meme je l'ai testée directement dans ACCESS.

    J'ai vu un post semblable (créé par ocean), et en utilisant sa méthode cela fonctionne bien (en utilisant un prepareStatement).
    J'aimerais pouvoir le faire directement depuis une query (string) qui me serait envoyé et donc sans prepareStatement.

    L'erreur que je reçois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
    Merci d'avance!

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Le problème vient de là:

    Comme son nom le laisse supposer, cette méthode ne fonctionne que pour les update, et non pour les insert.

    Regarde l'API java de communication SQL. Il y a des méthodes dédiées qui diffèrent selon le type d'opération que tu veux faire (INSERT, UPDATE, SELECT, DELETE...)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Points : 74
    Points
    74
    Par défaut
    MErci pour ta réponse rapide.
    En allant vérifier dans l'api java voici ce que j'ai trouvé:

    executeUpdate(String sql)
    Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.
    Donc il me semble que je peux l'utiliser pour un insert. non?

  4. #4
    Membre actif Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 239
    Points
    239
    Par défaut
    Salut,

    Il est tout a fait possible de faire des inserts avec la méthode executeUpdate. Le problème vient du fait que tu entoures ton chiffre par des cottes ('). Enlèvent les, cela devrait mieux marcher.

    A+
    Hydraland

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Points : 74
    Points
    74
    Par défaut
    non le problème ne vient pas des ''. J'ai testé avec et sans, et le résultat est le même.

  6. #6
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Citation Envoyé par lem01
    non le problème ne vient pas des ''. J'ai testé avec et sans, et le résultat est le même.
    Et en remplaçant les quotes doubles par des simples autour de test?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String query ="INSERT INTO test_tab (id,myfield) VALUES ('1','test')";
    Juste une idée comme ça... je n'ai pas testé

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 949
    Points : 1 856
    Points
    1 856
    Par défaut
    Quelques idées au pif :

    1. Avec des '' autour de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO test_tab (id,myfield) VALUES ('1','test')";
    2. Est-ce bien myfield ? Peut-être my_field? Ou testtab?

    3. L'erreur vient - elle du bloc catch dans CreateStatement ou execUpdate ?

  8. #8
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    En sql "propre" c'est normalement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO test_tab (id,myfield) VALUES (1,'test')
    ça serait mieux de tester avec ça ...

    P.S. : j'ai parlé de SQL propre sur un post concernant Access ? Oups, dsl

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Points : 74
    Points
    74
    Par défaut
    Roh grrrrrrrrr, me semblait avoir fait ce test évident que de le faire avec des '' hey ben non! HONTE sur moi, j'ai perdu mon temps sur cette betise

    Merci beaucoup en tout cas! Toujours aussi rapide sur Developpez, et toujours de bons conseils!

    En SQL propre on est censé utilisé des simple cote pour des String (meme si elle contient des espaces ... ??)? MErci encore

  10. #10
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Ouaip, les séparateurs normaux pour des String c'est toujours ''
    Content que ton problème soit résolu !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET/Access] Problème avec une requête d'insertion
    Par Bladinou dans le forum Accès aux données
    Réponses: 8
    Dernier message: 29/05/2007, 18h06
  2. Réponses: 1
    Dernier message: 07/10/2006, 10h35
  3. Débutant: problème d'insertion dans une BD access
    Par nnj dans le forum Accès aux données
    Réponses: 1
    Dernier message: 04/10/2006, 09h49
  4. [VB.Net][Access] Problème de requête d'insertion
    Par xG-Hannibal dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/07/2006, 11h57
  5. Problème d'insertion dans une table Access
    Par tribaleur dans le forum ASP
    Réponses: 21
    Dernier message: 27/06/2006, 08h20

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