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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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);
	}
}