2011-10-28 2 views
7

J'essaie d'insérer un tableau dans une table, mais j'ai besoin de convertir la liste au type de tableau SQL. J'utilise la méthode Connection#createArrayOf(), mais je reçois une exception.Comment créer un tableau SQL à partir d'une liste Java?

Je dois passer un nom de type, mais je ne sais pas ce que c'est et je reçois toujours une exception. Le tableau provient de VARCHAR.

Comment résoudre ceci pour insérer le tableau?

Le code

Object[] array = new Object[token.getCategories().size()]; 
array = token.getCategories().toArray(); 
pstmTokenInsert.setArray(1, conn.createArrayOf("VARCHAR", array)); 

Le stacktrace

org.postgresql.util.PSQLException: Could not find array type for data type VARCHAR 
at org.postgresql.jdbc4.AbstractJdbc4Connection.createArrayOf(AbstractJdbc4Connection.java:73) 
at org.postgresql.jdbc4.Jdbc4Connection.createArrayOf(Jdbc4Connection.java:21) 
at org.apache.commons.dbcp.DelegatingConnection.createArrayOf(DelegatingConnection.java:560) 
at br.ifsp.da.data.TokenDAO.insertTokens(TokenDAO.java:37) 
at br.ifsp.da.data.ProcessedPageInserter.loopInsertion(ProcessedPageInserter.java:44) 
at br.ifsp.da.data.ProcessedPageInserter.call(ProcessedPageInserter.java:27) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
at java.lang.Thread.run(Thread.java:722) 
+0

Utilisez-vous Oracle? Le type de tableau SQL dépend fortement de la base de données sous-jacente. – ManuPK

+1

Pouvez-vous publier la pile de l'exception? :) –

+0

@ManuPK PostgreSQL –

Répondre

18
+0

Merci, maître. M'a beaucoup aidé. C'était une simple erreur (cela m'a pris quelques heures), mais je n'ai trouvé cette information nulle part. Merci. –

+2

quand je change en 'varchar' j'ai eu cette erreur. org.postgresql.util.PSQLException: ERREUR: l'opérateur n'existe pas: caractère variant = caractère variable [] Indice: Aucun opérateur ne correspond au nom donné et au (x) type (s) d'argument. Vous devrez peut-être ajouter des transtypages de type explicite. –

+0

@Damith Vous pouvez utiliser = N'IMPORTE QUEL opérateur au lieu de IN – JuliuszJ

Questions connexes