connexion entre java et mysql par jdbc odbc
Bonjour à tous,
Je cherche à établir une connexion entre java et mysql, à partir d'un driver jdbc-odbc. Pour l'instant, je n'y suis pas parvenu.
J'ai installé le programme mysql-connector-odbc-3.51.23-0 depuis un package .rpm:
Code:
1 2 3 4 5 6
|
[xxxx@localhost ~]$ rpm -qa | grep mysql
mysql-5.0.45-6.fc7
mysql-libs-5.0.45-6.fc7
mysql-server-5.0.45-6.fc7
mysql-connector-odbc-3.51.23-0 |
Le programme mysql-connector-odbc-3.51.23-0 a apporté entre autres:
Code:
1 2 3 4 5 6 7
|
[root@tempo-dhcp16 ~]# rpm -ql mysql-connector-odbc
/usr/bin/myodbc3i
/usr/bin/myodbc3m
...
/usr/lib/libmyodbc3.so
... |
Pour info, je liste mes deux fichiers de configuration associés à odbc:
Code:
1 2 3 4 5
|
// fichier de configuration /etc/odbcinst.ini
[MySQL]
DRIVER = /usr/lib/libmyodbc3.so
UsageCount = 1 |
et,
Code:
1 2 3 4 5 6 7 8 9
|
// fichier de configuration /etc/odbc.ini
[MySQL-Forum]
Description = MySQL database Forum
Driver = MySQL
Server = localhost
Database = Forum
Port = 3306
Socket = /var/lib/mysql/mysql.sock |
Il existe bel et bien une base de donnée Forum dans le répertoire /var/lib/mysql,
Code:
1 2 3 4 5 6 7 8 9
|
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
..
| Forum |
..
+--------------------+ |
Je vérifie la connexion entre odbc et mysql et le bon fonctionnement du driver en utilisant la commande isql,
Code:
1 2 3 4 5 6 7 8 9 10
|
[xxxx@localhost accèsODBC]$ isql MySQL-Forum root xxxx
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+ |
Je pense que tout ceci montre que:
- un connecteur jdbc-odbc est bien installé
- une base de donnée nommée Forum est bien créée
- odbc peut se connecter à la base de donnée Forum via le driver libmyodbc3.so
Le problème que je rencontre, apparaît au niveau de la connexion entre java et odbc.
Le code java que je compile et exécute est listé ici:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
import java.sql.Connection ;
import java.sql.DriverManager ;
public class Forum {
public static void main (String[] args) throws Exception {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
Connection c = DriverManager.getConnection("jdbc:odbc:Forum");
System.out.println("Connexion ouverte") ;
c.close() ;
System.out.println("Connexion fermée") ;
}
} |
La compilation ne génère pas d'erreur. Par contre j'obtiens ensuite une erreur de mémoire java.lang.NullPointerException,
Code:
1 2 3 4 5 6 7 8
|
[xxxx@localhost accèsODBC]$ java Forum
Exception in thread "main" java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.initialize(JdbcOdbcDriver.java:436)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:153)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at Forum.main(Forum.java:18) |
Clairement, la connexion ne se fait pas. L'url "jdbc:odbc:Forum" n'est pas correcte. J'ai testé quelques autres url un peu au hasard comme par exemple "jdbc:odbc://localhost/MySQL-Forum". J'ai aussi tenté d'ajouter le nom de l'utilisateur et le mot de passe "jdbc:odbc://localhost/MySQL-Forum","root","xxxx", mais rien n'y fait.
La FAQ de développez.com dit ceci:
Citation:
Les URL JDBC sont définies sous forme de String selon ce schéma :
String url = "jdbc:<subprotocol>:<subname>"
<subname> Une manière d'identifier la source de données. Ce dernier élément dépend complètement du sous-protocole et du driver.
Par exemple :
* jdbc:odbc:maBase;CacheSize=30;ExtensionCase=LOWER
* jdbc:mysql://localhost/maBase
* jdbc:oracle:oci8@:maBase
* jdbc:oracle:thin@://localhost:8000:maBase
* jdbc:sybase:Tds:localhost:5020/maBase
Il est nécessaire de se documenter auprès du fournisseur du driver.
Sachant que le fichier /usr/share/doc/mysql-connector-odbc-3.51.23/README n'apporte pas cette information, où puis-je trouver la bonne syntaxe de l'url dans getConnection(url) qui correspond à mon driver..?
Je remercie vivement ceux qui ont lu ce message jusqu'au bout. Pensez-vous que le problème est bien dans la syntaxe de l'url? Dans le cas contraire, quelle est votre diagnostic? Comment vous connectez-vous à mysql si vous utilisez linux?
N.B. j'utilise fedora, jdk1.5.0, et pour l'instant je code directement à partir de la console.