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.dbSQLite version 3.9.2 2015-11-02 18:31:45Enter ".help" for usage hints.sqlite> select * from info;1|小李|12
来源:https://www.cnblogs.com/jtzp007/p/10961382.html