Android ContentResolver

    private void saveSteps(int step) {
        Cursor cursor = getContentResolver().query(Downloads.CONTENT_URI,
                new String[]{Downloads._ID, Downloads.COLUMN_VID, Downloads.COLUMN_STATUS, Downloads._DATA},
                getQueryWhere(),
                null,
                null);
        

        if (null == cursor)
            return;

        if (cursor.moveToNext()) {
            int status = cursor.getInt(cursor.getColumnIndexOrThrow(Downloads.COLUMN_STATUS));
            if (step != status) {
                ContentValues values = new ContentValues();
                values.put(Downloads.COLUMN_STATUS, step);

                int id = cursor.getInt(cursor.getColumnIndexOrThrow(Downloads._ID));
                getContentResolver().update(ContentUris.withAppendedId(Downloads.CONTENT_URI, id), values, null, null);

                String filePath = cursor.getString(cursor.getColumnIndexOrThrow(Downloads._DATA));
                File file = new File(filePath);
                if (file.exists())
                    file.delete();
                
                //xlh_add 删除数据库中本条数据
                getContentResolver().delete(ContentUris.withAppendedId(Downloads.CONTENT_URI, id), "(" + Downloads.COLUMN_VID + " = ' " + appDetail.getAppID() + "')", null);
}

    private String getQueryWhere() {

//    String w="(" + Downloads.COLUMN_VID + " = ' " + appDetail.getAppID() + "')";

        return "(" + Downloads.COLUMN_VID + " = ' " + appDetail.getAppID() + "') AND (" + Downloads.COLUMN_STATUS + " <= '200')";

    


这段时间一直在做android系统级开发,google的Email,也就是增加手机Email的易用性,增加一些新的功能来满足用户的需求。


    之前的blog写过cursor的一些东西,今天作为开始就先写一些cursor查询、更新本地数据库的操作吧。先举个例子:


    Cursor c = getContentResolver.query(uri , String[ ] , where , String[ ] , sort)


    这条语句相信大家一定经常看到用到,查看sdk帮助文档也很容易找到其中五个参数的意思


    第一个参数:是一个URI,指向需要查询的表;


    第二个参数:需要查询的列名,是一个数组,可以返回多个列;


    第三个参数:需要查询的行,where表示需要满足的查询条件,where语句里面可以有?号;


    第四个参数:是一个数组,用来替代上面where语句里面的问号;(如果第三个参数没有?有查询wher变量,第四个参数可以设为空)


    第五个参数:表示排序方式;


    下面还是用一段代码来加强下印象:

  
Cursor c = getContentResolver.query(Message.Content_URI ,   
new String[]{SyncColumns.Server_Id} , SyncColumns.Id+"=?" ,  new String[]{Long.toString(MessageId)} , null);
  
Cursor c = getContentResolver.query(Message.Content_URI ,   
new String[]{SyncColumns.Server_Id} , "("+SyncColumns.Id+"=' "+Long.toString(MessageId)+ " ')" ,null, null);

try { if(c.moveToFirst()) { return c.getString(0);//0表示返回的行数 } else { return null; } } finally { c.close(); }
 
  
 
  



    下面再来看一段更新数据库的操作

ContentValues cv = new ContentValues();  
cv.put(Body.HTML_Content, newHtmlBody);//第一个参数是列名,第二个参数是要放入的值  
String where = Body.Message_Key + "=" + mMessageId;  
getContentResolver().update(uri , cv , where , null);  
 //这里的四个参数应该很清楚了,uri是表,cv上面要更新的值,where是搜索行的语句,null是历史记录可以为空


你可能感兴趣的:(Android ContentResolver)