1 /**
2 * 创建数据库子类,继承自SQLiteOpenHelper类
3 * 需 复写 onCreat()、onUpgrade()
4 */
5 public class DatabaseHelper extends SQLiteOpenHelper {
6
7 // 数据库版本号
8 private static Integer Version = 1;
9
10 /**
11 * 构造函数
12 * 在SQLiteOpenHelper的子类中,必须有该构造函数
13 */
14 public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
15 int version) {
16 // 参数说明
17 // context:上下文对象
18 // name:数据库名称
19 // param:一个可选的游标工厂(通常是 Null)
20 // version:当前数据库的版本,值必须是整数并且是递增的状态
21
22 // 必须通过super调用父类的构造函数
23 super(context, name, factory, version);
24 }
25
26 /**
27 * 复写onCreate()
28 * 调用时刻:当数据库第1次创建时调用
29 * 作用:创建数据库 表 & 初始化数据
30 * SQLite数据库创建支持的数据类型: 整型数据、字符串类型、日期类型、二进制
31 */
32 @Override
33 public void onCreate(SQLiteDatabase db) {
34 // 创建数据库1张表
35 // 通过execSQL()执行SQL语句(此处创建了1个名为person的表)
36 String sql = "create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))";
37 db.execSQL(sql);
38
39 // 注:数据库实际上是没被创建 / 打开的(因该方法还没调用)
40 // 直到getWritableDatabase() / getReadableDatabase() 第一次被调用时才会进行创建 / 打开
41 }
42
43 /**
44 * 复写onUpgrade()
45 * 调用时刻:当数据库升级时则自动调用(即 数据库版本 发生变化时)
46 * 作用:更新数据库表结构
47 * 注:创建SQLiteOpenHelper子类对象时,必须传入一个version参数,该参数 = 当前数据库版本, 若该版本高于之前版本, 就调用onUpgrade()
48 */
49
50 @Override
51 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
52 // 参数说明:
53 // db : 数据库
54 // oldVersion : 旧版本数据库
55 // newVersion : 新版本数据库
56
57 // 使用 SQL的ALTER语句
58 String sql = "alter table person add sex varchar(8)";
59 db.execSQL(sql);
60 }
61
62
SQLiteOpenHelper类 常用方法
1 /**
2 * 创建数据库
3 */
4 // 1. 创建 or 打开 可读/写的数据库(通过 返回的SQLiteDatabase对象 进行操作)
5 getWritableDatabase()
6
7 // 2. 创建 or 打开 可读的数据库(通过 返回的SQLiteDatabase对象 进行操作)
8 getReadableDatabase()
9
10 // 3. 数据库第1次创建时 则会调用,即 第1次调用 getWritableDatabase() / getReadableDatabase()时调用
11 // 在继承SQLiteOpenHelper类的子类中复写
12 onCreate(SQLiteDatabase db)
13
14 // 4. 数据库升级时自动调用
15 // 在继承SQLiteOpenHelper类的子类中复写
16 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
17
18 // 5. 关闭数据库
19 close()
20
21 /**
22 * 数据库操作(增、删、减、查)
23 */
24 // 1. 查询数据
25 (Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
26 // 查询指定的数据表返回一个带游标的数据集。
27 // 各参数说明:
28 // table:表名称
29 // colums:列名称数组
30 // selection:条件子句,相当于where
31 // selectionArgs:条件语句的参数数组
32 // groupBy:分组
33 // having:分组条件
34 // orderBy:排序类
35 // limit:分页查询的限制
36 // Cursor:返回值,相当于结果集ResultSet
37
38 (Cursor) rawQuery(String sql, String[] selectionArgs)
39 //运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别 = 防止SQL注入)
40
41 // 2. 删除数据行
42 (int) delete(String table,String whereClause,String[] whereArgs)
43
44 // 3. 添加数据行
45 (long) insert(String table,String nullColumnHack,ContentValues values)
46
47 // 4. 更新数据行
48 (int) update(String table, ContentValues values, String whereClause, String[] whereArgs)
49
50 // 5. 执行一个SQL语句,可以是一个select or 其他sql语句
51 // 即 直接使用String类型传入sql语句 & 执行
52 (void) execSQL(String sql)
创建数据库
1 // 步骤1:创建DatabaseHelper对象
2 // 注:此时还未创建数据库
3 SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_carson");
4
5 // 步骤2:真正创建 / 打开数据库
6 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); // 创建 or 打开 可读/写的数据库
7 SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); // 创建 or 打开 可读的数据库