Controler saisie dans JTextfield

Fermé
Caroline - 28 sept. 2009 à 10:40
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 - 1 oct. 2009 à 02:55
Bonjour,je dispose des informations dans un fichier que j'ai ouvert en mode ajout. Cependant je veux éviter la redondance de certaines infos.
Je cherche alors une fonction qui va récupérer la donnée de mon JTextField pour pour la comparer aux données déjà dans mon fichier et me me retourner un message au cas où cette donné existe et l'enregistrer sinon.
Merci de m'indiquer une piste

13 réponses

sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
28 sept. 2009 à 13:28
Si ton fichier n'est pas trop grand, tu pourrais, e.g., le stocker en mémoire dans une variable String. Et par la suite chercher tout bonnement si le contenu de ton JTextField apparaît quelque part dans ce string (ce qui revient à vérifier vérifier si indexOf() retourne ou pas -1).

Juste une piste, sans optimisation aucune...

++
0
Bonjour Sandul, merci pour ta piste même si je ne vois pas trop le chemin.

Mais tu peux m'indiquer un autre site où je peux télécharger le Connector/ J 5.1.
On m'a indiquer ce site que voici: https://dev.mysql.com/downloads/connector/j/5.1.html mais franchement je n'arrive pas à télécharger. Quand je clique sur Download la même page me revient toujours et je n'obtiens rien.
Peut-être que tu peut me donner une autre technique.C'est vraiment important pour moi.
Merci pour tous...
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
29 sept. 2009 à 11:00
Ben tu vas ici https://dev.mysql.com/downloads/connector/j/5.1.html et tout en bas de la page tu cliques sur "pick a mirror" sur la ligne "Source and Binaries (zip)". Tu tombes sur une page d'inscription mais tu feras ta vilaine et cliqueras sur "No thanks, just take me to the downloads!" (en bas de la page). Ensuite, choisis n'importe quel site...

Le chargement de JConnector n'a rien à voir avec ton topic initial xD
0
Bonsoir Sandul, thanks pour le Jconnector.
Tu as raison le chargement de JConnector n'a rien à voir avec ton topic initial.
Seulement que je me suis dit que mon fichier est appelé à devenir plus grand avec le temps et je désire me retourner vers base de données. Qu'en penses-tu?

A propos j'ai des problèmes pour me connecter a ma base de données mysql de easyPhp.
Pardon, voici mon code; il n'a pas d'erreur. Mais quand je l'exécute j'obtiens ce message:
java.lang.ClassNotFoundException: com.mysql.jdbc.driver
Peut-être que j'ai mal configuré des paramètre, com.mysql.jdbc.driver n'est pas dans le bon répertoire...
en tout cas je ne comprend pas.
Merci de m'expliquer avec patience car je suis débutante en programmation et ce code même je l'ai obtenu sur indication du forum

// code //
public class SeConnecter {
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
Class.forName("com.mysql.jdbc.driver");
}
catch(ClassNotFoundException e){
System.err.println(e);
System.exit(-1);
}

try{ //Creation d'une connection à la base
Connection connect = DriverManager.getConnection ( "jdbc:mysql:localhost","","" );

//une requette simple
String ma_requette = "select CODE_STAGE, LIB_STAGE from GS_STAGE";

// Requette en utilisant un statement
Statement state = connect.createStatement();
// On recoit
ResultSet resultat = state.executeQuery(ma_requette);

// Recuperation et traitement du resultat
System.out.println("Dans ma relation:");
while(resultat.next()){
System.out.println(" |"+ resultat.getString("CODE_STAGE")+" |"+resultat.getString("LIB_STAGE"));

}
state.close();
connect.close();
}
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
29 sept. 2009 à 18:50
thanks pour le Jconnector. : Welcome !

que mon fichier est appelé à devenir plus grand avec le temps et je désire me retourner vers base de données. Qu'en penses-tu?: très bonne idée... Tu es parfaite pour la programmation d'entreprise xD

java.lang.ClassNotFoundException: com.mysql.jdbc.driver : ben il n'arrive pas à trouver le driver. Tu ne l'as pas mis au bon endroit, pas indiqué le bon classpath ou (si tu programmes depuis un IDE) tu n'as pas correctement configuré ton IDE. Dans quel cas te trouves-tu ? Utilises-tu un IDE ou pas ?
0
Parfaite pour la programmation d'entreprise tu dis, j'aimerais bien mai je ne comprend pas vite la programmation...
Au fait j'utilise éclipse, comment remédier alors?
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
29 sept. 2009 à 19:02
Pour Eclipse, tu fais clic droit sur ton projet / Properties / Java Build Path / Add external jars. Tu navigues vers ton jar (je n'ai pas regardé le contenu de ton fichier téléchargé: si c'est un zip, tu dézippes qq part & tu trouveras probablement un dossier "lib" avec un ou plusieurs jar dedans. C'est de ces fichiers qu4eclipse a besoin pour fonctionner correctement dans ton cas)
0

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

Posez votre question
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
29 sept. 2009 à 19:05
Non, pas de dossier "lib". Le fichier dont tu as besoin s'appelle "mysql-connector-java-5.1.10-bin.jar" et est situé à la racine du fichier zip.
0
merci Sandul, mais j'ai eu chaud...En tout cas l'erreur ne se produit plus.
Mais dit cette ligne est correct hein:
Connection connect = DriverManager.getConnection ( "jdbc:mysql:localhost","","" );

En fait je parcourais le livre " Apprendre JAVA et C++ en parallèle" et on disait d'ajouter au driver l'adresse IP du serveur,ainsi que le numéro de port.
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
30 sept. 2009 à 09:50
Merci Sandul, mais j'ai eu chaud: 25° en Corse, dixit meteo france ^^

Connection connect = DriverManager.getConnection ( "jdbc:mysql:localhost","","" ); : localhost:3306, je crois. Mais ma mémoire flanche, je n'ai plus utilisé mysql depuis longtemps.

Pas lu ton livre non plus. 3306 est le port par défaut de mysql et localhost est okay si tu fais une connexion à la base mysql installée sur ta machine (tu peux remplacer localhost par 127.0.0.1, aussi)

++
0
Bonjour Sandul, je crois que je me suis réjouit trop tôt. ce matin j'ai voulu m'assurer que tout marche comme auparavant. Alors j'ai redémarré mon pc. Alors surprise; quand je lance éclipse et tente d'exécuter mon code la même erreur " java.lang.ClassNotFoundException: com.mysql.jdbc.driver "
revient alors que tout marchais il y'a un moment.
En attendant je vais bidouiller pour voir. Mais répons moi si tu en sais quelque chose
A++
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
30 sept. 2009 à 10:40
Re,

Oh, zarbi tout ça. Têtre tu n'exécutes pas la même chose qu'hier? Revérifie les "libraries" dans le "java build path" du projet. Est-ce que le jar mysql s'y trouve ?

++
0
C'est vraiment bizarre comme tu l'as dit. Tout est correct comme tu me l'a indiqué.
Le jar mysql, le jar mysql-connector-java-5.1.10-bin sont bien présents dans les librairies.

J'ai beaucoup tâtonné mais rien jusque là...( poutant il faut que j'y arrive )
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
30 sept. 2009 à 13:50
Le jar mysql, le jar mysql-connector-java-5.1.10-bin sont bien présents dans les librairies. <== quel est ce "jar mysql" ? Tu as besoin uniquement de mysql-connector-java-5.1.10-bin.jar pour te connecter.
0
Coucou,
j'ai remplacé com.mysql.jdbc.driver par com.mysql.jdbc.Driver
et comme erreur il me retourne: java.sql.SQLException: No suitable driver
( driver non convenable si je ne me trompe ). Que faire de plus?
En parcourant le forum j'ai remarqué que beaucoup ont des problèmes pour la connexion comme moi actu
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
30 sept. 2009 à 17:24
Faut un "//" dans l'URL... Par exemple:

package caroline;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class MainMySQLConnectionTest {
	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");

			Connection con = DriverManager.getConnection(
					"jdbc:mysql://localhost", "", "");
			// une requette simple
			String ma_requette = "select CODE_STAGE, LIB_STAGE from GS_STAGE";

			// Requette en utilisant un statement
			Statement state = con.createStatement();
			// On recoit
			ResultSet resultat = state.executeQuery(ma_requette);

			// Recuperation et traitement du resultat
			System.out.println("Dans ma relation:");
			while (resultat.next()) {
				System.out.println(" |" + resultat.getString("CODE_STAGE")
						+ " |" + resultat.getString("LIB_STAGE"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


++
0
Oui j'avais perçu //.
Néanmoins j'obtiens java.sql.SQLException: Accès refusé pour l'utilisateur: ''@'@localhost' (mot de passe: NON)
Pourquoi on me refuse l'accès à la base? Au moins je peux penser que le problème de driver est résolu ?
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
30 sept. 2009 à 17:33
Oui, résolu. Suffit de renseigner un couple (user / mot de passe) décent :-D

Essaie "root" sans mot de passe. J'en sais rien, je n'ai plus travaillé avec mysql depuis tellement longtemps
0
Youpi, ça marche nickel...Tu est un bon guide, merci pour ta patience; en tout cas j'ai pris beaucoup et trop beaucoup de ton temps combien précieux. J'espère que tu seras toujours dispos...
Au fait voici finalement le bon chemin:
Connection connect = DriverManager.getConnection ( "jdbc:mysql://127.0.0.1:3306/stage_ollo","root","" );

Je te reviens très vite...
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
30 sept. 2009 à 18:00
=) Content pour toi.

Je te reviens très vite... ^^
#man revenir (transitif)
No answer found. For an intransitif usage = TO LIKE. Is this the deliberate meaning ?

++
0
Je ne suis pas un as de l'Anglais, je traduis mot par mot...

Je sais qu'on communique à la base de données à travers des requêtes SQL.
J'ai fini l'implémentation de mes écrans( même si ils ne sont pas très élégants) .
Ce code est bon, mais c'est avec fichier dont je parlais. Comment le modifier pour pouvoir rediriger les différentes infos dans ma base.Surtout que j'ai des JTextField

En claire comment gérer les autres classes avec la classe SeConnecter() pour mes infos se stocke dans la base?

// code //
public class Fournisseurs extends JFrame{
private static final long serialVersionUID = 1L;
Container ContentPane;
JLabel label1, label2;
JTextField fournis1,fournis2;
JButton bout1,bout2;

private FileWriter fluxwrite; //flux en écriture (fichier texte)
private BufferedWriter fluxout;//tampon pour lignes du fichier

//Active ou désactive le bouton pour sauvegarde :
private void AutoriserSave(){
if (fournis1.getText().length()!=0 && fournis2.getText().length()!=0 )
bout1.setEnabled(true);
else
bout1.setEnabled(false);
}
/* Methode de sauvegarde des informations */
public void ecrireEnreg(String record) {
try {
fluxout.write(record);//écrit les infos
fluxout.newLine( ); //écrit le eoln
}
catch (IOException err) {
System.out.println( "Erreur : " + err );
}
}

public Fournisseurs(){
fournir();
}
void fournir(){
ContentPane = this.getContentPane( ) ;
ContentPane.setLayout(null);
ContentPane.setBackground(Color.lightGray);
setResizable(false);
setSize(570, 400);
setTitle("BORDEREAU DE COMMANDES");
setLocationRelativeTo(null);
setVisible(true);
label1 = new JLabel("N° Fournisseurs");
label1.setBounds(150, 50, 150, 23);
ContentPane.add(label1);

label2 = new JLabel("Nom Fournisseur");
label2.setBounds(150, 100, 150, 23);
ContentPane.add(label2);

fournis1 = new JTextField("");
fournis1.setBounds(300, 50, 150, 23);
ContentPane.add(fournis1);

fournis2 = new JTextField("");
fournis2.setBounds(300, 100, 150, 23);
ContentPane.add(fournis2);

bout1= new JButton("ENREGISTRER");
bout1.setBounds(150, 150, 150, 35);
ContentPane.add(bout1);

bout2= new JButton("QUITTER");
bout2.setBounds(300, 150, 150, 35);
ContentPane.add(bout2);

Document doc1 = fournis1.getDocument();// partie Modele MVC du JTextField
Document doc2 = fournis2.getDocument();
try{
fluxwrite = new FileWriter("Founisseurs.txt",true);// création du fichier(en mode ajout)
fluxout = new BufferedWriter(fluxwrite); //tampon de ligne associé
}
catch(IOException err){ System.out.println( "Problème dans l'ouverture du fichier ");}
//--> événements et écouteurs :

this.addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){

try{
fluxout.close( ); //le fichier est fermé et le tampon vidé*/
}
catch(IOException err){
System.out.println( "Fermeture impossible ");
}
dispose();
}
});
doc1.addDocumentListener(//on crée un écouteur anonyme pour le Modele (qui fait aussi le controle)
new javax.swing.event.DocumentListener() {
public void changedUpdate(DocumentEvent e) {}
public void removeUpdate(DocumentEvent e) {//une suppression est un changement de texte
textValueChanged(e);// appel au gestionnaire de changement de texte
}
public void insertUpdate(DocumentEvent e) {//une insertion est un changement de texte
textValueChanged(e);// appel au gestionnaire de changement de texte
}
});

doc2.addDocumentListener(
new javax.swing.event.DocumentListener() {
public void changedUpdate(DocumentEvent e) {}
public void removeUpdate(DocumentEvent e) {
textValueChanged(e);
}
public void insertUpdate(DocumentEvent e) {
textValueChanged(e);
}
});
bout1.addActionListener(
new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
ecrireEnreg( fournis1.getText()+" | "+ fournis2.getText());
}
});

bout2.addActionListener(
new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
}
//Gestionnaire du changement de texte dans un document
private void textValueChanged(DocumentEvent e) {
AutoriserSave();

}
}
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
1 oct. 2009 à 02:55
Hey... Ton code est bord*****, impossible à lire... xD

Pour répondre à tes questions concernant le lien entre le lien GUI - base de données:
- tu as des informations saisies par l'utilisateur dans un ou plusieurs JTextField
- il te faut un événement qui déclanche l'écriture dans la base; cet événement sera l'appui sur un bouton
- à ce moment, tu récupères les infos saisies (via des getText() sur tes JTextField) et les utilises dans une requête SQL pour les écrire dans la base ==> tout ce code est donc dans la méthode actionPerformed() de ton JButton

Il te faut un tuto JDBC. Regarde ici: https://www.roseindia.net/jdbc/jdbc.shtml surtout cette partie https://www.roseindia.net/jdbc/jdbc-mysql/InsertValues.shtml

C'est en anglais, il est vrai, mais tu feras un effort car il est indispensable de lire cette langue si tu veux faire de la programmation.

Il te faut également un tuto Swing: https://docs.oracle.com/javase/tutorial/uiswing/ (saute les parties NetBeans, tu bosses dans Eclipse). Tu peux installer également un plugin Eclipse te permettant de construire graphiquement ta fenêtre, mais je dirais qu'il faut d'abord essayer de le faire sans cet outil pour mieux comprendre

Et pour que les autres comprennent ce que ton code veut dire, il faut lire et respecter ceci: https://www.oracle.com/java/technologies/javase/codeconventions-namingconventions.html

Voici, tu as un long boulot devant toi...

Bon courage
++
0