[MySQL/JDBC/JAVA] Problème de connexion à une DB

Problème de connexion à une DB [MySQL/JDBC/JAVA] - Java - Programmation

Marsh Posté le 24-04-2007 à 14:24:09    

Bonjour,
 
J'essaie d'accéder une DB qui est en local depuis un simple programme Java via JDBC. Je peux accéder à ma DB via une console MySQL, ca marche très bien, je peux faire des requêtes etc...
 
Je run mon programme via Eclipse. Sous windows, il y a aucun problème, j'arrive à faire une requête depuis Java et obtenir un resultSet.  
Mais normalement je travaille sous linux. Quand j'ai écrit ce bout de code java, j'avais Ubuntu 6.10 (Edgy), ca marchait très bien, et depuis l'autre jour, j'ai upgradé à la version 7.04 (Feisty). Et depuis, ca ne marche plus. A noter aussi que j'utilise la dernière version du connecteur MySQL/JDBC (version 5.05).  
 
Il me met une exception bizarre. Voici l'output de l'erreur :
 

Code :
  1. java.sql.SQLException: Error during query: Unexpected Exception: java.io.CharConversionException message given: null
  2. Nested Stack Trace:
  3. ** BEGIN NESTED EXCEPTION **
  4. java.io.CharConversionException
  5. STACKTRACE:
  6. java.io.CharConversionException
  7.    at gnu.gcj.convert.Input_iconv.read(libgcj.so.70)
  8.    at java.lang.String.init(libgcj.so.70)
  9.    at java.lang.String.<init>(libgcj.so.70)
  10.    at com.mysql.jdbc.SingleByteCharsetConverter.<init>(SingleByteCharsetConverter.java:153)
  11.    at com.mysql.jdbc.SingleByteCharsetConverter.initCharset(SingleByteCharsetConverter.java:108)
  12.    at com.mysql.jdbc.SingleByteCharsetConverter.getInstance(SingleByteCharsetConverter.java:86)
  13.    at com.mysql.jdbc.Connection.getCharsetConverter(Connection.java:3471)
  14.    at com.mysql.jdbc.StringUtils.getBytes(StringUtils.java:609)
  15.    at com.mysql.jdbc.Buffer.writeStringNoNull(Buffer.java:655)
  16.    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1678)
  17.    at com.mysql.jdbc.Connection.execSQL(Connection.java:3243)
  18.    at com.mysql.jdbc.Connection.configureClientCharacterSet(Connection.java:2509)
  19.    at com.mysql.jdbc.Connection.initializePropsFromServer(Connection.java:4096)
  20.    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2756)
  21.    at com.mysql.jdbc.Connection.<init>(Connection.java:1553)
  22.    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
  23.    at java.sql.DriverManager.getConnection(libgcj.so.70)
  24.    at java.sql.DriverManager.getConnection(libgcj.so.70)
  25.    at QueryDB.main(QueryDB.java:23)
  26. ** END NESTED EXCEPTION **


 
Et voici le bout de code java, responsable d'ouvrir la connexion :
 

Code :
  1. public class QueryDB {
  2. public static void main(String[] args) {
  3.  try {
  4.   Class.forName("com.mysql.jdbc.Driver" );
  5.   String sourceURL = "jdbc:mysql://localhost:3306/newBgee?user=root";
  6.   Connection databaseConnection = DriverManager.getConnection(sourceURL);
  7.   Statement statement = databaseConnection.createStatement();
  8.   ResultSet gene = statement.executeQuery("SELECT * FROM gene" );
  9.   while(gene.next())
  10.    System.out.println(gene.getString("geneName" ));
  11.  }
  12.  catch(ClassNotFoundException cnfe) {
  13.   System.err.println(cnfe);
  14.  }
  15.  catch(SQLException sqle) {
  16.   System.err.println(sqle);
  17.  }
  18. }
  19. }


 
J'ai pourtant réessayé de retaper l'URL, pensant que vu que c'est une CharConversionException, un caractère invisible aurait pu faire c**** mais ca n'a rien changé.  
Quelqu'un pourrait-il m'aider svp ?
 
Merci!
 

Reply

Marsh Posté le 24-04-2007 à 14:24:09   

Reply

Marsh Posté le 24-04-2007 à 15:18:46    

CharConversionException regarde du coté de l'encodage de tes données UTF 8 , etc...

Reply

Marsh Posté le 24-04-2007 à 15:32:26    

heu...pourrais-tu etre plus précis stp ? Que dois-je faire ?

Reply

Marsh Posté le 25-04-2007 à 00:30:31    

heeeeeeeeellllpppppp please :)

Reply

Marsh Posté le 25-04-2007 à 08:45:48    

t'as quoi dans ta base, encodé comment ?

Reply

Marsh Posté le 25-04-2007 à 15:34:43    

Ben voila les infos que j'ai :
 
 

Code :
  1. > locale
  2. LANG=en_US.UTF-8
  3. LC_CTYPE="en_US.UTF-8"
  4. LC_NUMERIC="en_US.UTF-8"
  5. LC_TIME="en_US.UTF-8"
  6. LC_COLLATE="en_US.UTF-8"
  7. LC_MONETARY="en_US.UTF-8"
  8. LC_MESSAGES="en_US.UTF-8"
  9. LC_PAPER="en_US.UTF-8"
  10. LC_NAME="en_US.UTF-8"
  11. LC_ADDRESS="en_US.UTF-8"
  12. LC_TELEPHONE="en_US.UTF-8"
  13. LC_MEASUREMENT="en_US.UTF-8"
  14. LC_IDENTIFICATION="en_US.UTF-8"
  15. LC_ALL=


 

Code :
  1. mysql> SHOW VARIABLES LIKE 'character_set_client';
  2. +----------------------+--------+
  3. | Variable_name        | Value  |
  4. +----------------------+--------+
  5. | character_set_client | latin1 |
  6. +----------------------+--------+
  7. 1 row in set (0.00 sec)


 

Code :
  1. SHOW VARIABLES LIKE 'character_set_database';
  2. +------------------------+--------+
  3. | Variable_name          | Value  |
  4. +------------------------+--------+
  5. | character_set_database | latin1 |
  6. +------------------------+--------+
  7. 1 row in set (0.01 sec)


 

Code :
  1. mysql> SHOW CHARACTER SET;
  2. +----------+-----------------------------+---------------------+--------+
  3. | Charset  | Description                 | Default collation   | Maxlen |
  4. +----------+-----------------------------+---------------------+--------+
  5. | big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |
  6. | dec8     | DEC West European           | dec8_swedish_ci     |      1 |
  7. | cp850    | DOS West European           | cp850_general_ci    |      1 |
  8. | hp8      | HP West European            | hp8_english_ci      |      1 |
  9. | koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |
  10. | latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |
  11. | latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |
  12. | swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 |
  13. | ascii    | US ASCII                    | ascii_general_ci    |      1 |
  14. | ujis     | EUC-JP Japanese             | ujis_japanese_ci    |      3 |
  15. | sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |      2 |
  16. | hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 |
  17. | tis620   | TIS620 Thai                 | tis620_thai_ci      |      1 |
  18. | euckr    | EUC-KR Korean               | euckr_korean_ci     |      2 |
  19. | koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |      1 |
  20. | gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |      2 |
  21. | greek    | ISO 8859-7 Greek            | greek_general_ci    |      1 |
  22. | cp1250   | Windows Central European    | cp1250_general_ci   |      1 |
  23. | gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 |
  24. | latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |      1 |
  25. | armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |      1 |
  26. | utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |
  27. | ucs2     | UCS-2 Unicode               | ucs2_general_ci     |      2 |
  28. | cp866    | DOS Russian                 | cp866_general_ci    |      1 |
  29. | keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |      1 |
  30. | macce    | Mac Central European        | macce_general_ci    |      1 |
  31. | macroman | Mac West European           | macroman_general_ci |      1 |
  32. | cp852    | DOS Central European        | cp852_general_ci    |      1 |
  33. | latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |      1 |
  34. | cp1251   | Windows Cyrillic            | cp1251_general_ci   |      1 |
  35. | cp1256   | Windows Arabic              | cp1256_general_ci   |      1 |
  36. | cp1257   | Windows Baltic              | cp1257_general_ci   |      1 |
  37. | binary   | Binary pseudo charset       | binary              |      1 |
  38. | geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |      1 |
  39. | cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   |      2 |
  40. | eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |      3 |
  41. +----------+-----------------------------+---------------------+--------+
  42. 36 rows in set (0.00 sec)


 

Code :
  1. mysql> SHOW COLLATION LIKE 'utf8%';
  2. +--------------------+---------+-----+---------+----------+---------+
  3. | Collation          | Charset | Id  | Default | Compiled | Sortlen |
  4. +--------------------+---------+-----+---------+----------+---------+
  5. | utf8_general_ci    | utf8    |  33 | Yes     | Yes      |       1 |
  6. | utf8_bin           | utf8    |  83 |         | Yes      |       1 |
  7. | utf8_unicode_ci    | utf8    | 192 |         | Yes      |       8 |
  8. | utf8_icelandic_ci  | utf8    | 193 |         | Yes      |       8 |
  9. | utf8_latvian_ci    | utf8    | 194 |         | Yes      |       8 |
  10. | utf8_romanian_ci   | utf8    | 195 |         | Yes      |       8 |
  11. | utf8_slovenian_ci  | utf8    | 196 |         | Yes      |       8 |
  12. | utf8_polish_ci     | utf8    | 197 |         | Yes      |       8 |
  13. | utf8_estonian_ci   | utf8    | 198 |         | Yes      |       8 |
  14. | utf8_spanish_ci    | utf8    | 199 |         | Yes      |       8 |
  15. | utf8_swedish_ci    | utf8    | 200 |         | Yes      |       8 |
  16. | utf8_turkish_ci    | utf8    | 201 |         | Yes      |       8 |
  17. | utf8_czech_ci      | utf8    | 202 |         | Yes      |       8 |
  18. | utf8_danish_ci     | utf8    | 203 |         | Yes      |       8 |
  19. | utf8_lithuanian_ci | utf8    | 204 |         | Yes      |       8 |
  20. | utf8_slovak_ci     | utf8    | 205 |         | Yes      |       8 |
  21. | utf8_spanish2_ci   | utf8    | 206 |         | Yes      |       8 |
  22. | utf8_roman_ci      | utf8    | 207 |         | Yes      |       8 |
  23. | utf8_persian_ci    | utf8    | 208 |         | Yes      |       8 |
  24. | utf8_esperanto_ci  | utf8    | 209 |         | Yes      |       8 |
  25. | utf8_hungarian_ci  | utf8    | 210 |         | Yes      |       8 |
  26. +--------------------+---------+-----+---------+----------+---------+
  27. 21 rows in set (0.00 sec)


 
Y a qqch qui cloche ou tout semble normal ? Besoin d'autres infos ?

Reply

Marsh Posté le 25-04-2007 à 16:43:24    

AHHHHHHHHHHHHH!!!!!
 
J'ai enfin trouvé. C'est qu'en fait Eclipse utilisait la version 1.4.2. de Java et appramment il faut mettre la 1.5.0 et la ca marche!  
Je pensais qu'Eclipse par défaut utiliserait la version la plus récente et en fait non. C'était bêtement ca qu'il fallait changer.
 
Bon ben voila :) Sujet clos.
 

Reply

Marsh Posté le 02-05-2007 à 08:24:21    

deviljin a écrit :

J'ai enfin trouvé. C'est qu'en fait Eclipse utilisait la version 1.4.2. de Java et appramment il faut mettre la 1.5.0 et la ca marche!  
Je pensais qu'Eclipse par défaut utiliserait la version la plus récente et en fait non. C'était bêtement ca qu'il fallait changer.


 
Ben non, t'as trouvé un contournement qui marche (et c'est très bien), mais pas la RAISON du problème.
 

deviljin a écrit :

Bon ben voila :) Sujet clos.


 
Tu me permets d'en remettre une couche quand même ?
Evidemment ton programme n'est pas en cause, le seul changement étant l'upgrade de Linux, c'est donc Linux qui est à l'origine du problème. Apparemment il y a un bug dans l'encodage sous certains Linux des caractères non conformes :
 
You're correct that the exception you're seeing is a GNU Classpath bug, its UTF8 decoder doesn't handle invalid sequences correctly (it throws an exception, instead of simply rendering the incorrect bytes as '?').  
 
T'as probablement contourné en utilisant un JDK-1.5.0 qui est nativement UTF-8, donc les URL qu'il envoit n'ont pas à être traduites (du coup le code GNU fautif n'a pas été appelé) en UTF-8 car elles le sont déjà, alors que le JDK-1.4.2 n'est pas nativement UTF-8. C'est certainement un bazar de ce genre la vraie raison. Ca ne change rien au fait que le bon contournement, que tu as eu la sagesse de prendre de suite, était bien d'utiliser un JDK-1.5.0, c'est vachement plus efficace que d'attendre le correctif  :sleep:  .
 
@++

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed