2011-10-28 17 views
7

Bir tabloya dizi eklemeye çalışıyorum, ancak listeyi SQL Array türüne dönüştürmem gerekiyor. Connection#createArrayOf() yöntemini kullanıyorum, ancak bir istisna alıyorum.Java Listesinden bir SQL dizisi nasıl oluşturulur?

Bir tür adı geçmem gerekiyor, ancak bunun ne olduğunu bilmiyorum ve her zaman bir istisna alıyorum. Dizi VARCHAR'dan.

Diziyi eklemek için bunu nasıl çözüyorum?

kod

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

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

Oracle kullanıyor musunuz? SQL dizisi türü altta yatan veritabanına bağlıdır. – ManuPK

+1

Özel Durumun stacktrace'ini yayınlayabilir misiniz? :) –

+0

@ManuPK PostgreSQL –

cevap

18
+0

Teşekkür ederiz, master. Bana çok yardım etti. Basit bir hata oldu (bu beni biraz zaman aldı), ancak bu bilgiyi hiçbir yerde bulamadım. Teşekkürler. –

+2

'varchar' olarak değiştirdiğimde bu hatayı aldım. org.postgresql.util.PSQLException: ERROR: operatör mevcut değil: karakter değişkeni = karakter değişkeni [] İpucu: Hiçbir operatör belirtilen ada sahiplerine ve argüman türüne/karakterlerine uymuyor. –

+0

@Damith açık türündeki castleri eklemeniz gerekebilir = IN yerine = ANY operatörü kullanabilirsiniz – JuliuszJ

İlgili konular