2012-02-23 46 views
2

当我必须查询相关表时,我总是使用rawQuery()。但是,如果没有原始查询,ContentProviders都没有更好的方法吗? 如果您已将所有字段定义为常量(而非硬编码)并且您必须手动连接所有字段,那么编写原始查询会非常痛苦。犯错很容易。 谢谢!在不使用rawQuery的情况下查询Android中的相关表()

这里有一些简单的代码示例,你可以看到,它不是“礼貌”到Concat的常量所有的时间...

String sql = "SELECT "+T_PARTICIPATION+".* , "+STUDENT_SURNAME+"+\", \"+"+NAME+" AS "+NAME+" "+ 
     "FROM "+T_PARTICIPATION+", "+T_STUDENT+" "+ 
     "WHERE "+T_PARTICIPATION+"."+CONNECTION_PROFILE_ID+"=1 AND "+SEANCE_ID+" IN (1, 2)"; 
return mDatabase.rawQuery(sql, null); 

编辑:虽然没有提供更多的答案,我接受@JoeMalin提供的一个

回答

1

我假设这是一个SQLite数据库,不需要作为内容提供者公开,所以将它保留为SQLite是正确的方法。

为什么不使用SQLiteDatabase.query()?它允许选择字符串和一个 选择参数数组。或者,你可能需要的是SQLiteQueryBuilder。不知道更多关于你的应用程序,或看到你当前的代码,很难说。

+0

嗨!是的,这并不需要作为内容提供商公开。我不使用query(),因为它不允许你查询多个表(这是FROM中的多个表)。我编辑了这个问题并包含了一些代码。从你的回应中,我认为SQLiteQueryBuilder中的这个方法更合适:'public static String buildQueryString(boolean distinct,String tables,String [] columns,String where,String groupBy,String having,String orderBy,String limit) ' – Caumons 2012-02-25 20:02:16

+0

你知道是否有比使用'buildQueryString()'更好的方法吗? – Caumons 2012-03-09 00:13:26

相关问题