impossible d'ouvvrir une bd hsql

timejava
impossible d'ouvvrir une bd hsql

slt tt le monde,je suis débutant dans le développmenet java,j'ai essayé de créer une base de donne via hsql.lors de l'execution j'ai le message suvant
===============================
Pilote introuvable
java.lang.ClassNotFoundException: org.hsqldb.JdbcDriver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at metier.GestMetier.selectEtudParVille(GestMetier.java:13)
at TestApplication.main(TestApplication.java:12)

===============================
merci d'avance

Niroken

Hello,

Peut etre je me trompe mais à mon avis tu dois charger ton driver jdbc de la manière suivante......

Class.forName("org.hsqldb.JdbcDriver").newInstance();

Et le message que tu obtiens t indique que le classLoaderl ne trouve pas la classe org.hsqldb.JdbcDriver.

De deux choses l'une :
- Ou tu as a disposition un jar qui contient cette classe, auquel cas il te faut ajouter ce jar dans ton classpath.
- Ou tu n'as pas de jar contenant cette classe, auquel cas il te faut le télécharger puis l'ajouter dans le classpath de ton application.

Bonne chance,
Niroken

fredericmazue

Salut Niroken :)

Class.forName("org.hsqldb.JdbcDriver");

est suffisant en fait. Et oui, il faut que notre ami timejava mette le jar de hsqldb dans son CLASSPATH :)

Joyeuses fêtes à tous :)

Niroken

Bonnes fêtes à toi aussi et à tout le monde :)

Niroken

timejava

merci pour les reponces;
je vous informe que j'utilise eclipse europ,donc j'ai ajouter le jar d'hsql en utlisant le builth de projet.
pour le téléchargement de driver j'ai déja essayer avec les deux exmples precedents.j'ai remarque que vous parlez a propos de classpath,jusqu'à maintenant je n'arrive pas à configurer soit sur vista ou XP sp2.

bonne nouvelle année:)
et merci encore

Niroken

Hello,

Tu utilises Eclipse pour développer ton application et tu as as ajouté le jar d hsql dans le buildpath de ton application donc raisonnablement si tu fais un :

import org.hsqldb.JdbcDriver;

dans n'importe quel de tes fichiers sources, l'auto complétion d'eclipse ne devrait pas raler, et ca devrait compiler. (tu vérifieras, on n'est jamais trop prudent :) ).
Si ca ne marche pas, il faudra vérifier que le dit-jar contienne bien la classe "org.hsqldb.JdbcDriver", tu peux ouvrir un jar comme un fichier d'archive pour voir son contenu.

Ensuite si tu lances ton appli depuis eclipse avec un "run as"->"java application", il n'y aura aucun problème.

Maintenant si tu packages ton application dans un .jar et que que tu la lances hors eclipse, il faudra configurer le classpath au lancement c'est a dire lancer une commande du style :

java -classpath MonJar.jar;LeJarHsqlDB.jar MaClasseMain

Bonne chance,
Niroken

timejava

:lol: j'ai arrivé à ouvrir la bdd ,donc j'ai passé au étape suivant;cest utiliser le sql server 2002,je vous éxplique la structure de mon programme et le souci que jai rencontré et bien sur merci d'avance.

une bdd avec deux tableaux :
SourceTest-->Article6
-->Fournisseaur
deux classes:
===================================
class Saisie
{
public String Saisirchaine() throws Exception
{
byte T[]=new byte[80];
System.in.read(T);
String ch=new String(T);
ch=ch.substring(0,ch.indexOf("\r\n"));
return ch;
}
public int SaisirEntier() throws Exception
{
String ch=Saisirchaine();
Integer v=new Integer(ch);
return v.intValue();

}

}
===================================
import java.sql.*;
public class TestJDBC1

{
Saisie S=new Saisie();
public TestJDBC1()
{}
public void Afficher()throws Exception
{

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection Cn=DriverManager.getConnection("jdbc:sqlserver://nomdeserveur ou machine;database=SourceTest6;user=sa;password=");

Statement S=Cn.createStatement();
ResultSet RS=S.executeQuery("Select num_article,nom_article,fornu_article From Article6,Fournisseur where Article6.num_fourni=Fournisseur.num_fourni");
while(RS.next())
{
System.out.println(" Le numero d article : " + RS.getInt(1));
System.out.println(" Le Nom d article : " + RS.getString(2));
System.out.println(" Le Fournisseur : " + RS.getString(3));
}
Cn.close();
}


public void Ajouter()throws Exception
{

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection Cn=DriverManager.getConnection("jdbc:sqlserver://nomdeserveur ou machine;database=SourceTest6;user=sa;password=");

System.out.println("Saisir un numero d article");
int num_article=S.SaisirEntier();
System.out.println("Saisir un nom d Article");
String nom_article=S.Saisirchaine();
System.out.println("Saisir un numero d Fournisseur");
int num_fourni=S.SaisirEntier();
Statement S=Cn.createStatement();
ResultSet rs=S.executeQuery("select num_article from Article6 where num_article="+num_article);
if(rs.next())
{
System.out.println("cet article existe déjà");
}
else
{

String req="insert into Article values("+ num_article +",'"+ nom_article +"'," + num_fourni + ")";
S.executeUpdate(req);

System.out.println("Ajout a ete effectuee");
Cn.close();
}

}

public void ModifierA()throws Exception
{

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection Cn=DriverManager.getConnection("jdbc:sqlserver://nomdeserveur ou machine;database=SourceTest6;user=sa;password=");
Statement Sr=Cn.createStatement();
System.out.println("Saisir un numero d article");
int num_article=S.SaisirEntier();

String reqRechercher="select * from Article where NumArt="+num_article;
ResultSet RS=Sr.executeQuery(reqRechercher);
boolean T=RS.next();
if(!T)
{System.out.println("cet article n existe pas");
}
else
{
System.out.println("Saisir le nouveau nom de article");
String nom_article=S.Saisirchaine();
System.out.println("Saisir le nouveau numero de Fournisseur");
int num_fourni=S.SaisirEntier();
String req="Update Article set NomArt='"+ nom_article +"',NumFou=" + num_fourni;
Sr.executeUpdate(req);


System.out.println("La modification a ete effectuee");
Cn.close();
}

}

public void Supprimer()throws Exception
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection Cn=DriverManager.getConnection("jdbc:sqlserver://nomdeserveur ou machine;database=SourceTest6;user=sa;password=");
Statement Sr=Cn.createStatement();
System.out.println("Saisir un numero d article");
int num_article=S.SaisirEntier();

String reqRechercher="select * from Article where NumArt="+num_article;
ResultSet RS=Sr.executeQuery(reqRechercher);
boolean T=RS.next();
if(!T)
{System.out.println("cet article n existe pas");
}
else
{

String req="delete from Article where NumArt=" +num_article;
Sr.executeUpdate(req);


System.out.println("La suppression a ete effectuee");
Cn.close();
}



}
public static void main(String args[])
throws Exception
{
TestJDBC1 A=new TestJDBC1();

int c;
do
{
System.out.println(" ******************Gestion Article******************");
System.out.println(" *________________________________________________ *");
System.out.println(" *| |*");
System.out.println(" *| 1. Afficher la liste des atrticles |*");
System.out.println(" *| 2. Ajouter un article |*");
System.out.println(" *| 3. Modifier un article |*");
System.out.println(" *| 4. Supprimer un article |*");
System.out.println(" *| 5. Quiter |*");
System.out.println(" *|_______________________________________________|*");
System.out.println(" * *");
System.out.println(" ***************************************************");

System.out.print("SVP saisir votre choix :");
Saisie S=new Saisie();
c=S.SaisirEntier();
if(c==1)
{
A.Afficher();
}
if(c==2)
{
A.Ajouter();
}
if(c==3)
{
A.ModifierA();
}
if(c==4)
{
A.Supprimer();
}


}
while(c!=5);
}

}

===================================

lorsque je lance l'execution j'ai le message suivant:
===============================
SVP saisir votre choix :1
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1938)
at Saisie.Saisirchaine(Saisie.java:8)
at Saisie.SaisirEntier(Saisie.java:13)
at TestJDBC1.main(TestJDBC1.java:141)

Process completed.

===============================
j''ai utlise JCreator et eclipse aussi

connecernat l'environnement je vous cache pas j'ai recherche mais j'ai arrivé pas à configurer le classpath en utilisant le jar de jdbc.
pour le jdbc j'ai télécharger plusieurs versant.
pour jdk j'utilise jdk1.6.

:( :( :( :( aidez moi svp j'ai epuisé tt mes efforts pour y arriver mais pas de chance.
merci de l'aide et bonnes fétes :) :)

fredericmazue

Quote:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1

Cette fois, rien à voir avec JDBC :).
Comme l'exception l'indique (Saisie.Saisirchaine(Saisie.java) ) ça se passe dans ta méthode Saisirchaine. Tu y cherches quelque chose qui n'est est pas. substring VEUT trouver ce qu'on lui dit de chercher, c'est sa nature. Et du coup substring bosse tant qu'elle n'a pas trouvé et ici elle bosse jusqu'au delà du dernier caractère de ta chaine.

Parce que tu cherches "\r\n" qui n'y est pas.

Essaie:
ch = ch.substring(0, ch.indexOf("\n"));

à la place ;)

Niroken

Hello,

Ou alors, si tu veux que ca marche à tous les coups tu fais :

ch = ch.substring(0, ch.indexOf(System.getProperty("line.separator")));

La JVM prendra la constante "saut de ligne" associée à l'OS sur lequel tourne ton appli.

Ceci dit il reste quand même un point sur lequel il faut faire attention, tu as déclaré un tableaux de byte de taille 80, donc si tu saisies en entrée une chaine de plus de 80 caractères, il n'y aura pas de saut de ligne dans cette chaine par conséquent tu auras toujours ton exception remontée....

Pour lire une ligne depuis l'entrée standard j'utiliserais plutôt ceci :

public String Saisirchaine() throws Exception {
		InputStreamReader vInputStreamReader = new InputStreamReader(System.in); 
		BufferedReader vBufferedReader = new BufferedReader(vInputStreamReader); 
		String vLigne = vBufferedReader.readLine();
		return vLigne; 
	}

Bonne chance,
Niroken

timejava

merci encore :wink:
j'ai essayé avec "ch=ch.substring(0,ch.indexOf("\n"));" et j'ai l'erreur suivant:
===================================
Exception in thread "main" java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at TestJDBC1.Afficher(TestJDBC1.java:11)
at TestJDBC1.main(TestJDBC1.java:144)

Process completed.

===================================

merci d'avance

fredericmazue

Ce n'est plus la même chose...

Quote:
Exception in thread "main" java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver

Retour au point de départ, la classe du pilote JDBC n'est pas dans le CLASSPATH...

timejava

mais configurer ce classpath,j'ai essayé mais jai y arrive pas :cry: :cry:

timejava

qlq1 m'aidé svp help help
jai essaye tout mais comme dhabitude pas de resultat

Niroken

Bonsoir,

Deja si tu avais bien lu le topic que j'ai mentionné plus haut, tu aurais réglé ce soucis.... bon reprenons.....

Dans un de tes fichiers .java tu fais un

import com.microsoft.sqlserver.jdbc.SQLServerDriver;

Si l'auto complétion d eclipse ne rale pas, c est que tu as ajouté le dit-jar dans les références de ton projet, sinon il faut le rajouter.

Ensuite si tu lances ton application depuis eclipse, tu cliques droit sur la classe qui contient la méthode "main" de ton programme "run as" -> "java application", ca devrait marcher.

Si tu packages ton application dans un .jar et que que tu la lances hors eclipse, il faudra configurer le classpath au lancement c'est a dire lancer une commande du style :

java -classpath MonJar.jar;LeJarSQLServer.jar MaClasseMain

Si tu suis ces instructions et que ca ne marche pas.. tu es maudit, la il faut se faire exorciser :D

Bonne chance,
Niroken

timejava

slt j'ai essayé de run mon application et j'ai un nouveau erreur :
===========================================
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: Échec de la connexion TCP/IP à l'hôte . java.net.ConnectException: Connection refused: connect
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.loginWithoutFailover(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at TestJDBC1.Ajouter(TestJDBC1.java:31)
at TestJDBC1.main(TestJDBC1.java:149)
===================================
merci d'avance

Niroken

Hello,

C'est deja mieux, la pour ton erreur, il faut vérifier si ton sql server est démarré sur ta machine.

Bon sinon en relisant ton code, je viens de voir ceci :

Connection Cn=DriverManager.getConnection("jdbc:sqlserver://nomdeserveur ou machine;database=SourceTest6;user=sa;password="); 

On va dire que c'est une url de connection originale ma foi... :D
Je pense qu'à la place de "nom de serveur ou machine", il faut que tu donne le nom de l'instance SQL server qui est démarré sur ton poste.
Si ce n'est pas ca il faudra relire la doc associée a ton driver.

Bonne chance,
Niroken

fredericmazue

Quote:
et j'ai un nouveau erreur :

Oui mais c'est encore autre chose :)

Puisque tu n'as plus ClassNotFoundException, la classe du pilote JDBC est trouvée, donc dan sle CLASSAPTH, donc ce point est réglé.

Maintenant tu as

Quote:
com.microsoft.sqlserver.jdbc.SQLServerException: Échec de la connexion TCP/IP à l'hôte . java.net.ConnectException: Connection refused: connect

C'est une erreur qu'on peut rencontrer quand un pare-feu est fermé. mais dans ton cas c'est encore autre chose je pense:

Quote:
nomdeserveur ou machine

Qu'est-ce que c'est que ça dans ta chaine de connexion ? Tu dois mettre le vrai nom de la machine à cet endroit. Et une fois ceci fait, si l'erreur persiste, regarde du côté du pare-feu

timejava

slt,
je crois que c'est le jar jdbc j'utilise le jar de sql server 2005 par contre jai installé le sql server 2000.Est ce aue vous pouvez maider dans cette coté je n'arrive pas a téléchargé le jar de 2000.
merci encore :wink: :wink:

timejava

bonjour,
j'a essayé une nouvelle fois et toujoujrs je n'arrive pas.j'ai désinstaller et rennstaller sql server 2000 jdk aussi et toujours jai le méme code:

Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: Échec de la connexion TCP/IP à l'hôte . java.net.UnknownHostException: 
	at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(Unknown Source)
	at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(Unknown Source)
	at java.sql.DriverManager.getConnection(DriverManager.java:582)
	at java.sql.DriverManager.getConnection(DriverManager.java:207)
	at TestJDBC1.Afficher(TestJDBC1.java:13)
	at TestJDBC1.main(TestJDBC1.java:145)

merci de 'aider svp jai essayé tout maiss pas de résultat :cry: :cry: :cry: :cry: [/code]

fredericmazue

Quote:
UnknownHostException

La machine sur laquelle tu essaies de te connecter n'est pas trouvée. soit parce que le réseau n'est pas bien configuré, soit (et plus probablement) parce que tu as donné une mauvaise chaine de connexion. Sans doute ce que tu as mis à la place de "nomdeserveur" est incorrect
timejava

vraiment je vous cache pas que j'arrive pas à dormir car ci la premier fois
que jessaye de faire un chose et que je n'arrive pas.
donc j'ai essayé de désinstaller le sql server et aussi jdk:idem.
lorsque je choix 1 j'ai l'erreur suivante:

Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: 
Échec de la connexion TCP/IP à l'hôte . java.net.UnknownHostException: 
   at 
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown 
Source) 
   at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(Unknown Source) 
   at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(Unknown Source) 
   at java.sql.DriverManager.getConnection(DriverManager.java:582) 
   at java.sql.DriverManager.getConnection(DriverManager.java:207) 
   at TestJDBC1.Afficher(TestJDBC1.java:13) 
at TestJDBC1.main(TestJDBC1.java:145)

choix 2,3,4 erreur

com.microsoft.sqlserver.jdbc.SQLServerException: Échec de la connexion TCP/IP 
à l'hôte . java.net.ConnectException: Connection refused: connect

j'ai créé une nouvelle bdd j'ai créé les deux tables:idem.
au niveau matériel j'ai un souci avec la carte réseau sous xp car j'ai un
compaq presario livré avec vista donc j'ai essayé d'installer la carte
réseau:idem.
lorsque j'ai vérifie manager sql j'ai trouvé qu'il faut donner des roles et
des autorisations :j'ai sélectioné tout par défeaut.
j'arrive pas a trouve une soulution,si non est ce que je peux utiliser un
autre SGBD pour ma base en attend que je trouve une solution,que sgbd vous me
conseil.
merci d'avance:):)

Niroken

Hello,

Ben au début de ton topic tu avais utilisé HSQLDB comme SGBD, je ne vois pas pq tu n'as pas continué dans cette voie, C'est bcp plus simple à manipuler en java qu une connexion à SQL Server.

Bonne chance,
Niroken

timejava
eurika

eurika,j'aii trouve la réponse,c'est la compatibilité de jdk qui jai utilose avec sql2000.maintenant j'ai essayé le méme code avec sql server 2005 et j'ai l'erreur suivante:

SVP saisir votre choix :3
Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:sqlserver:server;database=Test;user=sa;password=
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at Test1.modiefier(TestJDBC1.java:54)
	at Test1.main(TestJDBC1.java:127)

bonne année pout vous et merci encore pour les réponces

fredericmazue

Quote:
No suitable driver found

Si tu as changé pour SQL 2005 il semble que tu doives aussi changer ton pilote JDBC, pour que les deux soient en phase. En tout cas, c'est ce que le message d'erreur semble vouloir dire.
timejava

Bonjour,

Aprés les vacances de la nouvelle,que je souhait que vous avez passé
des bonnes moments, j'ai essayé de dévéloppez m'application et j'ai ajouté un interface graphique;mais je suis bloqué ,j'ai une seule question comment nous pouvons ecrire dans JTextFiield et ensuite envoyer l'information à la base de donnée ;y'a t il un ecouteur ...

Je suis besion de vous aides ,merci d'avance

Niroken

Hello,

Je te montre ici comment récupérer un texte depuis un JTextField quand on clique sur un boutton.
Le texte sera affiché sur la sortie standard via un System.out.println();

Pour croiser ca avec ta BDD, tu liras le commentaire que j'ai placé dans la méthode actionPerformed() de l'ActionListener du Boutton.

package graphic;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class SimpleFrame extends JFrame {

    private static final long serialVersionUID = 1L;
    
    private JButton mActionButton;
    private JTextField mTextField;
    
    public SimpleFrame () {
        setSize(new Dimension(200, 100));
        setLayout(new FlowLayout());
        
        mActionButton = new JButton("Valider");
        mActionButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent pE) {
                System.out.println(mTextField.getText());
                // Ici tu devras passer en paramètre le contenu  
                // du textField une méthode qui interagit avec la BDD.
                // D après ton code précédent ca donnerait :
                // ******************************************* //
                // TestJDBC1 vTestJDBC1 = new TestJDBC1();
                // vTestJDBC1.Ajouter(mTextField.getText());
                // ******************************************* //
                // Il faudra changer la signature de TestJDBC1.Ajouter();
            }
            
        });
        
        mTextField = new JTextField(10);
        
        add(mTextField);
        add(mActionButton);
        
        setVisible(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

}

Bonne chance,
Niroken

timejava

merci pour le code ;je l'essaye merci bcp

timejava

bonsoir,


public void actionPerformed(ActionEvent pE) { 
                System.out.println(mTextField.getText()); 
                // Ici tu devras passer en paramètre le contenu  
                // du textField une méthode qui interagit avec la BDD. 
                // D après ton code précédent ca donnerait : 
                // ******************************************* // 
                // TestJDBC1 vTestJDBC1 = new TestJDBC1(); 
                // vTestJDBC1.Ajouter(mTextField.getText()); 
                // ******************************************* // 
                // Il faudra changer la signature de TestJDBC1.Ajouter(); 
            } 
            
        }); 

changer la signature de TestJDBC1.ajouter() signife que j'ajoute dans la méthode Ajouter() une signature comme suivant Ajouter (int mTextField)
cest bien à ça ;si non comme je peu la chenger

merci d'avance :) :)

Niroken

Hello,

J'avoue, je n'ai pas regarder en détail ton code à propos de la classe TestJDBC1, mais toujours est t'il qu'à un moment donné tu vas devoir passer le contenu du JTextField en paramètre d'une méthode.

Puisque le contenu d'un JTextField est de type String, je pensais plutot à une signature du type :

TestJDBC1.Ajouter(String pTextFieldValue);

mais bon, tu peux faire un cast du pTextFieldValue en int (si tu as besoin) avant ou après, tu as libre choix :)

Bonne chance,
Niroken

timejava

merci encore pour vos consigne.
j'ai essayé le premier code comme vous avez dis que le résultat sera affiché dans le console mais comment fait pour que les donnée transfer directement à la base sans cet étape.
dons le code ,pour le nom_article et num_fourn je suivre méme code cest bien ça

Niroken

Hello

Quote:

merci encore pour vos consigne.

Et comment donc, si c est pas respecté, va y avoir du coup de fouet :D

Par rapport à ta question, deja, tu as visiblement deux données à transmettre :
- nom_article
- num_fournisseur

Donc il va falloir logiquement que tu implémentes ta fenetre pour mettre deux JTextField, un associé a chaque élément.

Ensuite le fait est que mon ancien code affiche le contenu du JTextField dans la console uniquement parceque j'ai fait :

System.out.println(mTextField.getText());

Ce qui était important ce n'était pas tellement l'affichage, mais comment récupérer le contenu d'un JTextField, au moyen de JTextField.getText();

Pour rester cohérent avec ton code d'avant, le code de l'actionPerformed devra ressembler à ceci :

public void actionPerformed(ActionEvent pEvent) {
    TestJDBC1 vTestJDBC1 = new TestJDBC1();
    vTestJDBC1.Ajouter(mNomArticleTextField.getText(), mNumFournisseurJTextField.getText());
}

Bonne chance,
Niroken

timejava

bonjour,

j'ai ajouter le classe SimpleFrame à mon code mais j'ai un souci au niveau de code suivant

TestJDBC1 vTestJDBC1 = new TestJDBC1();        
vTestJDBC1.Ajouter(m1TextField.getText());

il me propose de faire un bloc try catch comme suivant:
try {
					vTestJDBC1.Ajouter(m1TextField.getText());
	} catch (Exception e) {					// TODO Auto-generated catch block
		e.printStackTrace();
	}

donc je suis bloque a ce niveau
fredericmazue

En Java certaines exceptions sont dites contrôlées. Concrètement ça veut dire que le programmeur doit s'en occuper.

Tu as deux possibilités:

1) tu déclares ta méthode comme pouvant lever l'exception avec une clause throws:

exemple void ma_methode throws l_exception_en_question () '
}

2) Soit tu acceptes ce que tu propose ton éditeur, c'est à dire mettre ton code dan un bloc try et intercepter l'exception dans le bloc catch qui va avec.

timejava

j'ai déjà testé le bloc try catch donc l'excution est ok ,mais lorsque je vérife la bdd il y a aucun changement aucune information ajouter.

Niroken

Hello,

Quote:

j'ai déjà testé le bloc try catch donc l'excution est ok

Donc on est bien d'accord, tu n'as aucun message d'erreur dans ta console et tu as bien un "e.printStackTrace()" dans ta clause catch?

Si ce n'est pas le cas, si une exception est remontée, ou tu l'aurais manquée ou tu ne la verras pas....

Sinon en faisant un retour arrière sur ton code, j'ai vu que tu faisais des

SaisirEntier();

méthodes qui lisent sur ton entrée standard les infos que tu vas saisir.

As tu bien supprimé ces méthodes? pcke sinon, ca va te bloquer ton programme jusqua ce que tu saisisses qq chose sur l'entrée standard.

Sinon ben comme je n'ai pas plus d'idées, il faudrait que tu postes ton code final pour qu'on voit.

Bonne chance,
Niroken

timejava

Je vous éxplique avant de passer à l'utilisation de ma bdd principale j'ai crée une nouvelle bdd avant un table avec un seul colone que j'ai nommé "nom" (juste pour tester).
avant de recevoir ta réponce j'ai enlevé SaisirEntier();
mais il me demande de initialisé mon variable donc j'ai initialisé ce variable=null donc la valeur null est enregistré dans la bdd.
Voila mon code pour ajouter une donnée.
class simpleframe:

import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 

public class Simple extends JFrame { 

    private static final long serialVersionUID = 1L; 
    
    private JButton mActionButton; 
    private JTextField m1TextField; 
   
    
    public Simple() { 
        setSize(new Dimension(200, 100)); 
        setLayout(new FlowLayout()); 
        
        mActionButton = new JButton("Valider"); 
        mActionButton.addActionListener(new ActionListener() { 

            public void actionPerformed(ActionEvent pE) { 
                // Ici tu devras passer en paramètre le contenu  
                // du textField une méthode qui interagit avec la BDD. 
                // D après ton code précédent ca donnerait : 
                // ******************************************* // 
                 TestJDBC1 vTestJDBC1 = new TestJDBC1();                 
				 try {
					vTestJDBC1.Ajouter(m1TextField.getText());
				} catch (Exception e) {
					System.out.println("attention");
					
				}
				 
                // ******************************************* // 
                // Il faudra changer la signature de TestJDBC1.Ajouter(); 
            } 
            
        }); 
        
        m1TextField = new JTextField(10); 
       
        
        add(m1TextField);

        add(mActionButton); 
        
        setVisible(true); 
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    } 
    public static void main(String[]args){
    	Simple sf=new Simple();
    }

} 

class testjdbc1:
import java.sql.*; 

public class TestJDBC1 {


	public void Ajouter(String string,String m2,String string2)throws Exception{
		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
		Connection Cn=DriverManager.getConnection("jdbc:odbc:SourceTest","",""); 
		
		Statement S=Cn.createStatement(); 
		int num_article = 0;
		ResultSet rs=S.executeQuery("select num_article from article where num_article="+num_article); 
		if(rs.next()){
			System.out.println("cet article existe déjà");
		}
		else{
			String nom_article = null;
			int num_fournisseur =0;
			String req="insert into Article values("+ num_article +",'"+ nom_article +"'," + num_fournisseur + ")"; 
			S.executeUpdate(req); 

			System.out.println("Ajout a ete effectuee"); 
			Cn.close();
		}		
	}
}

le class testjdbc1
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


public class TestJDBC1 {
	String nom;
	Saisie S=new Saisie(); 
	public TestJDBC1(){
		
	}
	public void Ajouter(String m1TextField)throws Exception{
		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
		Connection Cn=DriverManager.getConnection("jdbc:odbc:Test","",""); 

 
		String nom;  
		Statement s=Cn.createStatement(); 
		ResultSet rs=s.executeQuery("select nom from Test where nom="+nom); 
		if(rs.next()){
			System.out.println("cet article existe déjà");
		}
		else{
			String req="insert into Test values('"+nom+"')"; 
			s.executeUpdate(req); 

			System.out.println("Ajout a ete effectuee"); 
			Cn.close();
		}		
	}
}

merci encore :D :D :D

timejava

pour la classe testjdbc1 cest le deuxieme code qui correcte :lol: :lol:

Niroken

Ben d'après ton code, tu as 2 choix possibles,

Ou ton enregistrement existe et tu verras sur la console :
"cet article existe deja"
Ou il n existe pas et tu verras :
"Ajout a ete effectuee"

Que vois tu sur cette console?

Bonne chance,
Niroken

timejava

pour la premier fois j'ai "Ajouter a ete effectue" donc il a ajouté le variable "null" à mon tableu mais aprés j'ai "cet article existe déja".

timejava

j'attend vos consigne ,,please help me

Niroken

Voici mes consgnes jeune padawan :) :

Alors tt d'abord, tu auras remarqué que tu insert dans ta table test une valeur issue de la variable "nom"

insert into Test values('"+nom+"')

Bon nom est initialisée un peu plus haut dans le code :

String nom;

Mais manque de chance, entre les deux instructions "nom" n'est jamais valorisée, donc cette variable est nulle.
Pour le coup tu insères null dans ta base ce qui est tt à fait logique.

Il faudrait faire :

String nom = m1TextField;

Ca marchera bcp mieux :)

Bonne chance,
Niroken

timejava

merci infiniment pour ce code mais j'ai rencontre un souci ,pour la premierr fois ca marche mais si j'essye dans enregistre pour la deuxieme fois j'ai le message :"cet article existe déjà".

Niroken

Tu ne renseignes pas deux fois le même par hasard?

timejava

pardon j'ai pas compris ta question

timejava

non j'ai utiliser des deux noms déférents

Niroken

Je dois t'avouer que ca me surprend pcke j'ai fait un test sur mon poste en entrant deux noms différents, ca marche..... les deux sont insérés.

Bon par contre, c'est vrai il y encore une coquille dans le code, la requete "select" doit avoir la syntaxe suivante :

ResultSet rs=s.executeQuery("select nom from Test where nom='"+nom+"'");

et non
ResultSet rs=s.executeQuery("select nom from Test where nom="+nom);

Puisque j'imagine que nom est un champ de type VARCHAR dans ta base de données.

Bonne chance,
Niroken

timejava

merci bcp enfin le code marche.
vraiment je veu remercie,comme vous avez dit je suis un padwan mais l'objet de ces forum c'est idé les padwan comme moi.
j'espére que vous aurez toujours le temps pour m'aider pour depasser l'étape de padwan :lol: :lol: :lol:

timejava

slt cest moi à nouveau.
j'ai un grand pb ;lorsque je voudrais modifier un information sur la bdd touts les informations sur la table.Voila mon code:

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

public class Modifier {
	
	String mTextField;
	String m1TextField;
	
	public Modifier(){
		
	}
	public  void Modifier1(String m1TextField,String mTextField)throws Exception{

		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
		Connection Cn=DriverManager.getConnection("jdbc:odbc:Test","",""); 
		Statement Sr=Cn.createStatement(); 
		String nom = mTextField ;
		String nom1 = m1TextField ;

		String reqRechercher="select nom from Test where nom='"+nom+"'"; 
		ResultSet RS=Sr.executeQuery(reqRechercher); 
		boolean T=RS.next(); 
		if(!T) {
			Dialog6 dialo = new Dialog6();
		}
		else{ 			 
			String req="Update Test set nom='"+nom1+"'"; 
			Sr.executeUpdate(req); 

            Dialog5 dialo = new Dialog5();
			Cn.close();
		}

	}

}

et
import java.awt.Button;
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.Label;
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JTextField;
import javax.swing.*;

public class FrameMo extends JFrame { 
	
    JTextField mTextField = new JTextField();
    JTextField m1TextField = new JTextField(); 

    public FrameMo () {
    	super("ajouter");
        setSize(400,400); 
        setLayout(null);        
        setVisible(true); 
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
        
        add(mTextField);
        add(m1TextField);
        
        Label l=new Label("Entrez le nom de la article:");
        l.setBounds(20,70,200,40);
        add(l);        
        mTextField.setBounds(250,80,130,20);        

        Label l1=new Label("Entrez le nouveau nom de la article:");
        l1.setBounds(20,100,200,40);
        add(l1);        
        m1TextField.setBounds(250,110,130,20);
        
        JButton mActionButton = new JButton("Valider");
        mActionButton.setBounds(250,220,130,30);
        add(mActionButton);
        mActionButton.addActionListener(new ActionListener() { 

            public void actionPerformed(ActionEvent pE) { 
                  Modifier vModifier = new Modifier(); 
                 try {
					vModifier.Modifier1(m1TextField.getText(),mTextField.getText());
				} catch (Exception e) {
					e.printStackTrace();
				} 
                } 
            
        });  
     
     }
}

merci pour les consignes

Niroken

Hello,

Quote:

j'ai un grand pb ;lorsque je voudrais modifier un information sur la bdd touts les informations sur la table.Voila

Bon alors, de ce que je comprends... tu voudrais modifier un champ particulier de ta table, et quand tu le fais, ca te les modifies tous....

En fait pour faire pour faire ca il faut être un peu plus précis dans ton SQL.

Si tu fais :

"Update Test set nom='"+nom1+"'"; 

Ca aura pour action de mettre la valeur de 'nom1' pour chaque ligne de la colonne 'nom'
Si tu veux modifier une valeur particulière il te faut faire ca...(je te donne la requete en rapport avec ton code)

"Update Test set nom='"+nom1+"' where nom='"+nom+"'"; 

Cette requete va remplacer dans la colonne nom, la ligne dont la valeur vaut 'nom' par 'nom1'...bon comme c'est un peu le mélange complet dans tes variables..je te proposerais....

String nomAncien = mTextField;
String nomNouveau = m1TextField;

Y a encore moyen d'améliorer mais si tu choisis des noms de variables plus clairs, tu 'ty retrouveras mieux dans ton code.

Bonne chance,
Niroken