一. 前言 1. 什么是SQlite? SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎,它是一款轻型的数据库,是遵守ACID的关系型数据库管理系统 ,它的设计目标是嵌入式 的,而且由于其占用资源低(占用内存只需几百K)、处理速度快等特点,非常受欢迎。
2. SQlite的优点
3. 注意 IO操作,建议放在线程操作,因为可能卡死。
4. 创建数据库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 public class DatabaseHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "user.db" ; public static final int DATABASE_VERSION = 1 ; public static final String TABLE_NAME = "user" ; public static final String COLUMN_NAME = "username" ; public static final String COLUMN_PASSWORD = "password" ; public DatabaseHelper (Context context) { super (context, DATABASE_NAME, null , DATABASE_VERSION); } @Override public void onCreate (SQLiteDatabase db) { db.execSQL("create table " + TABLE_NAME + "(" + COLUMN_NAME + " varchar(20) not null, " + COLUMN_PASSWORD + " varchar(20) not null);" ); } @Override public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) { } }
1 2 3 DatabaseHelper databaseHelper = new DatabaseHelper(this ); SQLiteDatabase database = databaseHelper.getWritableDatabase();
5. 查看数据库 借助第三方库:Android-Debug-Database-Github地址
使用参考文章:调试手机中数据库的福音:Android-Debug-Database
数据库创建后的效果图:
二. 对数据库进行增删改查 源码下载:SQLite
1. 增-插入记录 ① 方法
1 2 3 4 5 6 7 public long insert (String table, String nullColumnHack, ContentValues values)
② 例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public void insert (SQLiteDatabase database) { ContentValues contentValues = new ContentValues(); contentValues.put(DatabaseHelper.COLUMN_NAME,"许小石" ); contentValues.put(DatabaseHelper.COLUMN_PASSWORD,"123456" ); long insert_id = database.insert( DatabaseHelper.TABLE_NAME, null , contentValues ); Toast.makeText(this , "插入数据的id:" +insert_id, Toast.LENGTH_SHORT).show(); }
2. 查-查询记录 ① 方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
② 例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public void find (SQLiteDatabase database) { Cursor cursor = database.query(DatabaseHelper.TABLE_NAME, null , null , null , null , null , null ); if (cursor.moveToFirst()){ for (int i = 0 ; i < cursor.getCount(); i++) { String name = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseHelper.COLUMN_NAME)); String password = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseHelper.COLUMN_PASSWORD)); cursor.moveToNext(); Toast.makeText(this , "用户:" +name+" 密码:" +password, Toast.LENGTH_SHORT).show(); } } }
我们之前插入了两条记录:{文小酒,123456},{许小石,123456}
3. 删-删除记录 ① 方法
1 2 3 4 5 6 7 public int delete (String table, String whereClause, String[] whereArgs)
② 例子
1 2 3 4 5 6 7 8 9 public void delete (SQLiteDatabase database) { String whereClaus = DatabaseHelper.COLUMN_PASSWORD+"=?" ; String[] whereArgs = {"123456" }; database.delete(DatabaseHelper.TABLE_NAME,whereClaus,whereArgs); }
两条记录就会被全部清空。
4. 改-更新记录 ① 方法
1 2 3 4 5 6 7 8 public int update (String table, ContentValues values, String whereClause, String[] whereArgs)
② 例子
1 2 3 4 5 6 7 8 9 10 11 12 13 public void update (SQLiteDatabase database) { ContentValues contentValues = new ContentValues(); contentValues.put(DatabaseHelper.COLUMN_PASSWORD,"45678" ); String whereClaus = DatabaseHelper.COLUMN_NAME+"=?" ; String[] whereArgs = {"文小酒" }; database.update(DatabaseHelper.TABLE_NAME,contentValues,whereClaus,whereArgs); }
在此之前,我们将删除的记录重新插入了。{文小酒,123456},{许小石,123456}
三. 数据库操作中的事务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 private void transactionTest (SQLiteDatabase database) { database.beginTransaction(); try { database.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { database.endTransaction(); } }
四. 对象关系映射 ORM 大部分的数据库第三方库都使用了对象关系映射。
我学习的是LitePal ,是从郭霖大佬的博客看到的第三方库,以下是大佬关于该内容的博客:
Android笔记:LitePal库的更新,DataSupport被弃用问题
Android数据库高手秘籍(一)——SQLite命令
Android数据库高手秘籍(二)——创建表和LitePal的基本用法
Android数据库高手秘籍(三)——使用LitePal升级表
Android数据库高手秘籍(四)——使用LitePal建立表关联
Android数据库高手秘籍(五)——LitePal的存储操作
Android数据库高手秘籍(六)——LitePal的修改和删除操作
Android数据库高手秘籍(七)——体验LitePal的查询艺术
Android数据库高手秘籍(八)——使用LitePal的聚合函数
我在我的 连连看开发中使用的就是这个第三方库,参考:Android项目8:连连看
当然还有许多其他优秀的第三方库,参考:Android目前流行三方数据库ORM分析及对比
参考文章 Android 数据库SQLite Cursor数据遍历读取