为什么这个SQLite查询在AS3 AIR(Android)项目中不起作用?
希望在这里尝试询问,至少有一个为什么这个SQLite查询在AS3 AIR(Android)项目中不起作用?,android,sqlite,actionscript-3,air,Android,Sqlite,Actionscript 3,Air,希望在这里尝试询问,至少有一个AS3/AIR程序员正在进行再培训,并且AIR尚未完全死亡……: 我有一个AS3项目(关于酒瓶),使用Android版的Adobe(Harman)AIR编译,包含一个小型SQLite数据库(然后是1000行),我需要运行这个查询(跨所选参数查找相同瓶子的组,然后内部将它们连接回源表以获取其余的行,通过对x.items进行分组减少重复,并使用联合所有分别对满瓶和空瓶执行所有这些操作,将它们连接回一个结果): 一如既往地将此查询以缩小的形式提供给SQLstatement
AS3/AIR
程序员正在进行再培训,并且AIR
尚未完全死亡……:
我有一个AS3
项目(关于酒瓶),使用Android版的Adobe(Harman)AIR
编译,包含一个小型SQLite
数据库(然后是1000行),我需要运行这个查询(跨所选参数查找相同瓶子的组,然后内部将它们连接回源表以获取其余的行,通过对x.items
进行分组减少重复,并使用联合所有
分别对满瓶和空瓶执行所有这些操作,将它们连接回一个结果):
一如既往地将此查询以缩小的形式提供给SQLstatement对象的文本属性(我在project中还有一些其他更简单的查询,它们工作得很好):
现在我的问题是:
当我在我的应用程序中运行此查询时,我从DB
中没有得到任何结果,没有错误,应用程序只是停留在这一点上。如果我在PC中使用SQLiteStudio
在同一个DB上运行此查询,所有工作正常(我在约20毫秒内获得了所需的结果)。我在几个在线验证器中检查了这个查询,所有的验证器都说它是有效的。我还检查了在应用程序中处理查询字符串时,查询字符串是否完整,它是否完整。那么为什么它不工作呢?我是否触及了AS3 AIR
(SQL字符串长度,查询中的嵌套选择等)中的任何限制,或者问题可能在哪里
忘了提一下,这两个部分(联合之前和之后都是
)单独处理可以正常工作,但在一个查询中一起处理则不行。Hi.可能需要检查您的查询是否会导致AIR内存不足。我在这里看到一个三重嵌套的SELECT,如果没有适当的计划或其他东西,SQLite引擎可能无法正确处理此选择深度。此外,您可能应该重构查询以使其更简单一些如果可能的话。
SELECT b.vinoID,
b.vinoteka,
b.jmeno,
b.typ,
b.rocnik,
b.jakost,
b.kategorie,
b.zeme,
b.vinar,
b.dateIn,
b.dateOut,
b.hodnoceni,
x.pocet,
x.items
FROM (
SELECT barcode,
jmeno,
odruda,
typ,
rocnik,
jakost,
alkohol,
objem,
kategorie,
cukr,
kyseliny,
zeme,
oblast,
podoblast,
obec,
trat,
vinar,
max(dateIn) AS dateIn,
count(vinoID) AS pocet,
group_concat(vinoID) AS items
FROM _bottles
WHERE dateOut IS NULL AND barcode = '8595004640052'
GROUP BY barcode,
jmeno,
odruda,
typ,
rocnik,
jakost,
alkohol,
objem,
kategorie,
cukr,
kyseliny,
zeme,
oblast,
podoblast,
obec,
trat,
vinar
)
AS x
INNER JOIN
_bottles AS b ON (x.barcode = b.barcode OR (x.barcode IS NULL AND b.barcode IS NULL) ) AND
x.jmeno = b.jmeno AND
(x.odruda = b.odruda OR (x.odruda IS NULL AND b.odruda IS NULL) ) AND
x.typ = b.typ AND
x.rocnik = b.rocnik AND
(x.jakost = b.jakost OR (x.jakost IS NULL AND b.jakost IS NULL) ) AND
x.alkohol = b.alkohol AND
x.objem = b.objem AND
(x.kategorie = b.kategorie OR (x.kategorie IS NULL AND b.kategorie IS NULL) ) AND
x.cukr = b.cukr AND
x.kyseliny = b.kyseliny AND
(x.zeme = b.zeme OR (x.zeme IS NULL AND b.zeme IS NULL) ) AND
(x.oblast = b.oblast OR (x.oblast IS NULL AND b.oblast IS NULL) ) AND
(x.podoblast = b.podoblast OR (x.podoblast IS NULL AND b.podoblast IS NULL) ) AND
(x.obec = b.obec OR (x.obec IS NULL AND b.obec IS NULL) ) AND
(x.trat = b.trat OR (x.trat IS NULL AND b.trat IS NULL) ) AND
(x.vinar = b.vinar OR (x.vinar IS NULL AND b.vinar IS NULL) ) AND
x.dateIn = b.dateIn AND
b.dateOut IS NULL
GROUP BY x.items
UNION ALL
SELECT b.vinoID,
b.vinoteka,
b.jmeno,
b.typ,
b.rocnik,
b.jakost,
b.kategorie,
b.zeme,
b.vinar,
b.dateIn,
b.dateOut,
b.hodnoceni,
x.pocet,
x.items
FROM (
SELECT barcode,
jmeno,
odruda,
typ,
rocnik,
jakost,
alkohol,
objem,
kategorie,
cukr,
kyseliny,
zeme,
oblast,
podoblast,
obec,
trat,
vinar,
max(dateOut) AS dateOut,
count(vinoID) AS pocet,
group_concat(vinoID) AS items
FROM _bottles
WHERE dateOut IS NOT NULL AND barcode = '8595004640052'
GROUP BY barcode,
jmeno,
odruda,
typ,
rocnik,
jakost,
alkohol,
objem,
kategorie,
cukr,
kyseliny,
zeme,
oblast,
podoblast,
obec,
trat,
vinar
)
AS x
INNER JOIN
_bottles AS b ON (x.barcode = b.barcode OR (x.barcode IS NULL AND b.barcode IS NULL) ) AND
x.jmeno = b.jmeno AND
(x.odruda = b.odruda OR (x.odruda IS NULL AND b.odruda IS NULL) ) AND
x.typ = b.typ AND
x.rocnik = b.rocnik AND
(x.jakost = b.jakost OR (x.jakost IS NULL AND b.jakost IS NULL) ) AND
x.alkohol = b.alkohol AND
x.objem = b.objem AND
(x.kategorie = b.kategorie OR (x.kategorie IS NULL AND b.kategorie IS NULL) ) AND
x.cukr = b.cukr AND
x.kyseliny = b.kyseliny AND
(x.zeme = b.zeme OR (x.zeme IS NULL AND b.zeme IS NULL) ) AND
(x.oblast = b.oblast OR (x.oblast IS NULL AND b.oblast IS NULL) ) AND
(x.podoblast = b.podoblast OR (x.podoblast IS NULL AND b.podoblast IS NULL) ) AND
(x.obec = b.obec OR (x.obec IS NULL AND b.obec IS NULL) ) AND
(x.trat = b.trat OR (x.trat IS NULL AND b.trat IS NULL) ) AND
(x.vinar = b.vinar OR (x.vinar IS NULL AND b.vinar IS NULL) ) AND
x.dateOut = b.dateOut
GROUP BY x.items
ORDER BY b.dateOut DESC
bottlesCode.text = "SELECT b.vinoID, b.vinoteka, b.jmeno, b.typ, b.rocnik, b.jakost, b.kategorie, b.zeme, b.vinar, b.dateIn, b.dateOut, b.hodnoceni, x.pocet, x.items " +
"FROM (SELECT barcode, jmeno, odruda, typ, rocnik, jakost, alkohol, objem, kategorie, cukr, kyseliny, zeme, oblast, podoblast, obec, trat, vinar, max(dateIn) AS dateIn, count(vinoID) AS pocet, group_concat(vinoID) AS items " +
"FROM _bottles WHERE dateOut IS NULL AND barcode='8595004640052' GROUP BY barcode, jmeno, odruda, typ, rocnik, jakost, alkohol, objem, kategorie, cukr, kyseliny, zeme, oblast, podoblast, obec, trat, vinar) " +
"AS x INNER JOIN _bottles AS b ON (x.barcode = b.barcode OR (x.barcode IS NULL AND b.barcode IS NULL)) " +
"AND x.jmeno = b.jmeno AND (x.odruda = b.odruda OR (x.odruda IS NULL AND b.odruda IS NULL)) AND x.typ = b.typ AND x.rocnik = b.rocnik AND (x.jakost = b.jakost OR (x.jakost IS NULL AND b.jakost IS NULL)) " +
"AND x.alkohol = b.alkohol AND x.objem = b.objem AND (x.kategorie = b.kategorie OR (x.kategorie IS NULL AND b.kategorie IS NULL)) AND x.cukr = b.cukr AND x.kyseliny = b.kyseliny AND (x.zeme = b.zeme OR (x.zeme IS NULL AND b.zeme IS NULL)) " +
"AND (x.oblast = b.oblast OR (x.oblast IS NULL AND b.oblast IS NULL)) AND (x.podoblast = b.podoblast OR (x.podoblast IS NULL AND b.podoblast IS NULL)) AND (x.obec = b.obec OR (x.obec IS NULL AND b.obec IS NULL)) " +
"AND (x.trat = b.trat OR (x.trat IS NULL AND b.trat IS NULL)) AND (x.vinar = b.vinar OR (x.vinar IS NULL AND b.vinar IS NULL)) AND x.dateIn = b.dateIn AND b.dateOut is NULL " +
"GROUP BY x.items UNION ALL " +
"SELECT b.vinoID, b.vinoteka, b.jmeno, b.typ, b.rocnik, b.jakost, b.kategorie, b.zeme, b.vinar, b.dateIn, b.dateOut, b.hodnoceni, x.pocet, x.items " +
"FROM (SELECT barcode, jmeno, odruda, typ, rocnik, jakost, alkohol, objem, kategorie, cukr, kyseliny, zeme, oblast, podoblast, obec, trat, vinar, max(dateOut) AS dateOut, count(vinoID) AS pocet, group_concat(vinoID) AS items " +
"FROM _bottles WHERE dateOut IS NOT NULL AND barcode='8595004640052' GROUP BY barcode, jmeno, odruda, typ, rocnik, jakost, alkohol, objem, kategorie, cukr, kyseliny, zeme, oblast, podoblast, obec, trat, vinar) AS x INNER JOIN _bottles AS b " +
"ON (x.barcode = b.barcode OR (x.barcode IS NULL AND b.barcode IS NULL)) AND x.jmeno = b.jmeno AND (x.odruda = b.odruda OR (x.odruda IS NULL AND b.odruda IS NULL)) AND x.typ = b.typ AND x.rocnik = b.rocnik " +
"AND (x.jakost = b.jakost OR (x.jakost IS NULL AND b.jakost IS NULL)) AND x.alkohol = b.alkohol AND x.objem = b.objem AND (x.kategorie = b.kategorie OR (x.kategorie IS NULL AND b.kategorie IS NULL)) " +
"AND x.cukr = b.cukr AND x.kyseliny = b.kyseliny AND (x.zeme = b.zeme OR (x.zeme IS NULL AND b.zeme IS NULL)) AND (x.oblast = b.oblast OR (x.oblast IS NULL AND b.oblast IS NULL)) " +
"AND (x.podoblast = b.podoblast OR (x.podoblast IS NULL AND b.podoblast IS NULL)) AND (x.obec = b.obec OR (x.obec IS NULL AND b.obec IS NULL)) AND (x.trat = b.trat OR (x.trat IS NULL AND b.trat IS NULL)) " +
"AND (x.vinar = b.vinar OR (x.vinar IS NULL AND b.vinar IS NULL)) AND x.dateOut = b.dateOut " +
"GROUP BY x.items " +
"ORDER BY b.dateOut ASC";