Sziasztok,
Adott egy lekérdezés: SELECT id FROM table WHERE type IN (egész értékek);Az egész értékeket egy Object[] változó tartalmazza, listboxból kiszedve. Az adatbázis postgresql. A programrészben a következőképp történik a lekérdezés végrehajtása:
Object[] types = (Object[]) getTypelistbox().getSelected();
tableRowSet.setCommand("SELECT table.id FROM table WHERE table.column IN (?)");
tableRowSet.setObject(1, Arrays.asList(types), java.sql.Types.INTEGER);
tableRowSet.execute();
A hibaüzenet a következő, amennyiben a megadott értékek 1 és 2:
Exception Details: org.postgresql.util.PSQLException
ERROR: invalid input syntax for integer: "[1, 2]"
Neten nem találtam más megoldást arra, hogy lehet WHERE IN megkötésbe több értéket tömbként paraméterezni. Ha valakinek van működő ötlete, kérem írja meg. Előre is köszönöm.
- 2054 megtekintés
Hozzászólások
Hali, nem kotekedes keppen, de javitsd a cimet, ez nem JPQL.
---
return NEVER;
Ubuntu 8.10
HP nx6110
https://www.getdropbox.com/referrals/NTI3OTI2NzY5
www.tszebeni.hu
- A hozzászóláshoz be kell jelentkezni
import org.apache.commons.lang.StringUtils;
/* ... */
tableRowSet.setObject(1, StringUtils.join(types, ","), java.sql.Types.STRING); /* integer?? Egy tombre?! */
--
[code]
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Ez nem sebezhető sql injection-el?
Meg lehet úgy csinálni, hogy ne a programozónak kelljen a tömböt szöveggé alakítani?
- A hozzászóláshoz be kell jelentkezni
Köszönöm a választ. Azt tudom, hogy String-ként megy (most is hasonlóképpen csinálom), de integer tömbként akartam átadni a paramétert. Nem csak a rowset-nél, hanem a session bean-ben használt jpql lekérdezéseknél is. A problémával mások is szembesültek (itt és itt), de Toplink alatt nincs rá más megoldás, mivel az IN nem fogad el collectiont paraméterként. (Az eclipselink 2.0 már igen).
- A hozzászóláshoz be kell jelentkezni
lehet, hogy ennek az az oka, hogy a JPA1 nem tamogatja ezt (toplink), mig a JPA2 igen? (eclipselink a refimpl)
- A hozzászóláshoz be kell jelentkezni
Első pillantásra a JPA2-ben a where CriteriaQuery-vel módosítható úgy a query, hogy megfelelő legyen. A where paraméterként kaphat egy olyan in-t, aminek collection a paramétere.
- A hozzászóláshoz be kell jelentkezni