SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。


本文主要讲解 SQLite 在 Android 环境中的基本使用。

SQLite 基本上符合 SQL-92 标准,和其他的主要 SQL 数据库没什么区别。它的优点就是高效,Android 运行时环境包含了完整的 SQLite。

Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。

首先创建数据库

Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后进行创建表、索引,填充数据等操作。

Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。

下面示例代码展示了如何继承 SQLiteOpenHelper 创建数据库:



public class DatabaseHelper extends  
  SQLiteOpenHelper  
  {      
  
      
  DatabaseHelper( 
  Context  
  context 
  ,  
  String  
  name 
  ,  
  CursorFactory  
  cursorFactory 
  ,  
  int 
  version)  
  
      
  {      
  
          
  super( 
  context 
  ,  
  name 
  ,  
  cursorFactory 
  ,  
  version);      
  
      
  }      
  
       
  
       
  @Override    
      public void onCreate( 
  SQLiteDatabase  
  db)  
  {      
  
           
  // TODO 创建数据库后,对数据库的操作      
  
       
  }      
  
       
  
       
  @Override    
     public void onUpgrade( 
  SQLiteDatabase  
  db 
  ,  
  int  
  oldVersion 
  ,  
  int  
  newVersion)  
  {      
  
           
  // TODO 更改数据库版本的操作      
  
      
  }      
  
       
  
       
  @Override    
      public void onOpen( 
  SQLiteDatabase  
  db)  
  {      
  
           
  super 
  . 
  onOpen( 
  db);        
  
           
  // TODO 每次成功打开数据库后首先被执行      
  
       
  }      
  
}

接下来讨论具体如何创建表、以及对数据的增删改查等等。


/*  
  
* 重新建立数据表  
  
*/  
  
private void CreateTable()  
  {  
  
      
  SQLiteDatabase  
  db  
  =  
  mOpenHelper 
  . 
  getWritableDatabase();  
  
      
  String  
  sql  
  =  
  "CREATE TABLE "  
  +  
  TABLE_NAME  
  +  
  " ("  
  +  
  TITLE  
  
          
  +  
  " text not null, "  
  +  
  BODY  
  +  
  " text not null "  
  +  
  ");";  
  
      
  Log 
  . 
  i( 
  "yilee:createDB=" 
  ,  
  sql); 
   
     try { 
         db.execSQL("DROP TABLE IF EXISTS diary"); 
         db.execSQL(sql); 
         setTitle("数据表成功重建"); 
     } catch (SQLException e) { 
         setTitle("数据表重建错误"); 
     } 
}/* 
* 删除数据表 
*/ 
private void dropTable() { 
     SQLiteDatabase db = mOpenHelper.getWritableDatabase(); 
     String sql = "drop table " + TABLE_NAME; 
     try { 
         db.execSQL(sql); 
         setTitle("数据表成功删除:" + sql); 
     } catch (SQLException e) { 
         setTitle("数据表删除错误"); 
     } 
}/* 
* 插入两条数据 
*/ 
private void insertItem() { 
     SQLiteDatabase db = mOpenHelper.getWritableDatabase(); 
     String sql = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY 
         + ") values(‘yilee’, ‘异泪的博客’);"; 
     try { 
         Log.i("yilee:sql1=", sql); 
         db.execSQL(sql); 
         setTitle("插入数据成功"); 
     } catch (SQLException e) { 
         setTitle("插入数据失败"); 
     } 
}/* 
* 删除其中的一条数据 
*/ 
private void deleteItem() { 
     try { 
         SQLiteDatabase db = mOpenHelper.getWritableDatabase(); 
         db.delete(TABLE_NAME, " title = ‘yilee’", null); 
         setTitle("删除title为yilee的一条记录"); 
     } catch (SQLException e) { 
         setTitle("删除数据失败"); 
     } 
}/* 
* 在屏幕的title区域显示当前数据表当中的数据的条数。 
*/ 
private void showItems() {SQLiteDatabase db = mOpenHelper.getReadableDatabase(); 
     String col[] = { TITLE, BODY }; 
     Cursor cur = db.query(TABLE_NAME, col, null, null, null, null, null); 
     Integer num = cur.getCount(); 
     setTitle(Integer.toString(num) + " 条记录"); 
}



最后一个方法中使用了Cursor类:

不管你如何执行查询,都会返回一个 Cursor,这是 Android 的 SQLite 数据库游标,使用游标,你可以:

通过使用 getCount() 方法得到结果集中有多少记录; 
通过 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍历所有记录; 
通过 getColumnNames() 得到字段名; 
通过 getColumnIndex() 转换成字段号; 
通过 getString(),getInt() 等方法得到给定字段当前记录的值; 
通过 requery() 方法重新执行查询得到游标; 
通过 close() 方法释放游标资源;