Android:SQLite查询未绑定整数参数?

Android:SQLite查询未绑定整数参数?,第1张

概述使用参数向Android平台(2.2)上的数据库进行查询时遇到问题.我创建了这样的表:db.execSQL("CREATEVIRTUALTABLE"+Msg._TABLE_NAME+"USINGFTS3("+Msg._ID+"INTEGER,"(...)+Msg.READ+"SHORTDEFAULT0,"

使用参数向Android平台(2.2)上的数据库进行查询时遇到问题.我创建了这样的表:

db.execsql("CREATE VIRTUAL table " + Msg._table_name + " USING FTS3 ("            + Msg._ID + " INTEGER, "            (...)            + Msg.READ + " SHORT DEFAulT 0,"            + Msg.URGENT + " SHORT DEFAulT 0"            + ");");

然后我试图使用参数化查询来查询此:

String[] columns = new String[] {Msg.ROWID, Msg.Title, Msg.READ, Msg.URGENT};(...)getContentResolver().query(Msg.CONTENT_URI, columns,     Msg.URGENT + "=? AND " + Msg.READ + "=?" + , whereArgs, null);

其中每个查询的whereArgs有所不同:

String[] urgentUnread = new String[]{"1", "0"};String[] regularUnread = new String[]{"0", "0"};

但是即使存在数据,无论返回什么结果/行都返回0.内容提供者不更改参数,并且使用queryBuilder以及“直接”调用查询时查询均不返回任何内容:

Cursor c = db.query(tables, columns, where, whereArgs, groupBy, having, orderBy, limit);

如果我只执行String concat,则查询有效:

getContentResolver().query(Msg.CONTENT_URI, columns,     Msg.READ + "=0 AND " + Msg.URGENT + "=1", null, null);

但这似乎杀死了参数查询的目的,并且讨厌缓存. Dalvik抱怨(在进行了大量查询之后),缓存中没有用于查询的空间,而且具有讽刺意味的是,它告诉我将带参数的查询与’?’一起使用.我很想相信我:)

我知道JavaDoc声明参数绑定为StringS,但我简直不敢相信…因为那将是主要问题…啊,… WTF

我在哪里错了?

提前致谢.

解决方法:

这是OP,我正在进一步研究和试验,得出的结论是有FTS3归咎于此.由于我需要数据为searchable by fulltext,因此我正在使用FTS3创建虚拟表,然后参数绑定失败.

因为我不想直接查询影子表(Msg_content),所以我的解决方案是将数据拆分为2个相关的表:

db.execsql("CREATE table " + Msg._table_name + " (" +    Msg._ID + PRIMARY_KEY_autoINC +     Msg.PRIORITY + " TEXT," +    Msg.RECEIVED + " INTEGER," +    Msg.MOBILE_STATUS + " INTEGER DEFAulT 0," +    Msg.READ + " SHORT DEFAulT 0," +    Msg.FLASH + " SHORT DEFAulT 0" +");");db.execsql("CREATE VIRTUAL table " + MsgText._table_name + " USING FTS3 (" +     MsgText._ID + PRIMARY_KEY +    MsgText.Title + " TEXT," +    MsgText.CONTENT + " TEXT," +    MsgText.KEYWORDS + " TEXT," +    "FOREIGN KEY(" + MsgText._ID + ") " +    "REFERENCES " + Msg._table_name + "(" + Msg._ID + ") " +");");

然后,我创建了供查询使用的视图:

db.execsql("CREATE VIEW IF NOT EXISTS " + VIEw.MSG_CONTENT +    " AS SELECT " +    Msg._table_name + "." + Msg._ID + ", " +    Msg._table_name + "." + Msg.READ + ", " +    Msg._table_name + "." + Msg.FLASH + ", " +(...)    MsgText._table_name + "." + MsgText.Title + ", " +    MsgText._table_name + "." + MsgText.CONTENT +    " FROM " + Msg._table_name + ", " + MsgText._table_name +    " WHERE " + Msg._table_name + "." + Msg._ID + "=" +    MsgText._table_name + "." + MsgText._ID);

这对我来说非常有效,因为我可以使用参数查询数据并在需要时进行全文搜索.查询性能与仅使用一张表时的性能相同.

我希望这可以帮助可能遇到相同问题的其他人.

干杯,
聚苯乙烯

附言显然检查了Meta和it is OK to reply to self.

总结

以上是内存溢出为你收集整理的Android:SQLite查询未绑定整数参数?全部内容,希望文章能够帮你解决Android:SQLite查询未绑定整数参数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1068476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存