JDBC Oracle ArrayIndexOutOfBoundsException
Je suis une Exception, tout en essayant d'insérer une ligne dans une table oracle.
Je suis à l'aide d'ojdbc5.jar pour oracle 11
c'est le sql, je suis en train
INSERT INTO rule_definitions(RULE_DEFINITION_SYS,rule_definition_type,
rule_name,rule_text,rule_comment,rule_message,rule_condition,rule_active,
rule_type,current_value,last_modified_by,last_modified_dttm,
rule_category_sys,recheck_unit,recheck_period,trackable)
VALUES(RULE_DEFINITIONS_SEQ.NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
et je reçois l'Exception suivante. Toute aide sera appréciée.
java.ljava.lang.ArrayIndexOutOfBoundsException: 15 chez oracle.jdbc.le pilote.OracleSql.computeBasicInfo(OracleSql.java:950) chez oracle.jdbc.le pilote.OracleSql.getSqlKind(OracleSql.java:623) chez oracle.jdbc.le pilote.OraclePreparedStatement.(OraclePreparedStatement.java:1212) chez oracle.jdbc.le pilote.T4CPreparedStatement.(T4CPreparedStatement.java:28) chez oracle.jdbc.le pilote.T4CDriverExtension.allocatePreparedStatement(T4CDriverExtension.java:68) chez oracle.jdbc.le pilote.PhysicalConnection.prepareStatement(PhysicalConnection.java:3059) chez oracle.jdbc.le pilote.PhysicalConnection.prepareStatement(PhysicalConnection.java:2961) chez oracle.jdbc.le pilote.PhysicalConnection.prepareStatement(PhysicalConnection.java:5874) au org.jboss.de la ressource.l'adaptateur.jdbc.WrappedConnection.prepareStatement(WrappedConnection.java:232) au com.gehcit.la plate-forme.la cds.commun.util.db.DBWrapper.executeInsertOracleReturnPK(DBWrapper.java:605)
Je pense que vous devez coller le code à l'exécution de cette requête SQL.
OriginalL'auteur lostinbytes | 2008-11-10
Vous devez vous connecter pour publier un commentaire.
Dans Oracle Metalink (Oracle du site de support - Note ID 736273.1) je trouve que c'est un bug dans JDBC adaptateur (version 10.2.0.0.0 à 11.1.0.7.0) que lorsque vous appelez preparedStatement avec plus de 7 paramètres positionnels puis JDBC va lancer cette erreur.
Si vous avez accès à Oracle Metalink puis une option est d'y aller et de télécharger des patchs mentionnées.
L'autre solution est la solution - utiliser des paramètres nommés à la place des paramètres positionnels:
et ensuite utiliser
etc. pour définir nommé lier les variables pour cette requête.
Metalink patch ne fonctionne toujours pas corrigé le bug dans certains cas spécifiques. Par exemple, cette requête ne fonctionne pas ni avec patché ojdbc ni le plus récent est ojdbc version (11.2.0.1.0 ): select 1 from dual dans lequel 1(?,?,?,?,?,?,?,?) et 1=:foo Cependant cette requête fonctionne très bien: select 1 from dual dans lequel 1(?,?,?,?,?,?,?) et 1=:foo Conclusion: ne pas mélanger la position et les paramètres nommés pour éviter ce problème particulier.
Pouvez-vous fournir oracle metalink url d'où je peux télécharger le patch ? Comment ues ce patch? Est-il une autre solution mentionnée ci-dessus
OriginalL'auteur Raimonds Simanovskis
Sans voir le code, la seule chose que je peux penser à est de vérifier que chaque connexion est en cours d'accès dans un thread de manière sûre. L'Oracle pilotes sont généralement assez solide. La seule fois où j'ai vu d'étranges erreurs internes comme ça, c'est quand vous avez plusieurs threads accèdent à la même connexion instance et de faire des trucs bizarres avec elle. Ils ne sont pas thread-safe, et doit être limitée à une par fil.
OriginalL'auteur madlep
Dirait que vous êtes de passage dans le mauvais nombre de paramètres. Vous devriez être en train de passer en 15, mais vous êtes soit de l'envoi de 16 ou 14.
OriginalL'auteur Elie
Ouais, à moins que mon curseur de comptage est éteint, vous essayez d'insérer des 16 valeurs dans 15 colonnes.
Tenter la même chose SQLPlus*, vous devez obtenir l'erreur ORA-00913: trop de valeurs
OriginalL'auteur Colin Pickard
Vous créez une requête préparée avec 15 emplacements réservés, si je comprends bien correct. Donc, vous avez besoin pour passer un tableau avec 15 les valeurs de paramètre à l'appel. Peut-être que vous avez manqué l'un ou l'ajout d'un surplus?
Je pense que c'est un supplémentaire trop.
OriginalL'auteur Arne Burmeister
Lorsque vous n'avez pas accès à l'oracle.jdbc.PreparedStatement classe (et sont contraints d'utiliser java.sql.PreparedStatement, qui ne prend pas en charge les méthodes de #setXXXAtName()), la solution proposée pour utiliser des paramètres nommés n'est pas une option.
J'ai utilisé le PreparedStatement et GeneratedKeyHolder approche pour les valeurs impératives d'être passé (heureusement de moins de 7), et ont généré la clé primaire est retourné à émettre une simple mise à jour SQL pour les valeurs restantes.
OriginalL'auteur Kirsten
je suis à l'aide de mybatis + oracle + ressort + maven.
Même message d'erreur "exception arrayindexoutofboundsexception", si le fait d'avoir 8 (ou) paramètres ci-dessus.
En pom version modifiée ojdbc6 à ojdbc14,
Il a travaillé.
OriginalL'auteur Siva Anand