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

时间:2014-02-26 18:35:33

标签: android sqlite

我曾经通过将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查询的最佳方法是什么,使查询可读且故障率较低,并避免以前列出的问题! 提前致谢

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我无法一目了然地阅读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)