设为首页 加入收藏

TOP

Android 中管理短信(三)
2014-11-24 14:41:21 来源: 作者: 【 】 浏览:23
Tags:Android 管理 短信
也太仁慈了。


看看能不能再挖掘一下sms的功能。先来做一个错误的查询:


getContentResolver().query( Uri.parse("content://sms/") , new String[]{"a"}, "b", null, null);


log输出错误的SQL语句:


SELECT a FROM sms WHERE (b) ORDER BY date DESC


query方法中没有Group by,如果想对短信做统计,对Cursor进行遍历再统计也太慢了。


在SQL语言中group by在Where后面,那就在条件参数中想想办法:


Android组织SQL语句时将条件两端加(),那就拼一个group by出来吧:


getContentResolver().query( Uri.parse("content://sms/") , new String[]{"count(*) as count, thread_id"}, "1=1) group by (thread_id", null, null);


那么输出的SQL= SELECT count(*) as count, thread_id FROM sms WHERE ( 1=1) group by (thread_id ) ORDER BY date DESC


如果想查询URI没有对应的表怎么办呢,比如想知道 mmssms.db数据库中有哪些表,


查询的表是URI定的,再在条件参数中拼凑肯定是不行。


那我们把目光往前移,看看在字段参数中能不能凑出来。


要查询其它表,关键要去掉系统固定添加的FROM sms,


用用SQL中的注释吧,


getContentResolver().query(Uri.parse("content://sms/"), new String[]{" * from sqlite_master WHERE type = 'table' -- "}, null, null, null);


那么输出的SQL=SELECT * from sqlite_master WHERE type = 'table' -- FROM sms ORDER BY date DESC


居然能够运行。


得寸进尺,再进一步,如果加入“;”也能运行的话,哈哈,那么建表、删除表、更新表也能为所欲为咯。


getContentResolver().query(Uri.parse("content://sms/"), new String[]{" * from sms;select * from thrreads;-- "}, null, null, null);


很可惜,只运行了第一条SQL语句,看来在关键问题上,android还是有所控制的。


不过支持--也很不错了,这样可以查询数据库中所有的表,而且还可以多表联查


首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android中内容观察者的使用---- C.. 下一篇Android使用ContentObserver监听..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: