你的位置:首页 > 操作系统

[操作系统]Android下创建一个SQLite数据库


数据库: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.

<??><manifest ="http://schemas.android.com/apk/res/android"  package="com.wuyudong.db.test"  android:versionCode="1"  android:versionName="1.0" >  <uses-sdk android:minSdkVersion="8" />   <instrumentation    android:name="android.test.InstrumentationTestRunner"    android:targetPackage="com.wuyudong.db" />  <application    android:icon="@drawable/ic_launcher"    android:label="@string/app_name" >     <uses-library android:name="android.test.runner" />  </application></manifest>

复制后的代码如下:

<??><manifest ="http://schemas.android.com/apk/res/android"  package="com.wuyudong.db"  android:versionCode="1"  android:versionName="1.0" >   <instrumentation    android:name="android.test.InstrumentationTestRunner"    android:targetPackage="com.wuyudong.db" />  <uses-sdk    android:minSdkVersion="8"    android:targetSdkVersion="17" />  <application    android:allowBackup="true"    android:icon="@drawable/ic_launcher"    android:label="@string/app_name"    android:theme="@style/AppTheme" >    <uses-library android:name="android.test.runner" />    <activity      android:name="com.wuyudong.db.MainActivity"      android:label="@string/app_name" >      <intent-filter>        <action android:name="android.intent.action.MAIN" />        <category android:name="android.intent.category.LAUNCHER" />      </intent-filter>    </activity>  </application></manifest>

项目结构如下:

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