Rol*_*and 3 sql sqlite android android-contentprovider
我已经构建了一个基本的内容提供程序,用于存储用于学习目的的SMS消息,到目前为止我可以阅读(没有选择参数),插入,更新和删除.
但是我一直在努力弄清楚如何格式化我的提供程序中的WHERE子句的选择参数:
基本上我的应用程序需要搜索特定的时间戳(长格式)并返回其_id
说你的数据库有一个这样的条目,你试图访问:
2 | 1 | 1410293471300 |测试类型1 ||测试| 0
整个数据库看起来像这样:
_id | CLIENTTRXID | CREATED_AT |类型| MESSAGEPRIO |留言|被接受
1 | 1 | 1410293471000 |测试类型1 ||测试| 0
2 | 1 | 1410293471300 |测试类型1 ||测试| 0
3 | 1 | 1410293471600 |测试类型1 ||测试| 0
在sql中,查询将是"从警报中选择_id,其中CREATED_AT = 1410293471300;"
我希望代码可以做相同的代码:
//normally i would get the string dynamically but to make it equal to the sql
String date = "1410293471300";
String[] selectionArgs = new String[]{ date };
Cursor cursor = getContext().getContentResolver().query(AlertContract.CONTENT_URI, null, AlertContract.Column.CREATED_AT, selectionArgs, AlertContract.DEFAULT_SORT);
Run Code Online (Sandbox Code Playgroud)
似乎总是产生以下错误,无论我尝试作为selectionArgs
Exception caught? Cannot bind argument at index 1 because the index is out of range. The statement has 0 parameters.
Run Code Online (Sandbox Code Playgroud)
这是我的contentprovider的查询方法:
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables( AlertContract.TABLE);
switch (sURIMatcher.match(uri)) {
case AlertContract.STATUS_DIR:
break;
case AlertContract.STATUS_ITEM:
qb.appendWhere(AlertContract.Column.ID + "=" + uri.getLastPathSegment());
break;
default:
throw new IllegalArgumentException( "illegal uri: " + uri);
}
String orderBy = (TextUtils.isEmpty(sortOrder)) ? AlertContract.DEFAULT_SORT : sortOrder;
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = qb.query(db, projection, selection, selectionArgs, null, null, orderBy);
//register for uri changes
cursor.setNotificationUri(getContext().getContentResolver(), uri);
Log.d(TAG, "queried records: "+cursor.getCount());
return cursor;
}
Run Code Online (Sandbox Code Playgroud)
据推测,我错过了一些非常明显的东西,并且发布这个问题会觉得很傻.
但是目前我非常感谢任何帮助,因为我很难过.