ERRORCODE=-4461
Un ERRORCODE=-4461 est renvoyé lorsqu'une conversion de données non valide dans une connexion JCC de type 4 se produit lorsque la fonction setObject() est utilisée.
Lorsque la fonction Java:setObject pour les types de données caractère et chaîne est utilisée et renvoie une erreur -4461, ce code signifie qu'une conversion de données non valide se produit chaque fois qu'une connexion JCC de type 4 est utilisée. Mais la même fonction aboutit lorsqu'une connexion JCC de type 2 est utilisée.
Cause
Cette erreur est renvoyée pour l'implémentation de type 4 du pilote JDBC , mais pas pour le type 2 car le pilote JDBC de type 4 est un pilote natif Java pur qui respecte strictement les spécifications Java JDBC . Alors que le pilote Type2 JDBC est un pilote basé sur l'interface de ligne de commande qui est moins strict avec les conversions de type de données.
<test program snip>
String url = "jdbc:db2://aaaaabbbbb.xxx.com:50000/Sample";
Connection con = DriverManager.getConnection(url,"userid","mypwd");
System.out.println("DB Sample Connected");
.
PreparedStatement pstmt =
con.prepareStatement("INSERT INTO table_name VALUES (?)");
// pstmt.setString (2, "P"); ===> SUCCESS
pstmt.setObject (2, new Character('P'), Types.CHAR ); ===> FAILs
pstmt.execute ();
}
catch (Exception ex) {
System.out.println("Exception: " + ex);
ex.printStackTrace();
}
}Exception: com.ibm.db2.jcc.c.SqlException:
[jcc][1091][10417][3.64.96] Invalid data conversion: Parameter instance
P is invalid for the
requested conversion. ERRORCODE=-4461, SQLSTATE=42815
at com.ibm.db2.jcc.am.bd.a(bd.java:679)
at com.ibm.db2.jcc.am.bd.a(bd.java:60)
at com.ibm.db2.jcc.am.bd.a(bd.java:103)
at com.ibm.db2.jcc.am.ec.a(ec.java:1360)
at com.ibm.db2.jcc.am.ec.a(ec.java:1306)
at com.ibm.db2.jcc.am.jo.a(jo.java:2411)
at com.ibm.db2.jcc.am.jo.setObject(jo.java:2301)
at MAINCLASS.main(settest.java:18)Lorsque pstmt.setObject est remplacé par pstmt.setString (la ligne mise en commentaire qui précède la ligne défaillante), il insère "P" dans la table.
Réponse
La solution consiste à utiliser la fonction setString à la place de setObject lorsque vous savez que les données d'entrée seront un caractère ou une chaîne.