一. 前言 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数据遍历读取