Android提供的sqlite数据库,是被集成在Android runtime,每个应用程序均能创建和使用数据库。默认情况下,是作为APP的私有数据库,保存在“/data/data/APP包名/databases”。
没有系统权限的Android APP有权限读写文件的区域有两个地方。
一是“/data/data/包名/”文件夹下的files、shared_prefs、databases等文件夹,这些文件夹下系统都有提供API调用,如shared_prefs是使用SharedPreferences默认的存储位置,databases是使用SQLiteOpenHelper集成类的默认存储位置。
二是SD卡,可通过 Environment.getExternalStorageDirectory()获取SD的目录路径。与第一种方式的区别是需要在AndroidManifest.xml来声明权限:
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:name="android.permission.READ_EXTERNAL_STORAGE"
有系统权限的APP可在文件系统中的其他地方读写文件和数据库,如/opt等。
系统权限的获得方式如下,在AndroidManifest.xml中添加属性:
“android:sharedUserId="android.uid.system"”
并且用源码中的platform.pk8、platform.x509.pem为APK签名。
以下是数据库编程常用的一些概念解释:
什么是 SQLiteDatabase?
一个 SQLiteDatabase 的实例代表了一个SQLite 的数据库,通过SQLiteDatabase 实例的一些方法,我们可以执行SQL 语句,对数据库进行增、删、查、改的操作。需要注意的是,数据库对于一个应用来说是私有的,并且在一个应用当中,数据库的名字也是惟一的。
什么是 SQLiteOpenHelper ?
根据这名字,我们可以看出这个类是一个辅助类。这个类主要生成一个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的方法getWritableDatabase(),或者getReadableDatabase()方法的时候,如果当时没有数据,那么Android 系统就会自动生成一个数据库。SQLiteOpenHelper 是一个抽象类,我们通常需要继承它,至少实现里边的2 个函数,onCreate(),onUpgrade()。
什么是 ContentValues 类?
ContentValues 类和Hashmap/Hashtable比较类似,它也是负责存储一些名值对,但是它存储的名值对当中的名是一个String 类型,而值都是基本类型。
什么是 Cursor ?
Cursor 在Android 当中是一个非常有用的接口,通过Cursor 我们可以对从数据库查询出来的结果集进行随机的读写访问。
参考文章
http://www.eoeandroid.com/thread-100492-1-1.html
Android SQLite的数据库文件存储在SD卡中(一)
http://www.sqlite.org/datatype3.html
Datatypes In SQLite Version 3