数据库:SQLite(轻量级,嵌入式的数据库)
大量的相似结构的数据的储存,快速的查询。特殊的文件(按照一定的格式生成)
数据库的创建
创建文件
1.声明文件对象,文件是不会被创建出来的。
File file = new File("文件名称");
2.写文件(文件才会被创建出来)
FileOutputStream fos = new FileOutputStream(file);
fos.write("hdahfdsaklfh".getbytes());
创建数据库
1.实现SQLiteOpenHelper的子类PersonSQLiteOpenHelper
public class PersonSQLiteOpenHelper extends SQLiteOpenHelper { public PersonSQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase arg0) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub }}
SQLiteOpenHelper的几个参数的解释如下:
android.database.sqlite.SQLiteOpenHelper.SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version)Create a helper object to create, open, and/or manage a database. This method always returns very quickly. The database is not actually created or opened until one of getWritableDatabase or getReadableDatabase is called.Parameters:context to use to open or create the databasename of the database file, or null for an in-memory databasefactory to use for creating cursor objects, or null for the defaultversion number of the database (starting at 1); if the database is older, onUpgrade will be used to upgrade the database; if the database is newer, onDowngrade will be used to downgrade the database
2.getWritableDatabase/getReadableDatabase()
新建TestPersonDB.java
package com.wuyudong.db.test;import com.wuyudong.db.PersonSQLiteOpenHelper;import android.test.AndroidTestCase;public class TestPersonDB extends AndroidTestCase { public void testCreateDB() throws Exception { PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext()); helper.getWritableDatabase(); }}
3.onCreate() 数据库第一次创建的执行的方法,适合做数据库表结构的初始化
// Called when the database is created for the first time. // 在数据库第一次创建的时候执行的方法 // 如果数据库已经创建完毕,就不会再去执行了。 // 适合做数据库表结构的初始化操作 // db代表的就是当前的数据库 @Override public void onCreate(SQLiteDatabase db) { // 初始化数据库的表结构 db.execSQL("create table person (id integer primary key autoincrement, name varchar(20), number varchar(20))"); }
注意:
sqlite数据库是一个嵌入式轻量级的数据库,内部不区分数据类型的,不对数据的长度校验。
新建AndroidTest工程test
将AndroidManifest.xml中的如下相关的代码复制到本项目的AndroidManifest.xml中
复制后的代码如下:
项目结构如下:
PersonSQLiteOpenHelper.java完整代码如下:
package com.wuyudong.db;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class PersonSQLiteOpenHelper extends SQLiteOpenHelper { /** * 定义一个数据库创建的帮助类,里面有两个方法需要实现 相当于 file类 * * @author Administrator * */ public PersonSQLiteOpenHelper(Context context) { // context 上下文 // person.db 数据库文件名称 // factory 游标工厂 // version 数据库的版本号 从1开始 super(context, "person.db", null, 1); // TODO Auto-generated constructor stub } // Called when the database is created for the first time. // 在数据库第一次创建的时候执行的方法 // 如果数据库已经创建完毕,就不会再去执行了。 // 适合做数据库表结构的初始化操作 // db代表的就是当前的数据库 @Override public void onCreate(SQLiteDatabase db) { // 初始化数据库的表结构 db.execSQL("create table person (id integer primary key autoincrement, name varchar(20), number varchar(20))"); } // 当数据库的版本号发生升级的时候调用。 // 数据库只能升级不能降级。 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub }}
运行程序
打开person.db