SQLite возвращает неверное количество строк в качестве курсора - PullRequest
0 голосов
/ 24 февраля 2012

Я столкнулся со странной проблемой при написании приложения для Android.

У меня особенно запутанный кусок SQL (который я сейчас нахожусь в процессе уборки), который возвращает курсор для пользовательского listadapter.

Проблема заключается в том, что я частично настраиваю свой код с помощью SQLITEMAN. Я обнаружил, что получаю правильные результаты от SQLITEMAN (как и при некоторой агрегации), но когда я запускаю его через Android, я не получаю результатов в скопированной базе данных. прямо с андроида используя DDMS.

Опять же, да, я знаю, что код грязный, но он дает результаты. Если код на самом деле является проблемой, его можно привести в порядок.

SELECT -1 as _id, 'player1|player2' as players, null as turntext, null as turnimage,30 as maxturns,19 as curturns 
union 
SELECT games._id,games.players,lastturn.turntext,lastturn.turnimage,games.maxturns,lastturn.curturns 
FROM games 
inner join (select _id,turntext,turnimage,t.gameid, tb.curturns from turns t inner join (select tb.gameid,count(tb._id) as curturns from turns tb group by tb.gameid) tb on tb.gameid = t.gameid where _id = (select max(_id) 
from turns where gameid = t.gameid )  group by t.gameid) lastturn  on lastturn.gameid = games._id  order by games._id desc

РЕДАКТИРОВАТЬ: я переписал SQL, так что есть только 2 внутренних цикла. Не удивительно, что проблема все еще сохраняется.

После дополнительных исследований у меня появилось новое преимущество: когда я вставлял записи с кодом, приведенным ниже, я думаю, что приведение возвращаемого значения к int, хотя и приемлемое, основываясь на моих методах, могло запутать представление значений ...

ContentValues initialValues = new ContentValues(); 
initialValues.put(KEY_GAMEID,gameId); 
initialValues.put(KEY_TURNTEXT,text); 
initialValues.put(KEY_TURNIMAGE,imageBytes); 

return (int)mDb.insert(TABLE_NAME, null, initialValues); 
...