Bonjour...
je dois effectuer la migration d'une application existante de MySQL vers SQL SERVER.. aujourd'hui la traduction d'une requête de ''synchronisation'' entre deux tables source S et destination D utilisant la clause ON DUPLICATE KEY UPDATE me pose problème. j'ai deux cas de figures pour chaque enregistrement de S
- la clé primaire de S n'existe pas dans D : INSERTION de l'enregistrement dans D
- la clé primaire de S existe déjà table D && et l'information dans S est plus récente (comparaison des champs last_update (datetime) ) : UPDATE de l'enregistrement correspondant dans D
La clé primaire n'est pas auto-increment, ce que j'ai voulu faire entre autre c'est de réaliser l'insertion et en cas d'exception ''SQLIntegrityConstraintViolationException'' (si cest bien la bonne) j'exécute la requête de mise a jour de l'enregistrement correspondant.
Mon souci c'est que l'exception récupérée semble ne pas être du type ''SQLIntegrityConstraintViolationException''
le code et la trace que j'obtiens plus bas quand je lance la synchronisation (la version Mysql est en exploitation et sans bug)
Code Java : 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 public static void importTable(File filename, String tablename) { Connection connection = DatabaseDriver.getConnection(); PreparedStatement preparedStatement = null; preparedStatement = SynchFunction.getPreparedStatement(filename, connection, tablename); try { if (preparedStatement != null) { if (preparedStatement.executeUpdate() >= 0) { } } } catch (SQLException ex) { Logger.getLogger(ExportImportSynchroFilter.class.getName()).log(Level.SEVERE, null, ex); if (ex instanceof SQLIntegrityConstraintViolationException) { BufferError.append(ex.getSQLState()); System.out.println(" \n \n \n ECRIRE ICI L'UPDATE DES LIGNES EXISTANTES \n " + ex.toString() + "\n \n \n "); } else{ System.out.println(" \n \n \n C'EST PAS LE BON TYPE D'EXCEPTION \n " + ex.toString() + " \n \n \n "); ex.printStackTrace(); System.out.println ("LE CODE D'ERREUR EST " + ex.getMessage()); } } finally { try { if (preparedStatement != null) { preparedStatement.close(); } } catch (SQLException ex) { Logger.getLogger(ExportImportSynchroFilter.class.getName()).log(Level.SEVERE, null, ex); } } DatabaseDriver.closeConnection(connection); }
Une idée les gars?C'EST PAS LE BON TYPE D'EXCEPTION
févr. 13, 2020 5:10:47 PM full.ExportImportSynchroFilter importTable
GRAVE: null
com.microsoft.sqlserver.jdbc.SQLServerException: Violation de la contrainte PRIMARY KEY «*PK_interpelle_id*». Impossible d'insérer une clé en double dans l'objet «*app_test.interpelle*». Valeur de clé dupliquée*: (2020_02_10_13_06_50_263_aaa112).
com.microsoft.sqlserver.jdbc.SQLServerException: Violation de la contrainte PRIMARY KEY «*PK_interpelle_id*». Impossible d'insérer une clé en double dans l'objet «*app_test.interpelle*». Valeur de clé dupliquée*: (2020_02_10_13_06_50_263_aaa112).
LE CODE D'ERREUR EST Violation de la contrainte PRIMARY KEY «*PK_interpelle_id*». Impossible d'insérer une clé en double dans l'objet
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
C'EST PAS LE BON TYPE D'EXCEPTION
com.microsoft.sqlserver.jdbc.SQLServerException: Aucune valeur n'est définie pour le paramètre numéro 118.![]()
Partager