Android 中构建 Sqlite 查询的最佳实践

Posted

技术标签:

【中文标题】Android 中构建 Sqlite 查询的最佳实践【英文标题】:Best practice for Sqlite query building in Android 【发布时间】:2014-02-26 18:35:32 【问题描述】:

我曾经使用输入参数构建我的Sqlite 复杂查询,方法是将string 值与我的参数连接起来,并返回此string 和最终可执行文件query,如下所示:-

public static String getExampleQuery(String id) 
    String query = "SELECT * " + "FROM " + Constants.TABLE_NAME
            + " as table " + "INNER JOIN " + Constants.TABLE_NAME_TWO
            + " as table2 " + "ON table." + Constants.COL_ID
            + " = table2." + Constants.COL_ID
                            + " and table2." + Constants.COL_ID + " = '"
                            + para1 + "'"
            + " order by table." + Constants.COL_ID + " desc ";
    return query;

然后,我传递要执行的query 字符串。 但是,大​​多数时候我会因为忘记spaces 或在外部参数前后添加额外的单引号' 而面临很多问题。总是很难从logcat 中找出问题所在。此外,查询根本不是可读的。

构建Sqlite 查询的最佳方式是什么,可以使查询可读且不易出错并避免前面列出的问题! 提前致谢

【问题讨论】:

【参考方案1】:

查看:SQLiteQueryBuilder,它使编写查询的级别降低了。您将在此处找到一些如何开始使用它的示例:

http://www.vogella.com/tutorials/androidSQLite/article.html

【讨论】:

在您的示例中,他使用我的传统方式构建查询!联系字符串 他用的是SQLiteQueryBuilder,更多的例子你自己去挖google。 尝试阅读链接直到最后,你会明白我在说什么:)。还是谢谢【参考方案2】:

我无法一目了然地阅读SQLiteQueryBuilder 代码,而且我非常习惯阅读 SQL,因此我编写查询的方式接近于您的方式。我试图把我的回报放在一个合乎逻辑的地方以提高可读性。我还使用rawQuery 方法,这样我就可以分离出任何变量,而不必担心引用文本或不引用整数。而且我在我的查询中添加了额外的空格......它只是让我不会犯常见的错误:

String[] whereVars = new String[]id;
String query = " SELECT * "
             + " FROM " + Constants.TABLE_NAME + " as t " 
             + " INNER JOIN " + Constants.TABLE_NAME_TWO + " as t2 " 
             + " ON t." + Constants.COL_ID + " = t2." + Constants.COL_ID
             + " WHERE t2." + Constants.COL_ID + " = ? "
             + " ORDER BY t." + Constants.COL_ID + " DESC ";
db.rawQuery(query, whereVars)

【讨论】:

以上是关于Android 中构建 Sqlite 查询的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上同时将数据保存在内存和数据库中的最佳实践

Android - 将 SQLite 与 MySQL 同步的最佳方式 [重复]

Android :数据存储方案学习笔记之 SQLite数据库存储

检查查询是不是在 Android 的 sqlite 中成功

[转]Android ORM系列之GreenDao最佳实践

如何在 SQLite 查询中忽略重音(Android)