Android数据库代码备忘

ContentProvider的实现及数据库共享原理,强烈推介老罗的四篇情景分析文章:

Android应用程序组件Content Provider简要介绍和学习计划

Android应用程序组件Content Provider应用实例

Android应用程序组件Content Provider的启动过程源代码分析

Android应用程序组件Content Provider在应用程序之间共享数据的原理分析


数据库的代码分布;

1、frameworks/base/core/java/android/provider/

.
├── AlarmClock.java
├── Applications.java
├── BaseColumns.java
├── BrowserContract.java
├── Browser.java
├── CalendarContract.java
├── CallLog.java
├── ContactsContract.java
├── Contacts.java
├── Downloads.java
├── DrmStore.java
├── LiveFolders.java
├── MediaStore.java
├── OpenableColumns.java
├── package.html
├── SearchRecentSuggestions.java
├── Settings.java
├── SocialContract.java
├── SyncConstValue.java
├── SyncStateContract.java
├── Telephony.java
├── UserDictionary.java
└── VoicemailContract.java

定义相关的表,字段,CONTENT_URI等其他公共数据成员。


2、packages/providers

.
├── ApplicationsProvider
├── CalendarProvider
├── ContactsProvider
├── DownloadProvider
├── DrmProvider
├── GoogleContactsProvider
├── MediaProvider
├── TelephonyProvider
└── UserDictionaryProvider

数据库的实现,包括数据库的创建,增删改查等外部接口。

此目录下所有的代码,packages/app下都有对应的apk,但是之所以将provider的代码独立成一个额外的apk,我认为的好处有如下几点:

- 避免代码(数据库文件)过于庞大

- 这样的实现有点类似于MVC模型,数据的使用与实现分开,可以最大限度的保持第三方应用的友好性,例如再设计一个联系人的apk,可以不用再实现一个数据库。


3、apk内部实现的数据库

上述第2条中的分离方式,并不适合所有的数据库文件,

例如:packages/apps/Browser/src/com/android/browser/provider/

.
├── BrowserProvider2.java
├── BrowserProvider.java
├── SnapshotProvider.java
└── SQLiteContentProvider.java

4、除了通过ContentProvider封装来实现应用程序之间数据库共享,还可以通过Manager-Service的形式来实现

例如:frameworks/base/core/java/android/accounts/

.
├── AccountManager.java
├── AccountManagerService.java
├── IAccountManager.aidl
...
└── OperationCanceledException.java

AccountManagerService.java中实现数据库了操作,但是对外部是透明的,也就是说应用层并不知道它对account的存储是通过数据库实现,只是提供 IAccountManager.aidl作为更加具体的接口,隐匿了query, insert等操作。

interface IAccountManager {
    String getPassword(in Account account);
    String getUserData(in Account account, String key);
    AuthenticatorDescription[] getAuthenticatorTypes();
    Account[] getAccounts(String accountType);
    Account[] getAccountsAsUser(String accountType, int userId);
    ...
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一.创建一个DataBaseHelper DataBaseHelper是一个访问SQLite的助类,提供两个方面的功能 1.getReadableDatebase(),getWriteableDatabase()可以获取SQLiteDatabase对象,通过 2.提供了onCreate()和onUpdate()两个回调函数,允许我们常见和升级数据库是进行使用 A、 在SQLiteOpenHelper的子类当中,必须要有的构造函数 B、该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDataBase对象的时候onCreate 二、创建一个实体person类并且给字段和封装 三、创建一个业务类对SQL的CRUD操作 1.getWritableDatabase()和getReadableDatabase()的区别 ,两个方法都可以获取一个用于操作数据库的SQLiteDatabase实例 2.execSQL(增,删,改都是这个方法)和close();android内部有缓存可关闭也不关闭也行,查询rawQuery是方法 3.在分页有到Cursor(游标)取游标下一个值cursor.moveToNext(),用游标对象接数据 "select * from person limit ?,?" person不能加上where 关键字 4.在删除注意:sb.deleteCharAt(sb.length() - 1); 四、AndroidCRUD业务对SQLite的CRUD操作 1.ContentValues对象的使用 2.android内部insert添加数据的方法,而且values这个不给值也必须要执行,而主键是不是null的其他字段的值是为null 3.insert update query delete 五、单元测试类要注意的 AndroidCRUDService curdService = new AndroidCRUDService(this.getContext()); /* * 注意:getContext必须在我们使用前已经注解进去的,在使用前要实力化,而且是使用后才有上下文 *一般设置为局部对象 */ 六、AndroidManifest.xml的配置 <!-- 配置用户类库android.test.runner测试 --> package jll.sqlitedb; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; /** * *@author Administrator DataBaseHelper是一个访问SQLite的助类,提供两个方面的功能 * 1.getReadableDatebase(),getWriteableDatabase()可以获取SQLiteDatabase对象,通过 * 2.提供了onCreate()和onUpdate()两个回调函数,允许我们常见和升级数据库是进行使用 */ public class DataBaseHelper extends SQLiteOpenHelper { // 给一个默认的SQLite的数据库名 private static final String DataBaseName = "SQLite_DB"; private static final int VERSION = 2; // 在SQLiteOpenHelper的子类当中,必须要有的构造函数 public DataBaseHelper(Context context, String name, CursorFacto
android录文档主要代码包括以下几个方面: 1. 布局文件代码:主要用于定义录应用程序的界面布局。可以使用LinearLayout、RelativeLayout等布局容器,通过XML语言设置控件的位置、大小、样式等属性,如EditText用于输入录内容,Button用于保存或删除录等。 2. Java类代码:主要用于处理录应用程序的逻辑。其中包括定义录类和主活动类。录类用于存储录的相关信息,如标题、内容、时间等。主活动类用于处理用户与界面的交互操作,如保存录、删除录、展示录列表等。 3. 数据库操作代码:用于创建和管理录的数据库。可以使用SQLite数据库来存储录的信息。数据库操作代码包括创建数据库、定义表结构、插入录、更新录、删除录等操作。 4. 适配器类代码:用于将录数据适配到界面上。适配器类继承自RecyclerView.Adapter类,重写其中的方法,实现录数据和界面的绑定。 5. 点击事件监听器代码:用于处理录列表中录项的点击事件。可以设置RecyclerView的点击事件监听器,在点击时打开录详情页面。 以上是android录文档主要代码的概述,实际开发过程中还需要根据需求进行具体的定制和实现。通过合理地组织和编写代码,可以实现一个功能完善、易用的录应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值