教程链接:启动时初始化数据
SQLite
一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.
查看与删除数据库
Android应用一旦创建好数据库后,一般的路径为
/data/data/your.app.package/databases/your-db-name
在我这个应用里的路径则为
/data/data/com.example.diligentpiggy/databases/diligentpiggy.db
把数据库从设备上考出来,你可以使用 adb pull 命令(或者在 IDE 上做相应操作)。存储一个修改过的数据库到设备上,使用 adb push 命令。
>adb root
>adb remount
>adb pull /data/data/com.example.diligentpiggy/databases/diligentpiggy.db
查看SQLite数据库文件,可以通过上面介绍中所说的FireFox的插件,也可以使用我常用的工具 - SQLite Database Browser
有时候,数据库重新测试初始化或者其他情况,我们要删除数据库,则可以通过adb shell 进行操作
>adb shell
#rm /data/data/com.example.diligentpiggy/databases/diligentpiggy.db
主程序修改
没什么可说的,直接修改initApp方法
public void initApp() {
Log.v("DiligentPiggy Main", "DiligentPiggy init ...");
DBHelper dbHelper = new DBHelper(this);
dbHelper.buildDB();
dbHelper.close();
}
数据库助手
按照自己的想法进行了封装,助手应该干更多的事情,所以又增加了一个构建数据库助手。
对于建表的sql本想用资源db.xml进行外部定义,还要自己解析xml什么的,就放弃了。
package com.example.diligentpiggy;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
public class DBHelper {
private static final String LOG_TAG = "DiligentPiggy_BilldbHelper";
private static final String DB_NAME = "diligentpiggy.db";
private SQLiteDatabase db;
private Context context;
public DBHelper(Context c) {
context = c;
// 创建SQLite数据库连接
db = context.openOrCreateDatabase(DB_NAME, SQLiteDatabase.OPEN_READWRITE, null);
Log.v(LOG_TAG, "db path = " + db.getPath());
}
public void buildDB() {
// 检测是否需要构建
if(!BuildDBHelper.checkIsBuilded(db)) {
BuildDBHelper.build(db);
}
}
public SQLiteDatabase getDB() {
return db;
}
public static class BuildDBHelper {
public static Boolean checkIsBuilded(SQLiteDatabase db) {
Boolean result = false;
try {
String columns[] = {"type", "name"};
Cursor cursor = db.query("sqlite_master", columns, "name='config'", null, null, null, null);
result = cursor.getCount() > 0;
cursor.close();
Log.v(LOG_TAG, "Check is Builded ok, result is "+result.toString());
} catch(Exception e) {
Log.v(LOG_TAG, "Check is Builded err, "+e.getMessage());
}
return result;
}
public static void build(SQLiteDatabase db) {
createTable_config(db);
createTable_bills(db);
createTable_acctitem(db);
}
public static void createTable_config(SQLiteDatabase db) {
try {
db.execSQL("CREATE TABLE config("
+" id INTEGER PRIMARY KEY, "
+" name TEXT "
+");");
Log.v(LOG_TAG, "Create table config ok");
} catch(Exception e) {
Log.v(LOG_TAG, "Create table config err, table exists");
}
}
public static void createTable_bills(SQLiteDatabase db) {
try {
db.execSQL("CREATE TABLE bills("
+" id INTEGER PRIMARY KEY, "
+" fee INTEGER, "
+" userid INTEGER, "
+" sdate TEXT, "
+" stime TEXT, "
+" desc TEXT "
+");");
Log.v(LOG_TAG, "Create table bills ok");
} catch(Exception e) {
Log.v(LOG_TAG, "Create table bills err, table exists");
}
}
public static void createTable_acctitem(SQLiteDatabase db) {
try {
db.execSQL("CREATE TABLE acctitem("
+" id INTEGER PRIMARY KEY, "
+" pid INTEGER, "
+" name TEXT "
+");");
Log.v(LOG_TAG, "Create table acctitem ok");
} catch(Exception e) {
Log.v(LOG_TAG, "Create table acctitem err, table exists");
}
try {
db.execSQL("insert into acctitem values (1,null,'收入')");
db.execSQL("insert into acctitem values (2,1,'工资')");
db.execSQL("insert into acctitem values (9998,1,'其他')");
db.execSQL("insert into acctitem values (0,null,'支出')");
db.execSQL("insert into acctitem values (3,0,'生活用品')");
db.execSQL("insert into acctitem values (4,0,'水电煤气费')");
db.execSQL("insert into acctitem values (5,0,'汽油费')");
db.execSQL("insert into acctitem values (9999,0,'其他')");
Log.v(LOG_TAG,"insert into acctitem ok");
} catch(Exception e) {
Log.v(LOG_TAG,"insert into acctitem err, " + e.getMessage());
}
}
}
public void close() {
db.close();
}
}
所有源码可以到github上下载,地址: https://github.com/lazyboywu/diligentpiggy/tree/coures_2