View previous topic :: View next topic |
Author |
Message |
loopx Advocate
Joined: 01 Apr 2005 Posts: 2787 Location: Belgium / Liège
|
Posted: Fri Oct 14, 2005 2:55 pm Post subject: [java] connexion à un serveur mysql (resolu) |
|
|
J'ai quelque souci avec le programme que je suis entrain de réaliser:
Code: |
Demarrage de BDloopx...
echec pilote : java.lang.ClassNotFoundException: org.gjt.mm.mysql.driver
fin de la connexion
Fin...
|
En fait, un drivers pour me connecter à ma base de donnée... Pourquoi ne trouve t'il pas la class ???
J'ai emergé eclipse-sdk, sun-jdk, jdbc-mysql...
Code: |
public class Connexion {
public Connexion() {
//Nom de mon pilote
//String pilote = "com.mysql.jdbc.Driver";
String pilote = "org.gjt.mm.mysql.driver";
try{
//Chargement de mon pilote
Class.forName(pilote);
//Connexion à ma base mysql avec mon login et mot de passe ( à vous de changer cela)
Connection connexion = DriverManager.getConnection("jdbc:mysql://serveur/film","root","XXX");
//Création de mon statement qui va me permettre d'executer mes requetes
Statement instruction = connexion.createStatement();
//Ma table s'appelle coffees et tout ce qui reste dépend d'elle
//Vous devez changer certaines infos comme le nom de la table et celui des colonnes
ResultSet resultat = instruction.executeQuery("show tables");
}
catch (Exception e){
System.out.println("echec pilote : "+e);
}
}
}
|
j'ai testé avec 2 pilotes, mais je comprend pas cette notion de pilote.. Le nom est une adresse retournée ?? bizarre, bizarre....
i need help
EDIT: c'est bizarre ca je trouve
Code: |
loopx@loopx-nb ~ $ java -classpath
*** glibc detected *** free(): invalid next size (fast): 0x08059050 ***
Aborted
|
_________________ Mon MediaWiki perso : http://pix-mania.dyndns.org
Last edited by loopx on Mon Oct 17, 2005 7:29 pm; edited 1 time in total |
|
Back to top |
|
|
Bapt Veteran
Joined: 14 Apr 2003 Posts: 1152 Location: Paris
|
Posted: Fri Oct 14, 2005 5:36 pm Post subject: |
|
|
Tu peux nous mettre la commande avec laquelle tu démarre ton appli stp ? |
|
Back to top |
|
|
loopx Advocate
Joined: 01 Apr 2005 Posts: 2787 Location: Belgium / Liège
|
Posted: Fri Oct 14, 2005 8:45 pm Post subject: |
|
|
Ben en fait, je fais play avec eclipse ...
Mais, normalement, ca doit etre ca :
Code: |
loopx@loopx-nb ~/workspace/bdloopx/main $ java Exec
Exception in thread "main" java.lang.NoClassDefFoundError: Exec (wrong name: main/Exec)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
|
Mais heu, la ca fonctionne pas pourtant ...
Je vais refaire une class avec juste un main pour essayer de me connecter à mon serveur sql... La ca foire grave... _________________ Mon MediaWiki perso : http://pix-mania.dyndns.org |
|
Back to top |
|
|
bong Apprentice
Joined: 26 Oct 2004 Posts: 276 Location: Brest / Metz
|
|
Back to top |
|
|
loopx Advocate
Joined: 01 Apr 2005 Posts: 2787 Location: Belgium / Liège
|
Posted: Fri Oct 14, 2005 8:54 pm Post subject: |
|
|
1 seul class:
Code: |
package main;
import java.sql.*;
class Test{
public static void main(String[] args){
//Nom de mon pilote
String pilote = "com.mysql.jdbc.Driver";
try{
//Chargement de mon pilote
Class.forName(pilote);
//Connexion à ma base mysql avec mon login et mot de passe ( à vous de changer cela)
Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/kop","root","zorro");
//Création de mon statement qui va me permettre d'executer mes requetes
Statement instruction = connexion.createStatement();
//Ma table s'appelle coffees et tout ce qui reste dépend d'elle
//Vous devez changer certaines infos comme le nom de la table et celui des colonnes
ResultSet resultat = instruction.executeQuery("SELECT * FROM coffees");
while(resultat.next()){
System.out.println("---------------------------");
System.out.println("Nom du cafe: "+resultat.getString("cof_name"));
System.out.println("Numero du fournisseur: "+resultat.getInt("sup_id"));
System.out.println("Prix: "+resultat.getFloat("price"));
System.out.println("Ventes: "+resultat.getInt("sales"));
System.out.println("Total: "+resultat.getInt("total"));
}
}
catch (Exception e){
System.out.println("echec pilote : "+e);
}
}
}
|
Si je fais play:
Code: |
echec pilote : java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
|
Si je fais par la commande java:
Code: |
loopx@loopx-nb ~/workspace/bdloopx/main $ java Test
Exception in thread "main" java.lang.NoClassDefFoundError: Test (wrong name: main/Test)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
|
Heu, ca me dépasse, pourquoi n'y a t'il pas la meme erreur ????????????? Ca n'a carément rien avoir
EDIT:
Code: |
loopx@loopx-nb ~/workspace/bdloopx/main $ whereis java
java: /opt/sun-jdk-1.4.2.09/bin/java /opt/blackdown-jdk-1.4.2.02/bin/java /opt/blackdown-jre-1.4.2.02/bin/java
|
Quand je pense que j'ai fais une applic l'année dernière, arrive meme plus à faire une betise en java _________________ Mon MediaWiki perso : http://pix-mania.dyndns.org |
|
Back to top |
|
|
hiboo n00b
Joined: 17 Jan 2005 Posts: 55
|
Posted: Sat Oct 15, 2005 2:29 pm Post subject: |
|
|
loopx wrote: |
EDIT: c'est bizarre ca je trouve
Code: |
loopx@loopx-nb ~ $ java -classpath
*** glibc detected *** free(): invalid next size (fast): 0x08059050 ***
Aborted
|
| ca me fait ca aussi.
l'option -classpath est faite pour spécifier le classpath de ton appli : là, y'a pas d'appli, y'a même pas de nom de répertoire, donc normalement ca devrait mettre une erreur de syntaxe.
loopx wrote: | 1 seul class:
Code: |
package main;
import java.sql.*;
class Test{
public static void main(String[] args){
//Nom de mon pilote
String pilote = "com.mysql.jdbc.Driver";
try{
//Chargement de mon pilote
Class.forName(pilote);
//Connexion à ma base mysql avec mon login et mot de passe ( à vous de changer cela)
Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/kop","root","zorro");
//Création de mon statement qui va me permettre d'executer mes requetes
Statement instruction = connexion.createStatement();
//Ma table s'appelle coffees et tout ce qui reste dépend d'elle
//Vous devez changer certaines infos comme le nom de la table et celui des colonnes
ResultSet resultat = instruction.executeQuery("SELECT * FROM coffees");
while(resultat.next()){
System.out.println("---------------------------");
System.out.println("Nom du cafe: "+resultat.getString("cof_name"));
System.out.println("Numero du fournisseur: "+resultat.getInt("sup_id"));
System.out.println("Prix: "+resultat.getFloat("price"));
System.out.println("Ventes: "+resultat.getInt("sales"));
System.out.println("Total: "+resultat.getInt("total"));
}
}
catch (Exception e){
System.out.println("echec pilote : "+e);
}
}
}
|
Si je fais play:
Code: |
echec pilote : java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
|
Si je fais par la commande java:
Code: |
loopx@loopx-nb ~/workspace/bdloopx/main $ java Test
Exception in thread "main" java.lang.NoClassDefFoundError: Test (wrong name: main/Test)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
|
Heu, ca me dépasse, pourquoi n'y a t'il pas la meme erreur ????????????? Ca n'a carément rien avoir | L'erreur de la ligne de commande, c'est que java ne trouve même pas ta classe principale, c'est juste un erreur dans la syntaxe de ta ligne de commande. La, je peux pas trop t'aider car je sais pas ce que c'est que ton répertoire, où est ton .class etc...
Ton problème est à mon avis un pb de classpath. Dans eclipse, dans la configuration de ton "Run" qui lance ton appli, y'a un onglet classpath : ajoute y le répertoire où il y a ton driver jdbc |
|
Back to top |
|
|
loopx Advocate
Joined: 01 Apr 2005 Posts: 2787 Location: Belgium / Liège
|
Posted: Sat Oct 15, 2005 2:50 pm Post subject: |
|
|
j'utilise eclipse, mon repertoire de travail=/home/loopx/workspace
repertoire du projet=/home/loopx/workspace/bdloopx
Code: |
loopx@loopx-nb ~/workspace/bdloopx $ ls -la
total 8
drwxr-xr-x 4 loopx users 160 Oct 14 22:48 .
drwxr-xr-x 4 loopx users 104 Oct 12 23:43 ..
-rw-r--r-- 1 loopx users 220 Oct 12 23:43 .classpath
-rw-r--r-- 1 loopx users 366 Oct 12 23:43 .project
drwxr-xr-x 2 loopx users 96 Oct 13 00:23 .settings
drwxr-xr-x 2 loopx users 112 Oct 14 22:50 main
loopx@loopx-nb ~/workspace/bdloopx $ cat .classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path=""/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path=""/>
</classpath>
|
C'est le .classpath qu in'est pas correct ???????, _________________ Mon MediaWiki perso : http://pix-mania.dyndns.org |
|
Back to top |
|
|
bong Apprentice
Joined: 26 Oct 2004 Posts: 276 Location: Brest / Metz
|
Posted: Sat Oct 15, 2005 4:49 pm Post subject: |
|
|
Est-ce que t'as pris la peine d'aller lire le post dont je t'ai donné le lien juste au dessus? |
|
Back to top |
|
|
hiboo n00b
Joined: 17 Jan 2005 Posts: 55
|
Posted: Sun Oct 16, 2005 8:32 am Post subject: |
|
|
loopx wrote: | j'utilise eclipse, mon repertoire de travail=/home/loopx/workspace
repertoire du projet=/home/loopx/workspace/bdloopx
Code: | loopx@loopx-nb ~/workspace/bdloopx $ cat .classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path=""/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path=""/>
</classpath>
|
C'est le .classpath qu in'est pas correct ???????, | Ce classpath là, cela doit être celui pour la compilation. Etant donné que tu utilise l'interface java.sql, t'as pas besoin de changer ce classpath là, c'est le classpath d'exécution qu'il faut que tu change. |
|
Back to top |
|
|
loopx Advocate
Joined: 01 Apr 2005 Posts: 2787 Location: Belgium / Liège
|
Posted: Sun Oct 16, 2005 5:36 pm Post subject: |
|
|
j'ai complètement oublié d'aller voir
Je vais le lire de suite... _________________ Mon MediaWiki perso : http://pix-mania.dyndns.org |
|
Back to top |
|
|
loopx Advocate
Joined: 01 Apr 2005 Posts: 2787 Location: Belgium / Liège
|
Posted: Sun Oct 16, 2005 6:36 pm Post subject: |
|
|
nan, ca fonctionne toujours pas ...
J'ai fais 2 liens (avec ln -s) pour le fichier jdbc-mysql... j'ai du emerger sun-jre-bin que je n'avais pas
Ce que je comprend pas, c'est ca:
Code: |
loopx-nb main # cd /opt/
lloopx-nb opt # ls -l
total 0
drwxr-xr-x 6 root root 352 Oct 9 01:57 OpenOffice.org
drwxr-xr-x 3 root root 72 Oct 7 23:15 ati
drwxr-xr-x 8 root root 192 Oct 10 21:27 blackdown-jdk-1.4.2.02
drwxr-xr-x 6 root root 144 Oct 10 21:28 blackdown-jre-1.4.2.02
drwxr-xr-x 3 root root 72 Oct 10 21:29 libreadline-java
drwxr-xr-x 5 root root 120 Oct 8 15:49 opera
drwxr-xr-x 9 root root 224 Oct 12 21:26 sun-jdk-1.4.2.09
drwxr-xr-x 8 root root 200 Oct 16 20:26 sun-jre-bin-1.5.0.05
|
Qu'est ce que le blackdown-jde et -jre ???
en plus, dans eclipse, en créant mon projet, il me fait une arborescence avec le nom du projet, le nom des packages situé le plus à la racine, ET un truc JRE system library, qui, lui, contient comme .jar, les fichiers du blackdown-jdk...
vous comprenez ou je recommence ... enfin, je trouve ca bizarre........
EDIT:
bon alors je viens de rajouter 2 liens vers jdbc-mysql dans les 2 rep blackdown, et maintenant, AVEC le boutton play de eclipse, ca fonctionne mieux, mais:
Code: |
loopx@loopx-nb ~/workspace/bdloopx/main $ java Test
Exception in thread "main" java.lang.NoClassDefFoundError: Test (wrong name: main/Test)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
|
ce qui est pas cool..
Sinon, en ce qui concerne le PLAY avec eclipse, il me retourne ceci:
Code: |
echec pilote : com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: java.net.ConnectException: Connection refused
STACKTRACE:
java.net.SocketException: java.net.ConnectException: Connection refused
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:283)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2541)
at com.mysql.jdbc.Connection.<init>(Connection.java:1474)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:264)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at main.Test.main(Test.java:19)
** END NESTED EXCEPTION **
Last packet sent to the server was 24 ms ago.
|
Il se pourrait que mon serveur mysql ne fonctionne pas trop trop bien....
Je sais pas trop comment ca fonctionne, mais mysql est démarré sur mon serveur, et je sais pas sur quel port il écoute, sais meme pas si il à démarrer avec l'option "réseau"... ...
Je pencherai sur le problème.....
Heu, en passant, voila ce que j'ai pour mysqld (que j'ai trouvé dans /var/log/mysql):
Code: |
serveur mysql # cat mysqld.err
.....
.....
051015 9:56:10 InnoDB: Started
/usr/sbin/mysqld: ready for connections.
Version: '4.0.25' socket: '/var/run/mysqld/mysqld.sock' port: 3306 Gentoo Linux mysql-4.0.25-r2
|
J'ai pas encore de firewall, je suppose qu'il suffit juste de laisser passer le port 3306....
Sinon, la ca veux dire que mysqld est démarrer et opérationnel... donc c'est encore mon programme en java qui foire _________________ Mon MediaWiki perso : http://pix-mania.dyndns.org |
|
Back to top |
|
|
loopx Advocate
Joined: 01 Apr 2005 Posts: 2787 Location: Belgium / Liège
|
Posted: Mon Oct 17, 2005 7:42 pm Post subject: |
|
|
C'est bon, ca fonctionne
J'aurais une dernière question...
Comment faire pour récuperer TOUTE la sortie d'une commande SQL...
Bah, voyer le truc executeQuery dans le code en haut ???, j'aimerai bien y placer un "describe nom_de_ma_table", mais j'arrive po à afficher ca dans mon programme java...
Code: |
ResultSet resultat = instruction.executeQuery("describe film");
while(resultat.next()) {
System.out.println("---Results---");
//System.out.println("Nom du cafe: "+resultat.getString("cof_name"));
//System.out.println("Numero du fournisseur: "+resultat.getInt("sup_id"));
//System.out.println("Prix: "+resultat.getFloat("price"));
//System.out.println("Ventes: "+resultat.getInt("sales"));
//System.out.println("Total: "+resultat.getInt("total"));
System.out.println(resultat.getString()); //Marche po :(
}
CONSOLE=Starting main class ...
---Lancement du test...
---Results---
echec pilote : java.sql.SQLException: Column '' not found.
---Fin du test
|
Ce serais génial que je sache comment faire, après je pourrais enfin commencer à coder _________________ Mon MediaWiki perso : http://pix-mania.dyndns.org |
|
Back to top |
|
|
bong Apprentice
Joined: 26 Oct 2004 Posts: 276 Location: Brest / Metz
|
Posted: Mon Oct 17, 2005 8:24 pm Post subject: |
|
|
Les methodes getXXX() prennent un int en parametre... avec 1 correspondant a la premiere colone de ton ResultSet |
|
Back to top |
|
|
loopx Advocate
Joined: 01 Apr 2005 Posts: 2787 Location: Belgium / Liège
|
Posted: Mon Oct 17, 2005 8:35 pm Post subject: |
|
|
Allaise, Allaise, Allaise
Merci beaucoup _________________ Mon MediaWiki perso : http://pix-mania.dyndns.org |
|
Back to top |
|
|
loopx Advocate
Joined: 01 Apr 2005 Posts: 2787 Location: Belgium / Liège
|
Posted: Mon Oct 17, 2005 8:44 pm Post subject: |
|
|
Heu, oui mais non... en fait, j'aimerai bien avoir ce resultat:
Code: |
ysql> describe film
-> ;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| nom | varchar(128) | YES | | NULL | |
| genre | varchar(128) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
|
et pour l'instant, avec le tit 1, je n'ai que ca:
bref, pas très long
EDIT:
Je trouve pas la fonction pour connaitre le nombre de colonne en fait _________________ Mon MediaWiki perso : http://pix-mania.dyndns.org |
|
Back to top |
|
|
|