2015-03-19 1 views
0

Iam с помощью executeWIthArray() для передачи списка. Но когда я пытаюсь использовать этот массив в запросе он показывает error.This мой кодКак использовать массив, переданный из executeWithArray (Object []) в sql Query

QueryHelper.setSortOrderZero(pm).executeWithArray(list); 

И в QueryHelper я определил функцию setSortOrderZero следующим образом:

public static Query setSortOrderZero(PersistenceManager pm) { 
final Query query = pm.newQuery("javax.jdo.query.SQL","update TABLENAME set SORTORDER = 0 where ID in list"); 

return query; 

}

Но iam получает ошибку. Так это правильный способ доступа к массиву ????

ERROR: 

    Exception in ProtectedFilter: Error executing SQL query "update PROFILEARTADS set SORTORDER = 0 where PROFILE_ID in list". 
    Mar 19, 2015 4:51:44 PM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException 
    SEVERE: The RuntimeException could not be mapped to a response, re- throwing to the HTTP container 
    javax.jdo.JDODataStoreException: Error executing SQL query "update PROFILEARTADS set SORTORDER = 0 where PROFILE_ID in list". 
    at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:422) 
    at org.datanucleus.api.jdo.JDOQuery.executeWithArray(JDOQuery.java:321) 
    at com.giri.artsite.server.per.PersistenceDelegate.deleteAllArtsduplicate(PersistenceDelegate.java:8499) 
    at com.giri.artsite.server.res.PersonServiceResource.deleteAllArts(PersonServiceResource.java:4681) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    NestedThrowablesStackTrace: 
    com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in  your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'list' at line 1 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3256) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1313) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1585) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1500) 
    at c 
+0

так что такое «список» в SQL? Это не параметр, поскольку параметр в SQL является «?» символ. Также, если вы намерены иметь 1 параметр в запросе, вы должны передать 1 значение параметра в ... НЕ массив значений параметров –

+0

list - это массив целых чисел. С executeWithArray() я думал, что могу передать массив значений в качестве параметров и который можно использовать в запросе. но он показывает эту ошибку, поэтому я спрашиваю, можно ли передать массив значений в executeWitharray() ?????? – Viveka

ответ

0

Как сказано, в SQL «параметр» должен быть «?» в запросе; у вас нет параметра, поэтому в каком-то массиве параметров нет точки. Что будет иметь смысл?

q = pm.newQuery("javax.jdo.query.SQL", "update TABLENAME set SORTORDER = 0 where ID in ?"); 
List values = ... 
q.execute(values); 
+0

Теперь это работает .......... – Viveka

+0

сейчас другая проблема возникла. Теперь ошибка исчезла. но когда iam, отправляющий 3 значения в списке, только первый получает измененные оставшиеся, не затрагивается. – Viveka

+0

, так что посмотрите на SQL, вызванный в LOG ... –

Смежные вопросы