目录
1. SQLite数据库介绍
SQLite
是Android内置的一个小型、关系型、属于文本型的数据库。
Android提供了对 SQLite数据库的完全支持,应用程序中的任何类都可以通过名称来访问任何的数据库,但是应用程序之外的就不能访问。
Android中,通过SQLiteOpenHelper类来实现对SQLite数据库的操作。
- 定义:SQLiteOpenHelper是一个辅助类
- 作用:管理数据库(创建、增、修、删) & 版本的控制。
- 使用过程:通过创建子类继承SQLiteOpenHelper类,实现它的一些方法来对数据库进行操作。
-
在实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑方法。
-
SQLiteOpenHelper类的数据库操作方法介绍
-
onCreate() 创建数据库 创建数据库时自动调用
onUpgrade() | 升级数据库 |
3. 常见数据库使用
数据库操作无外乎:“增删查改”:
对于“增、删、改(更新)”这类对表内容变换的操作,需先调用getWritableDatabase()获得一个可写数据库对象,在执行的时候调用通用的execSQL(String sql)或或对应的操作API方法:insert()、delete()、update()
对“查”,需要调用getReadableDatabase()获得一个可读的数据库对象,然后使用query()或rawQuery()方法
close() | 关闭所有打开的数据库对象 |
execSQL() | 可进行增删改操作, 不能进行查询操作 |
DatabaseHelper.java
//第一次创建数据库的时候回调该方法
//当使用getReadableDatabase()方法获取数据库实例的时候, 如果数据库不存在, 就会调用这个方法;
//作用:创建数据库表:将创建数据库表的 execSQL()方法 和 初始化表数据的一些 insert()方法写在里面;
@Override
public void onCreate(SQLiteDatabase db) {
//SQLite数据创建支持的数据类型: 整型数据,字符串类型,日期类型,二进制的数据类型
//创建了一个名为person的表
String sql = "create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))";
//execSQL用于执行SQL语句
//完成数据库的创建
db.execSQL(sql);
//数据库实际上是没有被创建或者打开的,直到getWritableDatabase() 或者 getReadableDatabase() 方法中的一个被调用时才会进行创建或者打开
//见下代码
*MainActivity.java*
// 创建DatabaseHelper对象
// 只执行这句话是不会创建或打开连接的
SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
"test_carson");
// 调用getReadableDatabase()或getWritableDatabase()才算真正创建或打开数据库
SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();
//SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase() ;
3.2 插入数据
- 步骤:创建并打开数据库(可读/写)、插入数据
- 涉及方法:getWritableDatabase()、insert()
insert()也可以使用excelSQL()代替
//1. 创建并打开数据库
// 创建DatabaseHelper对象(记得传入最新版本的数据库)
// 只执行这句话是不会创建或打开连接的
//注意,一定要传入最新的数据库版本号
SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
"test_carson",2);
// 调用getWritableDatabase()方法创建或打开一个可以读的数据库
//通过返回的SQLiteDatabase对象对数据库进行操作
SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();
//2. 创建并打开数据库
// 创建ContentValues对象
ContentValues values = new ContentValues();
// 向该对象中插入键值对
values.put("id", 1);
values.put("name", "yangyz");
//其中,key代表列名,value代表该列要插入的值
//注:ContentValues内部实现就是HashMap,但是两者还是有差别的
//ContenValues Key只能是String类型,Value只能存储基本类型数据,不能存储对象
// 调用insert()方法将数据插入到数据库当中
sqliteDatabase.insert("user", null, values);
// 第一个参数:要操作的表名称
// 第二个参数:SQl不允许一个空列,如果ContentValues是空的,那么这一列被明确的指明为NULL值
// 第三个参数:ContentValues对象
db.execSQL("insert into user (id,name) values (1,'张三')") 也可以
}