[JAVA] mySQL ajout d'une entrée

Résolu/Fermé
alec.po Messages postés 118 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 11 février 2012 - 25 janv. 2009 à 00:03
alec.po Messages postés 118 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 11 février 2012 - 27 janv. 2009 à 18:35
Bonjour,
Je débute en SQL, j'ai écrit ce code java en m'inspirant d'autre code trouvé un peu partout...

import java.sql.* ; 

public class Main {
	public static void main(String[] args){
		
		String pilote = "com.mysql.jdbc.Driver";
		
		try {
			Class.forName(pilote);
			
			Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/donne", "root", "");
		
			java.sql.Statement instruction=connexion.createStatement() ;
			System.out.println("connexion réussi");
			
			ResultSet retour0= instruction.executeQuery("SELECT * FROM utilisateur");
			ResultSet retour1= instruction.executeQuery("INSERT INTO utilisateur values (null, 'jean', 'Dupont', '22')") ;
			System.out.println(retour0 + "\n\n" + retour1);
			
			}catch (Exception sql_erreur) { //Si erreur
				System.err.println("Erreur !");
			}
			
	
	}

}


voila donc sa marche jusqu'à "SELECT * FROM utilisateur" mais après sa fait une erreur je sais pas pourquoi, je ne crois pas m'être trompé dans la syntaxe...
Merci d'avance
A voir également:

13 réponses

Utilisateur anonyme
25 janv. 2009 à 01:22
Bonjour,

Je ne connais pas SQL, mais pourquoi (null, 'jean', 'Dupont', '22') et non (null, "jean", "Dupont", "22") ?

Cordialement,

Dan
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
25 janv. 2009 à 01:41
Bonsoir,
Modifie ceci :
catch (Exception sql_erreur) { //Si erreur
System.err.println("Erreur !");
}


Par ceci :
catch (Exception sql_erreur) { //Si erreur
System.err.println(sql_erreur.getStackTrace());
}


Et dis nous exactement de quoi il en retourne.

Cordialement,
0
Utilisateur anonyme
25 janv. 2009 à 02:04
Salut,

Bon je viens de "tomber" sur une réponse de kriesgraf ici:
http://www.commentcamarche.net/forum/affich 6780340 java sql pb insert into
(à consulter peut-etre) et j'ai constaté que la syntaxe 'jean', 'Dupont', '22' est correcte.

Désolé,

Dan
0
Utilisateur anonyme
25 janv. 2009 à 02:13
Je ne sais pas pourquoi les tirets manquent après affich et entre les mots qui suivent !!!
http://www.commentcamarche.net/forum/affich 6780340 java sql pb insert into
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alec.po Messages postés 118 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 11 février 2012 13
25 janv. 2009 à 11:14
Merci pour vos réponce.
Marco, quand je fait ce que tu ma dit, sa met : "[Ljava.lang.StackTraceElement;@1100d7a"
Danimo, je n'ai pas compris :(
merci encore
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
25 janv. 2009 à 21:06
Bonsoir,
Désolé, je me suis planté :(
Remplaces maintenant ceci :
catch (Exception sql_erreur) { //Si erreur
System.err.println(sql_erreur.getStackTrace());
}


Par ceci stp :
catch (Exception sql_erreur) { //Si erreur
sql_erreur.printStackTrace();
}


Merci
0
Utilisateur anonyme
25 janv. 2009 à 21:59
Bonjour,

>>> alec.po:

Désolé, ne connaisant pas sql, j'aurais mieux fait de m'abstenir de répondre.

En fait je trouvais "anormal" cette syntaxe:

("INSERT INTO utilisateur values (null, 'jean', 'Dupont', '22')") ; (les ' )

Mais en consultant d'autres messages, je me suis rendu compte que cette forme d'écriture était était aussi présente et j'en ai conclu que c'était la bonne.
Je t'ai donc indiqué le lien et pas de chance c'est mal sorti. Je l'ai donc réenvoyé.

Cordialement,

Dan
0
alec.po Messages postés 118 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 11 février 2012 13
26 janv. 2009 à 18:09
Merci quand même Danimo.
Marco, maintenant sa donne ça :
java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.Statement.checkForDml(Statement.java:417)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1140)
at Main.main(Main.java:17)
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
26 janv. 2009 à 20:55
Bonsoir,
Essaie donc de remplacer ceci :
ResultSet retour1= instruction.executeQuery("INSERT INTO utilisateur values (null, 'jean', 'Dupont', '22')") ;

par ceci :
int retour2= instruction.executeUpdate("INSERT INTO utilisateur values (null, 'jean', 'Dupont', '22')") ;

Ensuite, comme le signale william7007, une chose je ne sais pas si la derniere valeur que tu veux introduire dans la table est un nombre ou un texte (22) si c'est un nombre alors tu doit l'écrire sans cote(').

Cordialement,
0
william7007 Messages postés 335 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 23 mars 2010 46
26 janv. 2009 à 19:49
bonjour ou bonsoir
je ne alors les gars ça fonctionne maintenant ou pas ?

je ne sais pas si je sort du jeu mais pour moi je ne voterais pas 1 euro pour le code après le SELECT pourquoi? simplement que tu ouvre la table en mode lecture ce qui est tres bien, le SGBDR accepte ta requete et sans toute fois decherger le premier Statement question de liberer les ressoy=urce de la table afin que celle ci puis repondre à d'autres requete tu la fait subir du coup une deuxieme requete il y'a de quoi elle refuseras voir mm se metra en colère (je rigole). je dit simplement qu'il faut juste apres la premiere connection tu liberes les resources de la table et apres tu te reconectes à nouveau à la table ben essaie ce ci voir et met moi au courant


try {
		Class.forName(pilote);
		
		Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/donne", "root", "");
	
		java.sql.Statement instruction =null;
		instruction = connexion.createStatement() ;
		System.out.println("connexion réussi");
		
		// ici tu introduit d'abord les données dans la table
		
		ResultSet retour1= instruction.executeQuery("INSERT INTO utilisateur values(null, 'jean', 'Dupont', '22')") ;
		instruction.close();
		
		// Ici tu lis les données de la table

		instruction = connexion.createStatement();
		ResultSet retour0= instruction.executeQuery("SELECT * FROM utilisateur");
		instruction.close();
		
		/*
		 S'il y'a beaucoup de données dans la table le mieux 
		 est de faire une boucle pour les afficher tous 
		 affin de ne pas avoir de surprise
		 //*/

		System.out.println("Liste des Utilisateurs");
		while(retour0.next()){
			System.out.println(retour0.getString(0)+"  "+retour0.getString(1)+"   "+retour0.getString(2)+"   "+retour0.getString(3));
		}
		
		
		}catch (SQLException sql_erreur) { //Si erreur
			System.err.println("Erreur !");
		}



hhohohooh

une chose je ne sais pas si la derniere valeur que tu veux introduire dans la table est un nombre ou un texte (22) si c'est un nombre alors tu doit l'écrire sans cote(') donc tu ecris simplement

ResultSet retour1= instruction.executeQuery("INSERT INTO utilisateur values(null, 'jean', 'Dupont', 22)") ;


et il n'y a pas d'space entre values et la parenthèse ouvrant.

cdlt
0
alec.po Messages postés 118 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 11 février 2012 13
26 janv. 2009 à 21:34
Merci de vos réponce :
Marco j'ai tester çà :
import java.sql.* ; 

public class Main {
	public static void main(String[] args){
		
		String pilote = "com.mysql.jdbc.Driver";
		
		try {
			Class.forName(pilote);
			
			Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/donne", "root", "");
		
			java.sql.Statement instruction=connexion.createStatement() ;
			System.out.println("connexion réussi");
			
			int retour2= instruction.executeUpdate("INSERT INTO utilisateur values (null, 'jean', 'Dupont', 22)") ; 
			
			}catch (Exception sql_erreur) { //Si erreur
				System.err.println("Erreur !");
			}
			
	
	}

}


Erreur...

William, j'ai tester ton code il me fait une erreur aussi :( alors j'ai enlever la partie "liste des Utilisateurs", même erreur...

Et c'est bien un int la dernière valeur, alors j'ai enlever les (').

Je comprend pas la lecture marche bien pourtant...
Merci pour votre aide c'est sympa.
0
william7007 Messages postés 335 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 23 mars 2010 46
26 janv. 2009 à 21:40
as tu enlevé l'espace entre "VALUES" et "{" ?
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
26 janv. 2009 à 21:58
Je viens de regarder au niveau de la documentation, l'espace n'est pas gênant en fait, le problème vient d'ailleurs.

Cordialement,
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
26 janv. 2009 à 21:45
Et vire ton : System.err.println("Erreur !"); dans ton catch, ça ne nous donne aucune indication.
Laisse donc le sql_erreur.printStackTrace(); stp.

Cordialement,
0
alec.po Messages postés 118 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 11 février 2012 13
26 janv. 2009 à 21:47
:)

java.sql.SQLException: Column count doesn't match value count at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1402)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1317)
at Main.main(Main.java:19)
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
26 janv. 2009 à 21:57
L'erreur te dit que tu donne trop ou pas assez d'indications dans ton insert.
La première des choses à faire, c'est de virer le "null" pour l'identifiant (ce n'est pas à toi de le spécifier en général, sauf si tu utilises les GeneratorType et autres trucs de la JPA, mais je ne pense pas que ce soit à toi de le faire).

Le mieux, c'est d'adapter ta requête en spécifiant les colonnes que tu souhaites renseigner. Modifie donc ton :
int retour2= instruction.executeUpdate("INSERT INTO utilisateur values (null, 'jean', 'Dupont', 22)") ;

En : int retour2= instruction.executeUpdate("INSERT INTO utilisateur ('prenom', 'nom', 'age') values ('jean', 'Dupont', 22)") ;

Cordialement,
0
alec.po Messages postés 118 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 11 février 2012 13
27 janv. 2009 à 18:35
Merci infiniment, c'était le "null" qui provoquait l'erreur...
Sa marche nickel maintenant. :)
Merci encore Marco.
0