bonjour,
Quelqu'un peut-il m'expliquer pourquoi la fonction position de DB2 ne me retourne pas ce qu'il faudrait quand je la met dans un PreparedStatement.
NB : IBMREQD et sysibm.sysdummy1 c'est pour l'exemple, pour prendre quelque chose de standard. Dans mon code '?' peut etre chaine vide ou toute autre chaine.
J'ai essayé aussi
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 PreparedStatement prepareStatement = con.prepareStatement("select position(? in IBMREQD using OCTETS) as pos from sysibm.sysdummy1"); prepareStatement.setString(1,""); ResultSet resultSet = prepareStatement.executeQuery(); while (resultSet.next()) { System.out.println(resultSet.getInt("pos")); } com.ibm.db2.jcc.am.mo: DB2 SQL Error: SQLCODE=-418, SQLSTATE=42610, SQLERRMC=null, DRIVER=4.7.85 at com.ibm.db2.jcc.am.dd.a(dd.java:676) at com.ibm.db2.jcc.am.dd.a(dd.java:60) at com.ibm.db2.jcc.am.dd.a(dd.java:127) at com.ibm.db2.jcc.am.nm.c(nm.java:2493) at com.ibm.db2.jcc.am.nm.d(nm.java:2470) at com.ibm.db2.jcc.am.nm.a(nm.java:1950) at com.ibm.db2.jcc.t4.db.g(db.java:139) at com.ibm.db2.jcc.t4.db.a(db.java:39) at com.ibm.db2.jcc.t4.t.a(t.java:32) at com.ibm.db2.jcc.t4.sb.h(sb.java:135) at com.ibm.db2.jcc.am.nm.gb(nm.java:1921) at com.ibm.db2.jcc.am.om.kc(om.java:2806) at com.ibm.db2.jcc.am.om.b(om.java:3525) at com.ibm.db2.jcc.am.om.Xb(om.java:670) at com.ibm.db2.jcc.am.om.executeQuery(om.java:640) at jdbc.connectDB(jdbc.java:49) at jdbc.main(jdbc.java:14)
= meme chose
Code : Sélectionner tout - Visualiser dans une fenêtre à part prepareStatement.setNull(1,Types.VARCHAR);
Si on tape la requete directement dans le terminal DB2, ca marche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 db2inst1@dev01:~$ db2 "select position('' in IBMREQD using OCTETS) as pos from sysibm.sysdummy1" POS ----------- 1 1 record(s) selected.
Si on fait ca dans le code :
sans paramètres, ça marche...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 PreparedStatement prepareStatement = con.prepareStatement("select position('' in IBMREQD using OCTETS) as pos from sysibm.sysdummy1");
Strange, non?
J'ai essayé p6spy pour voir la transformation de la requete, ça la transforme bien comme ce que je tape dans le terminal DB2 et qui marche!!
Merci
Partager