Exception MYSQL : troncation sur une date
Bonjour,
Depuis que j'ai installé MySQL version 10.4.17 , java 8.0.281-B09 et le nouveau connecteur mysql-connector-java-5.1.49.jar, j'ai un problème de compatibilité.
Bien que j'ai défini l'option zeroDateTimeBehavior=convertToNull, j'obtiens une SQLException.
La colonne DateReprise est définie en (DATE,NULL, nullable);
J'ai remarqué que si je lançais le programme de la façon suivante :**
java -cp .;c:\jars\mysql-connector-java-5.1.49.jar;cinephil.jar cinephil.Test
j'obtiens l'exception suivante.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: '0000-00-00' for column `cinephil`.`films`.`DateReprise` at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3931)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1536)
at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2585)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1464)
at cinephil.Test.process(Test.java:26)
at cinephil.Test.<init>(Test.java:13)
at cinephil.Test.main(Test.java:34)
Terminé |
par contre si je place dans le Classpath un ancien mysql.jar (2014) même avec le nouveau connecteur,
java -cp .;c:\jars\mysql.jar;c:\jars\mysql-connector-java-5.1.49.jar;cinephil.jar cinephil.Test
Code:
1 2
| Ceci a bien marché.
Terminé |
J'ai vérifié, dans la table il y a bien 0000-00-00.
Ceci me fait penser que le package java.sql qui se trouve dans rt.jar n'est pas correct. Mais je n'en suis pas certain.
Qu'en pensez vous ?
Merci d'avance.
Gérard
Ci-dessous mon programme.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| package cinephil;
public class Test
{
public static java.sql.Connection cnx = null;
public Test()
{
process();
}
private void process()
{
try
{
String url = "jdbc:mysql://localhost/Cinephil?zeroDateTimeBehavior=convertToNull";
String driver = "com.mysql.jdbc.Driver";
String admin = "gege";
String pw = "";
// on charge le driver de base de données" ;
Class.forName (driver).newInstance();
// On réalise une connexion à la source de données sans mot de passe
cnx = java.sql.DriverManager.getConnection(url,admin,pw );
String requete = "update cinephil.films set DateReprise ='0000-00-00' where no_film=6050";
java.sql.Statement stmt = cnx.createStatement();
stmt.executeUpdate(requete);
System.out.println("Ceci a bien marché.");
}
catch (Exception ex) {ex.printStackTrace() ;}
}
public static void main(String[] args)
{
new Test();
System.out.println("Terminé");
System.exit(0);
}
} |