Android(安卓)ContentResolver
16lz
2021-01-26
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);
</pre><pre name="code" class="java">}<p class="p1"> <span class="s1">private</span> String getQueryWhere() {</p><p class="p2">// <span></span>String w="(" + Downloads.COLUMN_VID + " = ' " + appDetail.getAppID() + "')";</p><p class="p1"> <span class="s1">return</span> <span class="s2">"("</span> + Downloads.<span class="s3">COLUMN_VID</span> + <span class="s2">" = ' "</span> + <span class="s3">appDetail</span>.getAppID() + <span class="s2">"') AND ("</span> + Downloads.<span class="s3">COLUMN_STATUS</span> + <span class="s2">" <= '200')"</span>;</p><p class="p3"> </p>
这段时间一直在做android系统级开发,google的Email,也就是增加手机Email的易用性,增加一些新的功能来满足用户的需求。
之前的blog写过cursor的一些东西,今天作为开始就先写一些cursor查询、更新本地数据库的操作吧。先举个例子:
Cursor c = getContentResolver.query(uri , String[ ] , where , String[ ] , sort)
这条语句相信大家一定经常看到用到,查看sdk帮助文档也很容易找到其中五个参数的意思
第一个参数:是一个URI,指向需要查询的表;
第二个参数:需要查询的列名,是一个数组,可以返回多个列;
第三个参数:需要查询的行,where表示需要满足的查询条件,where语句里面可以有?号;
第四个参数:是一个数组,用来替代上面where语句里面的问号;(如果第三个参数没有?有查询wher变量,第四个参数可以设为空)
第五个参数:表示排序方式;
下面还是用一段代码来加强下印象:
<pre name="code" class="java">Cursor c = getContentResolver.query(Message.Content_URI , new String[]{SyncColumns.Server_Id} , SyncColumns.Id+"=?" , new String[]{Long.toString(MessageId)} , null);
<pre name="code" class="java">Cursor c = getContentResolver.query(Message.Content_URI , new String[]{SyncColumns.Server_Id} , <span style="font-family: Arial, Helvetica, sans-serif;">"("+</span><span style="font-family: Arial, Helvetica, sans-serif;">SyncColumns.Id+"=' "+</span><span style="font-family: Arial, Helvetica, sans-serif;">Long.toString(MessageId)+ </span><span style="font-family: Arial, Helvetica, sans-serif;">" ')" ,null, null);</span>
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是历史记录可以为空
更多相关文章
- Bmob中的几种查询方法
- 播放记录的SQLite数据库实现
- 用Android(安卓)写休闲拼图游戏(一)
- 自定义对话框 位置 大小等
- Html容器机制说明
- 布局参数说明及长按某区域出现菜单
- Android(安卓)使用Room 生成不了数据库文件
- Android使用getIdentifier()获取资源Id
- android sql语句大全