- 浏览: 827267 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
renzhengzhi:
请教一下楼主,公有云和私有云的开发,具体要做哪些工作呢?我拿到 ...
4,云的4 种模式 -
SangBillLee:
我用了solr5.5,用SolrQuery查询,没法高亮,不知 ...
solr5.x快速入门 -
lw900925:
这翻译读起来真是别扭。
solr in action翻译-第一章1.1 -
springjpa_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring MVC性能提升 -
h416373073:
正遇到了此问题不知如何解决, 多谢分享
solr错误
SQLiteDatabase db = mOpenHelper.getReadableDatabase(),得到一个可读的SQLiteDatabase 实例。
Cursor c = qb.query(db, projection, selection, selectionArgs, null,null, orderBy)语句,这个查询类似于一个标准的SQL查询,但是这个查询是SQLiteQueryBuilder 来发起的,而不是SQLiteDatabase 直接发起的,所以在参数方面略有不同。这个函数为 query(SQLiteDatabase db, String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder, String limit)下边将各个参数介绍一下。
第一个参数为要查询的数据库实例。
第二个参数是一个字符串数组,里边的每一项代表了需要返回的列名。
第三个参数相当于SQL语句中的where部分。
第四个参数是一个字符串数组,里边的每一项依次替代在第三个参数中出现的问号(?)。
第五个参数相当于SQL语句当中的groupby部分。
第六个参数相当于SQL语句当中的having部分。
第七个参数描述是怎么进行排序。
第八个参数相当于SQL当中的limit部分,控制返回的数据的个数。
SQLiteQueryBuilder
包:android.database.sqlite.SQLiteQueryBuilder
作用:SQL 查询辅助类,在写contentprovider时很适合
例: CallLogProvider实现的query:
1. private static final HashMap<String, String> sCallsProjectionMap;
2. static {
3.
4. // Calls projection map
5. sCallsProjectionMap = new HashMap<String, String>();
6. sCallsProjectionMap.put(Calls._ID, Calls._ID);
7. sCallsProjectionMap.put(Calls.NUMBER, Calls.NUMBER);
8. sCallsProjectionMap.put(Calls.DATE, Calls.DATE);
9. sCallsProjectionMap.put(Calls.DURATION, Calls.DURATION);
10. sCallsProjectionMap.put(Calls.TYPE, Calls.TYPE);
11. sCallsProjectionMap.put(Calls.NEW, Calls.NEW);
12. sCallsProjectionMap.put(Calls.CACHED_NAME, Calls.CACHED_NAME);
13. sCallsProjectionMap.put(Calls.CACHED_NUMBER_TYPE, Calls.CACHED_NUMBER_TYPE);
14. sCallsProjectionMap.put(Calls.CACHED_NUMBER_LABEL, Calls.CACHED_NUMBER_LABEL);
15. }
16.
17. public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
18. String sortOrder) {
19. SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
20. int match = sURIMatcher.match(uri);
21. switch (match) {
22. case CALLS: {
23. qb.setTables("calls"); //设置表名
24. qb.setProjectionMap(sCallsProjectionMap); //设置列名映射
25. break;
26. }
27.
28. case CALLS_ID: {
29. qb.setTables("calls");
30. qb.setProjectionMap(sCallsProjectionMap);
31. qb.appendWhere("calls._id="); //构造用于查询的where子句
32. qb.appendWhere(uri.getPathSegments().get(1));
33. break;
34. }
35.
36. case CALLS_FILTER: {
37. qb.setTables("calls");
38. qb.setProjectionMap(sCallsProjectionMap);
39. String phoneNumber = uri.getPathSegments().get(2);
40. qb.appendWhere("PHONE_NUMBERS_EQUAL(number, ");
41. qb.appendWhereEscapeString(phoneNumber); //同appendWhere,可防止SQL注入
42. qb.appendWhere(mUseStrictPhoneNumberComparation ? ", 1)" : ", 0)");
43. break;
44. }
45.
46. default:
47. throw new IllegalArgumentException("Unknown URL " + uri);
48. }
49.
50. final SQLiteDatabase db = mDbHelper.getReadableDatabase();
51. Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder, null);
52. if (c != null) {
53. c.setNotificationUri(getContext().getContentResolver(), CallLog.CONTENT_URI);
54. }
55. return c;
56. }
注意: qb.setProjectionMap(sCallsProjectionMap); 这个函数的作用是在qb里设置数据库字段的别名, 即用户定义列名->数据库列名,在执行qb.query时可以使用用户定义列名设置projection、selection等。 如果不需要对列名进行映射,可以不调用这个函数。但是如果调用,必须对所有列都进行映射,映射中key和value可以完全相同。以上代码中就是这样,至于为什么还要这么做,等下一步继续研究。。。
发表评论
-
Android SDK更新 Connection to http://dl-ssl.google.com refused 解决方法 .
2013-10-10 11:38 1182问题描述使用SDK Manager ... -
android 对话框中的进度条 (ProgressDialog)
2012-03-10 00:16 2560显然要定义对话框进 ... -
Android开发学习笔记WebView
2012-02-28 21:59 5114WebView(网络视图)能加载 ... -
Android ListView理解之BaseAdapter .
2012-02-28 21:43 2042ListView是Android开发过程中较为常见的组件之一, ... -
AsyncTask的用法
2012-02-27 21:36 885在开发Android应用时必须遵守单线程模型的原则: An ... -
android中的ellipsize
2012-02-26 17:47 1062最近为了解决某个bug,textview中内容过长的话自动 ... -
BaseExpandableListAdapter
2012-02-26 17:40 1547转载自:中国手机开 ... -
使用命令安装apk的方法
2012-02-26 15:44 1687使用命令安装apk的方法, 第一步,将应用防止在androi ... -
Android PendingIntent和Intent的区别
2012-02-16 22:39 1722以前在学习AlarmManager里面会遇到PendingI ... -
android中gallery的使用
2012-02-13 22:52 25111,创建配置文件 <?xml version=&quo ... -
android的tabHost的使用
2012-02-13 22:10 1564废话不多,直接介绍怎么使用 1,用几个tab,就建立几个ta ... -
android源码解析之二ApplicaitonInfo和PackageManager
2012-02-07 13:26 2245ApplicationInfo ApplicationIn ... -
android源码解读一(Context)
2012-02-05 21:13 4248Context类 Context是一个抽象类 public ... -
android 属性android:visibility
2012-02-05 12:16 934此属性意思是此视图是否显示, 例如RelativeLayou ... -
android默认焦点设置的方法
2012-02-05 12:13 18901在使用到文本框(EditText)来进行数据录入的时候,有时默 ... -
imageView.setScaleType
2012-02-03 17:36 5985imageView.setScaleType(ImageVie ... -
文件在SD卡存储
2012-02-02 10:47 1755手机的存储空间分俩种,一种是手机自带的,另一种是SD卡,(外存 ... -
广播接收者
2012-02-02 10:45 1213广播接受者(BroadcastReceiv ... -
android的服务
2012-02-02 10:45 973服务android中服务和window中的服务是类似的东西,服 ... -
android资源的应用
2012-02-02 10:43 1455color颜色在配置文件中定义路径:res/values/co ...
相关推荐
这个项目旨在提供一个简单的api来构建sqlite查询语句。这个库只做构建语句;它不是orm。api语法的灵感来自jooq库。
import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; import android.os.ParcelFileDescriptor; import android.text.TextUtils; import bl; import c; import d; import e; import f; ...
SqLibLite-适用于Android的sqlite库 介绍 该库为基本的android api SQLite添加了...String sql = android.database.sqlite.SQLiteQueryBuilder.buildQueryString( false, " customers " , new String[] { " customer
aSQLite + Android 顾名思义aSQLite +(Android SQLite plus) ,该库旨在将一些实用功能附加到Android SQLite。 它提供了许多方便的类和方法来帮助我们连接和执行那些CURD SQL。... SQLiteQueryBuilder . buildQueryS