android 提供了一个数据库操作的帮助类 SQLiteOpenHelper,我定义一个类继承SQLiteOpenHelper即可完成数据的创建和更新操作。
一、创建类基础 SQLiteOpenHelper
1 public class SqliteHelper extends SQLiteOpenHelper {
2
3 public SqliteHelper(Context context) {
4 // 数据库名称:sqltest.db
5 // 版本号:1 (初始化的时候设置成1,当这个版本号升级之后会触发onUpgrade函数)
6 super(context, "sqltest.db", null, 1);
7 }
8
9 //数据库第一次创建的时候调用,适合创建表结构
10 @Override
11 public void onCreate(SQLiteDatabase db) {
12 db.execSQL("sql语句");
13 }
14 //数据库版本变更之后会执行,适合更改表的结构
15 @Override
16 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
17
18 }
19 }
二、获取SQLiteDatabase对象操作数据库
getReadableDatabase 和 getWritableDatabase 区别
1.都可以对数据库进行读写
2.当磁盘满了之后, getWritableDatabase会发送异常;getReadableDatabase不会发送异常,直接返回一个可读的SQLiteDatabase对象。
1 SqliteHelper sqliteHelper=new SqliteHelper(context);
2 //打开或者创建数据库,如果是第一次就是创建
3 SQLiteDatabase readableDatabase=sqliteHelper.getReadableDatabase();
4 //打开或者创建数据库,如果是第一次就是创建
5 SQLiteDatabase writableDatabase=sqliteHelper.getWritableDatabase();
6
7 //getReadableDatabase 和 getWritableDatabase 区别
8 //都可以对数据库进行读写
9 //当磁盘满了之后getWritableDatabase会发送异常,getReadableDatabase不会发送异常,直接返回一个可读的SQLiteDatabase对象。
三、数据库增删改查
增加数据
public boolean insertData(){
SQLiteDatabase writableDatabase=sqliteHelper.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put("name","王五");
contentValues.put("age","13");
//第一个参数:表名
//第二个参数:默认填写null
//第一个参数:第三个参数插入的数据,列名+value
long row= writableDatabase.insert("info",null,contentValues);
Log.e(TAG,"insertData row="+row);
//row 更新的行数
writableDatabase.close();
if(row>0)
return true;
else
return false;
}
查询数据
1 public boolean select() {
2 SQLiteDatabase writableDatabase = sqliteHelper.getWritableDatabase();
3 String table = "info";
4 String[] columns = new String[]{"name"};
5 String selection = "name=?";
6 String[] selectionArgs = new String[]{"王五"};
7 String groupBy = null;
8 String having = "";
9 String orderBy = "";
10 //第一个参数:表名
11 //第二个参数:要查询的列,查询所有直接填null
12 //第三个参数:查询条件
13 //第四个参数:查询条件的占位符参数
14 //第五个参数:分组
15 //第六个参数:条件
16 //第七个参数:排序
17 Cursor cursor = writableDatabase.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
18 if (cursor != null && cursor.getCount() > 0) {
19 while (cursor.moveToNext()) {
20 String strName = cursor.getString(0);
21 Log.e(TAG, "select name=" + strName);
22 }
23 }
24 writableDatabase.close();
25 return true;
26 }
删除数据
1 public boolean delete(){
2 SQLiteDatabase writableDatabase=sqliteHelper.getWritableDatabase();
3 String whereClause="name=?";
4 String[] whereArgs=new String[]{"王五"};
5 //第一个参数:表名
6 //第二个参数:where条件
7 //第一个参数:where条件的占位符参数
8 int totalRow=writableDatabase.delete("info",whereClause,whereArgs);
9 Log.e(TAG,"delete totalRow="+totalRow);
10 //totalRow 更新的行数
11 writableDatabase.close();
12 if(totalRow>0)
13 return true;
14 else
15 return false;
16 }
更新数据
1 public boolean update(){
2 SQLiteDatabase writableDatabase=sqliteHelper.getWritableDatabase();
3 ContentValues contentValues=new ContentValues();
4 contentValues.put("name","王五");
5 contentValues.put("age","15");
6
7 String whereClause="name=?";
8 String[] whereArgs=new String[]{"王五"};
9 //第一个参数:表名
10 //第二个参数:更新的列名
11 //第三个参数:where条件
12 //第四个参数:where条件的占位符参数
13 int totalRow=writableDatabase.update("info",contentValues,whereClause,whereArgs);
14 Log.e(TAG,"update totalRow="+totalRow);
15 //totalRow 更新的行数
16 writableDatabase.close();
17 if(totalRow>0)
18 return true;
19 else
20 return false;
21 }
使用事务
1 public void update2(){
2 SQLiteDatabase liteDatabase=sqliteHelper.getWritableDatabase();
3 try {
4 //开始事务
5 liteDatabase.beginTransaction();
6 liteDatabase.execSQL("");
7 liteDatabase.execSQL("");
8 // 设置事务成功的标记, 设置事务成功之后才会提交所有的sql执行的结果。
9 // 如果没有设置事务成功的标记,在endTransaction之后将会自动回滚事务
10 liteDatabase.setTransactionSuccessful();
11 }catch (Exception ex){
12 //出现异常自动回滚事务
13 }finally {
14 //结束事务
15 liteDatabase.endTransaction();
16 }
17 }
使用sqlite3 命令查询数据:
sqlite3 查询数据库:
第一步:使用adb命令cd到 data/data/包名/databases 目录
第二步:打开数据库使用命令--> sqlite3 数据库名称
第三步:输入查询语句用;结束
xxx:/data/data/com.example.test3/databases # sqlite3 sqltest.db
SQLite version 3.9.2 2015-11-02 18:31:45
Enter ".help" for usage hints.
sqlite> select * from info;
1|小李|12