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
Hello,
Peut etre je me trompe mais à mon avis tu dois charger ton driver jdbc de la manière suivante......
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
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 :)
Bonnes fêtes à toi aussi et à tout le monde :)
Niroken
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
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 :
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
: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 :) :)
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 ;)
Hello,
Ou alors, si tu veux que ca marche à tous les coups tu fais :
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 :
Bonne chance,
Niroken
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
Ce n'est plus la même chose...
Retour au point de départ, la classe du pilote JDBC n'est pas dans le CLASSPATH...
mais configurer ce classpath,j'ai essayé mais jai y arrive pas :cry: :cry:
qlq1 m'aidé svp help help
jai essaye tout mais comme dhabitude pas de resultat
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
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
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
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 :
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
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
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:
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
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:
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:
merci de 'aider svp jai essayé tout maiss pas de résultat :cry: :cry: :cry: :cry: [/code]
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
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:
choix 2,3,4 erreur
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:):)
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
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:
bonne année pout vous et merci encore pour les réponces
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.
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
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.
Bonne chance,
Niroken
merci pour le code ;je l'essaye merci bcp
bonsoir,
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 :) :)
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 :
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
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
Hello
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 :
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 :
Bonne chance,
Niroken
bonjour,
j'ai ajouter le classe SimpleFrame à mon code mais j'ai un souci au niveau de code suivant
il me propose de faire un bloc try catch comme suivant:
donc je suis bloque a ce niveau
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.
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.
Hello,
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
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
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:
class testjdbc1:
le class testjdbc1
merci encore :D :D :D
pour la classe testjdbc1 cest le deuxieme code qui correcte :lol: :lol:
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
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".
j'attend vos consigne ,,please help me
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"
Bon nom est initialisée un peu plus haut dans le code :
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 :
Ca marchera bcp mieux :)
Bonne chance,
Niroken
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à".
Tu ne renseignes pas deux fois le même par hasard?
pardon j'ai pas compris ta question
non j'ai utiliser des deux noms déférents
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 :
et non
Puisque j'imagine que nom est un champ de type VARCHAR dans ta base de données.
Bonne chance,
Niroken
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:
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:
et
merci pour les consignes
Hello,
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 :
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)
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....
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