Android SqLite :基本操作
Sqlite 介绍
- SQLite是Android内置的一个小型、关系型、属于文本型的数据库
- 应用程序中可以访问任何的数据库,但是应用程序之外的则不能访问
简单理解Android 中的Sqlite
就两个对象,SQLiteOpenHelper 对象 和 SQLiteDatabase 对象
类 | 介绍 |
---|---|
SQLiteOpenHelper | 负责 创建/升级/降级数据库 |
SQLiteDatabase | 负责 具体的增删改查 |
SQLiteOpenHelper 对象介绍
因为SQLiteOpenHelper 是一个抽象类,所以一般我们会写一个子类继承它,看看它有哪些常用的方法
方法 | 介绍 |
---|---|
onCreate() | 创建数据库,可以在该方法中执行创建表的sql语句,从而创建表 |
onUpgrade() | 当数据库的版本号发生变化后,自动调用该方法.此方法一般做一些对表结构更改的操作 |
onDowngrade() | 当数据库降级时调用该方法 |
SQLiteDatabase 对象介绍
Android提供了创建和使用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法。
方法 | 介绍 |
---|---|
getWritableDatabase() | 获取一个可以读/写的数据库对象 |
getReadableDatabase() | 获取一个可以读的数据库对象 |
insert() | 插入数据 |
delete() | 删除数据 |
query() | 查询数据 |
rawQuery() | 执行sql,查询数据 |
execSQL() | 执行增/删/改操作 ,不能用于查询 |
close() | 关闭数据库对象 |
CODE
Android操作数据,两件事,1.创建数据库,2对数据库进行增删改查
第一步,写一个类继承 SQLiteOpenHelper,并重写onCreate() 和 onUpgrade()方法
public class MyDbOpenHelper extends SQLiteOpenHelper {
public MyDbOpenHelper(@Nullable Context context,String tableName,int DbVersion) {
/**
* super 必须调用
* 参数 [上下文][书库名称][一个可选的游标工厂(通常是 Null)][数据库版本号]
*/
super(context, tableName, null, DbVersion);
}
/**
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
/**
* 第一次创建数据库的时候调用
* 作用:创建表,创建后可对表进行初始化操作(插入一些数据)
* 此处创建一个book 的表
*/
String sql = "create table "+DbInfo.TABLE_GOODS_BOOK+" ("+DbInfo.BOOOK_COLUMN_ID+","+DbInfo.BOOK_COLUMN_NAME+")";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
/**
* 当版本号发生变化的时候,就会调用该方法
* 可以对表结构,字段等进行操作
*/
String upSql = "alter table book add bookPirce int(20)";
db.execSQL(upSql);
}
}
第二步,就可以开始用了
在需要的地方,通过创建上面的数据库辅助对象(MyDbOpenHelper),拿到真正数据库对象(SQLiteDatabase)从而进行增删改查
在操作增删改查之前,都需要先获取一个 SQLiteDatabase对象
- 先new 一个MyDbOpenHelper对象,
- 用实例化的MyDbOpenHelper对象调用getWritableDatabase()或者getReadableDatabase()获取
MyDbOpenHelper dbOpenHelper = new MyDbOpenHelper(MainActivity.this, DbInfo.TABLE_GOODS_BOOK, DbInfo.DB_VERSION);
SQLiteDatabase writableDatabase = dbOpenHelper.getWritableDatabase();
一下都使用Sql 语句进行增删改查,仅个人喜好而已
插入
/**
* 插入
*/
public void inset(){
//创建一个MyDbOpenHelper对象是无法创建/打卡链接的
SQLiteOpenHelper dbOpenHelper = new MyDbOpenHelper(MainActivity.this,DbInfo.TABLE_GOODS_BOOK,DbInfo.DB_VERSION);
//调用getWriteableDatabase()或者getReadableDatabase()方法才创建/打开链接
SQLiteDatabase writableDatabase = dbOpenHelper.getWritableDatabase();
//插入Sql 语句
String insertSql = "insert into "+DbInfo.TABLE_GOODS_BOOK+" ("+DbInfo.BOOOK_COLUMN_ID+","+DbInfo.BOOK_COLUMN_NAME+")values(1,'林肯传说')";
//执行语句
writableDatabase.execSQL(insertSql);
/**
* 关闭数据库
*/
writableDatabase.close();
}
更新版本
/**
* 版本更新升级
*/
private void updateVerson() {
//此构造函数中的 DbInfo.DB_VERSION 已经是更新后的版本号,版本号变更后引发执行 MyDbOpenHelper类中onUpgrade() 的方法
MyDbOpenHelper dbOpenHelper = new MyDbOpenHelper(MainActivity.this,DbInfo.TABLE_GOODS_BOOK, DbInfo.DB_VERSION);
//升级后,插入一条数据,增加字段,然后插入一条
SQLiteDatabase writableDatabase = dbOpenHelper.getWritableDatabase();
String insertSql = "insert into "+DbInfo.TABLE_GOODS_BOOK+"("+DbInfo.BOOOK_COLUMN_ID+","+DbInfo.BOOK_COLUMN_NAME+","+DbInfo.BOOK_COLUMN_PRICE+") values(11,'共和国历史',999)";
writableDatabase.execSQL(insertSql);
//查询
String querySql = "select * from "+DbInfo.TABLE_GOODS_BOOK;
Cursor cursor = writableDatabase.rawQuery(querySql, null);
while (cursor.moveToNext()){
String id = cursor.getString(cursor.getColumnIndex(DbInfo.BOOOK_COLUMN_ID));
String name = cursor.getString(cursor.getColumnIndex(DbInfo.BOOK_COLUMN_NAME));
String prie = cursor.getString(cursor.getColumnIndex(DbInfo.BOOK_COLUMN_PRICE));
System.out.println("id="+id+"******name="+name+"********price="+prie);
}
/**
* 关闭数据库
*/
writableDatabase.close();
}
删除
/**
* 删除
*/
private void delete() {
MyDbOpenHelper dbOpenHelper = new MyDbOpenHelper(MainActivity.this, DbInfo.TABLE_GOODS_BOOK, DbInfo.DB_VERSION);
SQLiteDatabase writableDatabase = dbOpenHelper.getWritableDatabase();
String delSql = "delete from "+DbInfo.TABLE_GOODS_BOOK+" where "+DbInfo.BOOK_COLUMN_PRICE+" = '999'";
writableDatabase.execSQL(delSql);
//查询
String querySql = "select * from "+DbInfo.TABLE_GOODS_BOOK;
Cursor cursor = writableDatabase.rawQuery(querySql, null);
while (cursor.moveToNext()){
String id = cursor.getString(cursor.getColumnIndex(DbInfo.BOOOK_COLUMN_ID));
String name = cursor.getString(cursor.getColumnIndex(DbInfo.BOOK_COLUMN_NAME));
String prie = cursor.getString(cursor.getColumnIndex(DbInfo.BOOK_COLUMN_PRICE));
System.out.println("id="+id+"******name="+name+"********price="+prie);
}
/**
* 关闭数据库
*/
writableDatabase.close();
}
更新数据
/**
* 更新
*/
private void update() {
MyDbOpenHelper dbOpenHelper = new MyDbOpenHelper(MainActivity.this, DbInfo.TABLE_GOODS_BOOK, DbInfo.DB_VERSION);
SQLiteDatabase writableDatabase = dbOpenHelper.getWritableDatabase();
String updateSql = "update "+DbInfo.TABLE_GOODS_BOOK+" set "+DbInfo.BOOK_COLUMN_PRICE+"= 1000 where "+DbInfo.BOOOK_COLUMN_ID+" = 11";
writableDatabase.execSQL(updateSql);
//查询
String querySql = "select * from "+DbInfo.TABLE_GOODS_BOOK;
Cursor cursor = writableDatabase.rawQuery(querySql, null);
while (cursor.moveToNext()){
String id = cursor.getString(cursor.getColumnIndex(DbInfo.BOOOK_COLUMN_ID));
String name = cursor.getString(cursor.getColumnIndex(DbInfo.BOOK_COLUMN_NAME));
String prie = cursor.getString(cursor.getColumnIndex(DbInfo.BOOK_COLUMN_PRICE));
System.out.println("id="+id+"******name="+name+"********price="+prie);
}
/**
* 关闭数据库
*/
writableDatabase.close();
}