(一)、简介: 
 
 
 - Android通过 SQLite 数据库引擎来实现结构化数据的存储。在一个数据库应用程序中,任何类都可以通过名字对已经创建的数据库进行访问,但是在应用程序之外就不可以。
 - SQLite 数据库是一种用C语言编写的嵌入式数据库,它是一个轻量级的数据库,最初为嵌入式设计的。它是在一些基础简单的语句处理上要比oracle / mysql快很多,而且其对内存的要求很低,在内存中只需要几百KB的存储空间。这是Android中采用 SQLite 数据库的主要原因。
 - SQLite 支持事务处理功能。Transaction
 - SQLite 处理速度比MySQL等著名的开源数据库系统更快。它没有服务器进程。
 - SQLite 通过文件保存数据库,该文件是跨平台的,可以自由复制。一个文件就是一个数据库。数据库名即文件名。
 - JDBC会消耗太多系统资源,所以JDBC对于手机并不合适,因此Android提供了新的API来使用 SQLite 数据库。
 
 
  三、SQLiteDatabase类: 
 
 
  
  SQLiteDatabase等同于JDBC中Connection和Statement的结合体。SQLiteDatabase既代表与数据库的连接,又只能用于执行sql语句操作。 
 
 
  
   (一)、操作 SQLite 数据库的步骤:【重要】 
  
 
   
   1、创建 SQLiteDatabase 对象,它代表与数据库的连接; 
  
 
   
   2、创建数据库中的表(执行CREATE); 
  
 
   
   3、调用SQLiteDatabase 对象执行数据库操作(执行DML); 
  
 
   
   4、对查询后的结果集Cursor进行处理。 
  
 
  
  (二)、操作 SQLite 数据库的步骤详细讲解: 
 
 
  
  1、创建 SQLite 数据库对象:SQLiteDatabase对象代表一个数据库。 SQLiteDatabase提供了几个静态方法来打开一个文件对应的数据库。 
 
 
 - static SQLiteDatabase openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags, DatabaseErrorHandler errorHandler)
 - static SQLiteDatabase openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags)
 - static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler)
 - static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)
 
 
    【备注:】打开数据库的参数: 
   
 
    
    1、参数中的path代表着数据库的路径(如果是在默认路径/data/data/<package_name>/databases/下,则这里只需要提供数据库名称); 
   
 
    
    2、factory代表着在创建Cursor对象时,使用的工厂类,如果为null的话,则使用默认的工厂(这里我们可以实现自己的工厂进行某些数据处理); 
   
 
    
    3、flags代表的是创建表时的一些权限设置,多个权限之间用|分隔: 
   
 
   - OPEN_READONLY :代表的是以只读方式打开数据库(常量值为:1)
 - OPEN_READWRITE:代表以读写方式打开数据库(常量值为:0)
 - CREATE_IF_NECESSARY:当数据库不存在时创建数据库
 - NO_LOCALIZED_COLLATORS:打开数据库时,不根据本地化语言对数据库进行排序(常量值为:16)
 
代码:
//当数据库存在时:
 
    
String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "android_manual.db";
 
    
SQLiteDatabase db = SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READWRITE);
 
    
Cursor cursor = db.rawQuery("select * from android_basic order by id desc limit 0 , 15",null);
 
    
 
    
//当数据库不存在时:
 
    
String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "words.db";
 
    
SQLiteDatabase  db = SQLiteDatabase.openOrCreateDatabase(path, null);
 
    
db.execSQL("create table tb_words (_id integer primary key autoincrement ,english , chinese)");
创建表:
SQLiteDatabase  db = SQLiteDatabase.openOrCreateDatabase(path, null);
 
    db.execSQL("create table tb_words (_id integer primary key autoincrement ,english , chinese)");
 
    String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "words.db";
主意:
 
       一。SQLite的数据类型? 
      
 
       
               首先你会接触到一个让你惊讶的名词: Typelessness(无类型)。其实SQLite是无类型的。这意味着你可以保存任何类型的数据到数据库表的任何列中, 无论这列声明的数据类型是什么。对于SQLite来说对字段不指定类型是完全有效的。如:create table dict(_id integer primary key autoincrement , word , detail); 
      
 
       
           注意:这里一定要注意,SQLite数据库在一种情况下是要求类型匹配的,当我们建表是如create table table1(id integer primary key),sqlite对应一位integer primary key的列值允许你存储64位的整数。必须是INTEGER PRIMARY KEY  AUTOINCREMENT。 
      
 
      
              诚然SQLite允许忽略数据类型, 但是仍然建议在你的Create Table语句中指定数据类型. 因为数据类型对于你和其他的程序员交流, 或者你准备换掉你的数据库引擎时能起到一个提示或帮助的作用。 
     
 
      
     二、调用SQLiteDatabase 对象的方法执行数据库操作:【重要】 
    
 
    - execSQL(String sql , Object[] args) 执行带占位符的sql语句(update,insert,delete语句)
 - rawQuery( String sql , String[] args ) 执行带占位符的sql查询(select语句)
 - beginTransaction() 开始事务
 - endTransaction() 结束事务
 
 
      【备注:】除了以上重要的四个方法外,Android考虑到不熟悉sql语句的开发者,提供了进一步封装后的一系列方法。但是以下这几个方法参数众多,平时不建议使用,但是一定也要掌握,在ContentProvider中会有类似的方法,要注意区分。 
     
 
    - insert()
 - update()
 - delete()
 - query()
 
- move(int offset) 按偏移量来移动
 - moveToFirst() 将记录指针移动到第一行
 - moveToLast () 将记录指针移动到最后一行
 - moveToNext () 将记录指针移动到下一行
 - moveToPosition(int position) 将记录指针移动到指定的一行
 - moveToPrevious() 将记录指针移动到上一行
 - getCount() 返回Cursor的行数
 - getColumnName(int index) 根据列的索引返回其相应的列名称
 - getColumnIndex(String name) 根据列的名字返回其相应的索引
 - getColumnNames() 返回一个保存有所有列名称的字符串数组
 - getColumnCount() 返回列的总数
 - close() 关闭游标结果集,释放资源
 - getType() 获取字段的数据类型。分别有0、1、2、3、4这几个结果。
 -  
       
- 0: 代表null
 - 1:代表int
 - 2:代表float
 - 3:代表String
 - 4:代表blob
 
 
 
      (四)、事务:【重要】 
     
 
      
              数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行。事务的目的是为了保证数据的一致性。  
     
 
    
