PreparedStatement sous DB2, bug ?
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.
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
| 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) |
J'ai essayé aussi
Code:
prepareStatement.setNull(1,Types.VARCHAR);
= meme chose
Si on tape la requete directement dans le terminal DB2, ca marche :
Code:
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 :
Code:
1 2
| PreparedStatement prepareStatement = con.prepareStatement("select
position('' in IBMREQD using OCTETS) as pos from sysibm.sysdummy1"); |
sans paramètres, ça marche...
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