android - 为什么这个 SQLite 查询在 AS3 AIR (Android) 项目中不起作用?
问题描述
试图在这里问,希望至少有一个AS3/AIR
程序员剩余并且AIR
还没有完全死去......:我有一个使用AndroidAS3
编译的项目(关于酒瓶) ,其中包含一个小型数据库(少于1000行)和我需要运行此查询(在所选参数中查找相同瓶子的组,然后将它们返回到源表以获取其余行,通过on减少重复项并分别对满瓶和空瓶执行所有这些操作,将它们重新组合成一个结果使用):Adobe (Harman) AIR
SQLite
INNER JOINing
GROUPing
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(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
一如既往地以缩小形式将此查询提供给 SQLstatement 对象的文本属性(我在项目中有一些其他更简单的查询,它们工作正常)。:
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";
现在我的问题是:当我在我的应用程序中运行这个查询时,我没有得到任何结果DB
,没有错误,应用程序只是卡在这个上面。如果我在 PC 上使用 运行此查询SQLiteStudio
,则一切正常(我在 ~ 20 毫秒内得到了所需的结果)。我在几个在线验证器中检查了这个查询,他们都说它有效。我还检查了在应用程序中处理它时查询字符串是否完整并且它是完整的。那么为什么它不起作用呢?我是否触及任何限制AS3 AIR
(SQL 字符串长度、查询中的嵌套选择、......无论如何)或问题可能出在哪里?
忘了提一下,单独处理的两个部分(之前和之后UNION ALL
)都可以正常工作,但在一个查询中一起处理却不行。
解决方案
推荐阅读
- javascript - 在 Firefox 上输入类型编号:单击旋转按钮不会触发焦点事件
- vue.js - 我可以在父组件的不同部分使用组件的部分html模板吗
- c - 使用 scanf() 函数的 C 编程中的意外输出
- javascript - 转换对象数组中的对象值?
- winforms - 当 TableLayoutPanel 激活滚动时,第一行变得太大
- c# - c# NLog如何只获取一个以longdate为文件名的日志文件
- jakarta-mail - 在邮件服务器中获取消息正文很少会导致错误的消息编号,因此返回不同消息的正文
- google-tag-manager - 对象 .... 在 GTM 变量中。如何?
- python - 每个键使用不同的值和每个键的不同颜色进行绘图
- git - 查找对当前分支引入某些更改的合并提交