一,创建一个数据库操作助手类DataBaseHelper,该类继承自SQLiteOpenHelper。
重点还是重写其 onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)两个方法。
代码如下:
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里创建数据库,代码如下:
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是否存在,有如下判断
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卡,则进行如下操作:
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类中构造方法会建立数据库 。
private DataBaseHelper dbHelper;
private String pathDataBase; //数据库文件的路径
private String dataBaseName; //数据库文件名
pathDataBase=Environment.getExternalStorageDirectory().getPath()+File.separator+”UserData”+File.separator+MainActivity.class.getPackage().getName();
以上得到的是数据库文件在SD卡上的完整路径,然后创建目录:
File dataBaseFile=new File(pathDataBase);
if(!dataBaseFile.exists()){
dataBaseFile.mkdirs();
}
在加上数据库文件的名:dataBaseName=pathDataBase+File.separator+”pedometer.db”;
最后调用DataBaseHelper的构造方法在SD卡上穿件数据库:
dbHelper = new DataBaseHelper(MainActivity.this, dataBaseName);
SQLiteDatabase sqlitedatabase = dbHelper.getWritableDatabase();
Toast.makeText(MainActivity.this, "数据库创建成功", 1000).show();
这时,数据库文件已经在SD卡上创建好了。
以下是自己做的Demo的完整代码:
DataBaseHelper类:
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 :
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();
}
}
}
}