Android SQLite核心功能

发布于 2024-12-10 22:13:17 字数 674 浏览 0 评论 0原文

根据 android 文档 它具有完整的 sqlite 支持。这是否意味着我可以使用核心函数作为投影的一部分查询,如下所示:

final ContentResolver cr = getContentResolver();    
final String [] projection = new String []{
    ...,
    ...,
    "replace(...) as replacedCol"
};

Cursor c = cr.query(uri, projection, null, null, null);

此代码段抛出 IllegalArgumentException无效列替换(...))。 那么有没有办法在sqlite查询中使用核心函数呢?

编辑 该错误很可能是由 ContentProvider 引起的,它会检查允许的列,因此似乎不可能将函数与内容解析器一起使用。

According to android documentation it has full sqlite support. Does it mean that I can use core functions as part of projection for query, like this:

final ContentResolver cr = getContentResolver();    
final String [] projection = new String []{
    ...,
    ...,
    "replace(...) as replacedCol"
};

Cursor c = cr.query(uri, projection, null, null, null);

This snippet throws IllegalArgumentException (Invalid column replace(...)).
So is there way to use core functions in sqlite queries?

edit the error is likely to be caused by ContentProvider, which checks for allowed columns, so it seems that using functions with content resolver is impossible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

动次打次papapa 2024-12-17 22:13:17

提供者查询中的投影>> sql 查询中的列

通常是 ContentProvider 包含的

static final HashMap<String, String> map = new HashMap<String, String>();
static {
  map.put("NameInProjection", "RealDBColumn AS NameInProjection");
  map.put("replacedCol", "replace(...) as replacedCol");
}

,在 ContentProvider 的查询方法中我们使用它,就像

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
  SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
  builder.setTables(table);
  builder.setProjectionMap(map);
  return builder.query(mDB.getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder);
}

这样 SQLiteQueryBuilder 使用地图将投影转换为实际查询

projection in provider query <> columns in sql query

usually ContentProvider contains

static final HashMap<String, String> map = new HashMap<String, String>();
static {
  map.put("NameInProjection", "RealDBColumn AS NameInProjection");
  map.put("replacedCol", "replace(...) as replacedCol");
}

and in query method of ContentProvider we use it like

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
  SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
  builder.setTables(table);
  builder.setProjectionMap(map);
  return builder.query(mDB.getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder);
}

so SQLiteQueryBuilder translate projection to real query using the map

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文