您的位置:首页 > 移动开发 > Android开发

android应用程序里使用SQLite

2015-03-03 16:19 351 查看
一,创建一个数据库操作助手类DataBaseHelper,该类继承自SQLiteOpenHelper。

重点还是重写其 onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)两个方法。

代码如下:

[code]public class DataBaseHelper extends SQLiteOpenHelper {
    private static final int VERSION=1;

    public DataBaseHelper(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        // TODO 自动生成的构造函数存根
    }

    public DataBaseHelper(Context context, String name) {
        // TODO 自动生成的构造函数存根
        this(context,name, VERSION);
    }

    public DataBaseHelper(Context context, String name,int version) {
        // TODO 自动生成的构造函数存根
        this(context,name,null, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        System.out.println("创建数据库");
        db.execSQL("create table t_user(id integer,nick_name nvarchar(50),name nvarchar(50),sex char(2),email nvarchar(50),primary key (id))");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        System.out.println("更新数据库");

    }

}


二,如果android应用需要用户的注册与登陆,那么可以设计为在应用启动时,提示用户注册,这时可以在MainActivity里创建数据库,代码如下:

[code]public class MainActivity extends FragmentActivity {
    private DataBaseHelper dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dbHelper=new DataBaseHelper(MainActivity.this,"pedometer.db");
        SQLiteDatabase sqlitedatabase = dbHelper.getWritableDatabase();
    }
}


以上这种方式创建的数据库在手机的内存卡里,如果没有root权限,是看不到的。因此,如果能把数据库创建在SD卡上,将会很方便。那么,想要在SD卡上创建数据库,首先要进行的工作是判断SD是否存在,有如下判断

[code]if (!android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment
                .getExternalStorageState())) {

Toast.makeText(MainActivity.this, "请插入SD卡,谢谢合作!", 1000).show();
        } else {
        ……
        }


即判断android.os.Environment.MEDIA_MOUNTED常量(已经挂载并且拥有可读可写权限)是否等于android.os.Environment.getExternalStorageState();(该方法返回的是返回外部存储设备的当前状态),如果存在SD卡,则进行如下操作:

[code]else {              spathDataBase=Environment.getExternalStorageDirectory().getPath()+File.separator+"UserData"+File.separator+MainActivity.class.getPackage().getName();

            File dataBaseFile=new File(pathDataBase);

            if(!dataBaseFile.exists()){
                dataBaseFile.mkdirs();
            }

            dataBaseName=pathDataBase+File.separator+"pedometer.db";

            dbHelper = new DataBaseHelper(MainActivity.this, dataBaseName);
            SQLiteDatabase sqlitedatabase = dbHelper.getWritableDatabase();
            Toast.makeText(MainActivity.this, "数据库创建成功", 1000).show();


这里在SD卡上创建数据库的时候,给路径就好了 。因为SQLiteOpenHelper类中构造方法会建立数据库 。

[code]private DataBaseHelper dbHelper;
private String pathDataBase; //数据库文件的路径
private String dataBaseName; //数据库文件名


pathDataBase=Environment.getExternalStorageDirectory().getPath()+File.separator+”UserData”+File.separator+MainActivity.class.getPackage().getName();

以上得到的是数据库文件在SD卡上的完整路径,然后创建目录:

[code]    File dataBaseFile=new File(pathDataBase);

            if(!dataBaseFile.exists()){
                dataBaseFile.mkdirs();
            }


在加上数据库文件的名:dataBaseName=pathDataBase+File.separator+”pedometer.db”;

最后调用DataBaseHelper的构造方法在SD卡上穿件数据库:

[code]dbHelper = new DataBaseHelper(MainActivity.this, dataBaseName);
SQLiteDatabase sqlitedatabase = dbHelper.getWritableDatabase();
Toast.makeText(MainActivity.this, "数据库创建成功", 1000).show();


这时,数据库文件已经在SD卡上创建好了。

以下是自己做的Demo的完整代码:

DataBaseHelper类:

[code]package com.pedometer.utils;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DataBaseHelper extends SQLiteOpenHelper {
    private static final int VERSION=1;
    public DataBaseHelper(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        // TODO 自动生成的构造函数存根
    }

    public DataBaseHelper(Context context, String name) {
        // TODO 自动生成的构造函数存根
        this(context,name, VERSION);
    }

    public DataBaseHelper(Context context, String name,int version) {
        // TODO 自动生成的构造函数存根
        this(context,name,null, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        System.out.println("创建数据库");
        db.execSQL("create table t_user(id integer,nick_name nvarchar(50),name nvarchar(50),sex char(2),email nvarchar(50),primary key (id))");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        System.out.println("更新数据库");

    }

}


MainActivity :

[code]package com.example.pedometer;

import java.io.File;

import com.pedometer.user.UserLoginFragment;
import com.pedometer.utils.DataBaseHelper;

import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends FragmentActivity {
    private DataBaseHelper dbHelper;
    private String pathDataBase;
    private String dataBaseName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (!(android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment
                .getExternalStorageState())))
        {
            Toast.makeText(MainActivity.this, "请插入SD卡,谢谢合作!", 0).show();
        } else {

            pathDataBase=Environment.getExternalStorageDirectory().getPath()+File.separator+"UserData"+File.separator+MainActivity.class.getPackage().getName();

            File dataBaseFile=new File(pathDataBase);

            if(!dataBaseFile.exists()){
                dataBaseFile.mkdirs();
            }

            dataBaseName=pathDataBase+File.separator+"pedometer.db";

            dbHelper = new DataBaseHelper(MainActivity.this, dataBaseName);
            SQLiteDatabase sqlitedatabase = dbHelper.getWritableDatabase();
            Toast.makeText(MainActivity.this, "数据库创建成功", 1000).show();

            FragmentManager fm = getSupportFragmentManager();
            Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);

            if (fragment == null) {
                fragment = new UserLoginFragment();
                fm.beginTransaction().add(R.id.fragmentContainer, fragment)
                        .commit();
            }
        }
    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: