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 database
name of the database file, or null for an in-memory database
factory to use for creating cursor objects, or null for the default
version 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中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="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>

复制后的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="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

posted @ 2016-06-06 14:54  wuyudong  阅读(2274)  评论(0编辑  收藏  举报
Top_arrow