Bonjour à tous !

Je suis confronté à un sérieux problème bien tordu
Grosso modo, je dispose d'une application Swing qui se connecter à Oracle (10.2.0.4) via JDBC... jusque là tout va bien...

Chez moi pas de soucis, tout fonctionne impec' ! (j'ai fait des tests sur différentes version d'Oracle XE, Oracle normal, 10.x.x.x ...)

Par contre chez mon client, ca craind un max !

Dès que j'execute un insert depuis mon application, j'obtiens la stacktrace suivante :

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
40
41
42
 
java.sql.SQLException: Violation de protocole
	at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
	at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:271)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:445)
	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1053)
	at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:183)
	at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:942)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1222)
	at oracle.jdbc.driver.OracleStatement.executeUpdateInternal(OracleStatement.java:1706)
	at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:4912)
	at oracle.jdbc.driver.OracleStatementWrapper.executeUpdate(OracleStatementWrapper.java:371)
	at xxxx
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
	at java.awt.Component.processMouseEvent(Component.java:6263)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6028)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2475)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
En y regardant de plus prêt, il s'avère que le problème se situe au niveau suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
s.executeUpdate(query, columReturn);
ResultSet keys = s.getGeneratedKeys();
if (keys.next()) {
   Long id = getLong(keys, 1);
   return id;
}
si je fait à la place un :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
s.executeUpdate(query);
tout fonctionne impec' !

Mon soucis, c'est que mon application travail sur Oracle et MySQL et que le code si dessus est commun au deux SGBD, donc j'aimerai le conserver telquel !

Je n'arrive pas à comprendre pourquoi sur mes environnements pas de soucis, alors que chez mon client ca ne le fait pas...

C'est un peu comme si, lorsque l'on execute un INSERT, leur sgbd ne nous autorisait pas à récupérer une valeur en retour...

Mais moi j'en ai besoin de ce fichut ID générer lors de l'INSERT !

Des pistes ? des idées ? des explications ? je prends tout !