在Android 中, SQLite 是被集成于 Android runtime ,每个 Android 应用程序都
可以方便的使用 SQLite 数据库。
你为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的,
数据库位于Android设备/data/data/<appname>/ 下的/databases文件夹中

1、数据库的创建与定义:
1)手动方式
启动模拟器,cmd下输入进入设备控制台
adb shell
进入 /data/data/<appname>/
如果没有databases目录,则创建目录
# mkdir databases

进入 /databases目录

sqlite3 mytest.db
 sqlite>create table t_user(id varchar(32) UNIQUE, username varchar(32), password varchar(20), gender varchar(1), memo varchar(200));
 sqlite>insert into t_user(id, username, password, gender, memo) values ('1001','admin','admin','M','He is an administrator.');
 sqlite>select * from t_user
 1001|admin|admin|M|He is an administrator.


具体操作参见sqlite文档
ctrl+d 退出sqlite
可以看到myest.db

2)通过程序方式
<1>建库

android.content.Context 中提供了创建数据库函数
 createDatabase(String name, int version, int mode, CursorFactory factory);
 openOrCreateDatabase(String DATABASE_NAME, int mode, CursorFactory factory);

 eg. (this为context或其子类对象,如Activity)
 //如果没有数据库mytest.db,则创建
 SQLiteDatabase db = this.openOrCreateDataBase("mytest.db", MODE_PRIVATE, null);



<2>删库
eg.
this.deleteDatabase(String name); (注:如果先open一个数据库再进行数据库删除就会出错)

<3>建表删表

eg.
 db.execSQL("CREATE TABLE t_user(id varchar(32) UNIQUE, username varchar(32), password varchar(20), gender varchar(1), memo varchar(200))");
 db.execSQL("DROP TABLE IF EXISTS t_user");


注:通过程序的方式去操作手工创建的数据库会有权限问题。


2、数据库ADUQ
1)Add

eg.
 String sql = "insert into t_user(id, username, password, gender, memo) values ('1001','admin','admin','M','He is an administrator.')";
 db.execSQL(sql);

 2)Delete
 eg.
 String sql = "delete from t_user";
 db.execSQL(sql);

 3)Update
 String sql = "update t_user set gender='F' where id='1001'";
 db.execSQL(sql);

 4)Query
 eg.
 Cursor cursor = db.rawQuery("SELECT id, username, gender, memo from t_user where id='1001'", null);
 String username = "";
 if(cursor !=null){
     if(cursor.moveToFirst()){
        do{
            username = cursor.getString(1);
        }while(cursor.moveToNext());
     }
 }




3、扩展SQLiteOpenHelper类,进行数据库操作
操作数据库的最佳实践是创建一个辅助类,由它封装所有对数据库的复杂访问,对于调用代码而言它是透明的,
因此我创建了一个SQLiteDBAdapter的辅助类,由它创建、打开、关闭和使用SQLite数据库