Comment puis-je lier une ArrayList pour un PreparedStatement dans Oracle?
Je me demandais si il y avait un moyen de lier une liste de tableaux (ou n'importe quel type de Liste, d'ailleurs) à un PreparedStatement qui sera finalement utilisé pour accéder à une base de données Oracle. J'ai trouvé:
PreparedStatement DANS la clause alternatives?
Et qui semble similaire à mon problème, mais cette question est plus précise: j'aimerais lier une liste de tableaux à un PreparedStatement pour être utilisé dans Oracle, si c'est possible, comment est-ce que c'est possible?
Dans quelle mesure? Que fait votre déclaration (avec espaces)? Je doute qu'il ya une solution générale à ce parce que 1) la longueur de la Liste varie et 2) le nombre de substituants dans votre déclaration ne sera probablement pas. Aussi, pas toutes les Listes sont commandés.
Matt, tous les objets qui implémentent java.util.Liste de fournir un get(int) qui récupère l'objet à l'index spécifié. Il fournit également un itérateur. Ces deux sont non-facultatif: la commande peut être bizarre, mais il existe un ordre. De sorte que tous java.util.Liste des implémentations ordonné...
...et, en Java, la Liste se réfère généralement à la java.util.Liste de l'interface de contrat.
Matt, tous les objets qui implémentent java.util.Liste de fournir un get(int) qui récupère l'objet à l'index spécifié. Il fournit également un itérateur. Ces deux sont non-facultatif: la commande peut être bizarre, mais il existe un ordre. De sorte que tous java.util.Liste des implémentations ordonné...
...et, en Java, la Liste se réfère généralement à la java.util.Liste de l'interface de contrat.
OriginalL'auteur MetroidFan2002 | 2008-11-19
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas lier une Liste à un seul paramètre dans une déclaration préparée.
Générer du SQL avec un marqueur de paramètre pour chaque élément de la liste, par exemple:
Même si vous allez générer une nouvelle déclaration pour chaque requête, je voudrais encore vous recommandons d'utiliser un
PreparedStatement
. Si votre liste contientString
cas, vous aurez le nécessaire échapper à protéger contre l'injection SQL.Mais même si c'est un type sécurité, comme
Integer
objets, certains pilotes ou middleware peut mettre en cachePreparedStatements
, et de retourner une instance mise en cache si le même formulaire est demandé. Bien sûr, certains tests seraient nécessaires. Si vos listes varient considérablement en taille, vous aurez beaucoup de différents états, et mal mis en œuvre cache peut-être pas prêt à supporter autant de.OriginalL'auteur erickson
Vous ne pouvez pas lier directement. Il existe un moyen de passer un tableau en paramètre. Je n'ai aucune idée de ce que vous voulez faire avec elle sur la base de données côté si cela peut ne pas vous aider.
Fondamentalement, vous devez créer une table imbriquée type dans la base de données; construire un objet Java, basé sur le type, contenant les données à partir de votre tableau; et le passer en tant que paramètre.
Si vous avez créé ces objets dans la base de données:
Ensuite, vous pouvez écrire du code Java comme ceci:
Les résultats dans Oracle ressembler à ceci:
OriginalL'auteur Dave Costa
Bien, à en juger par la réponse à cette question, en particulier les commentaires de mon mal de réponse à cette question, vous ne pouvez pas.
Voir http://java.sun.com/j2se/1.3/docs/guide/jdbc/getstart/mapping.html#996857
OriginalL'auteur Paul Tomblin