sqlite3的使用

Posted by PanMin on June 10, 2015

sqlite3的使用

  1. sqlite有五种本地类型:

    INTEGER 整型 REAL 小数 TEXT 文本 BLOB 二进制 NUMERIC 数值

  2. SQLiteOpenHelper 这个类主要是生成一个数据库,并对数据库的版本进行管理,当在程序中调用这个类的方法getWritableDatabase(),或者getReadableDatabase()方法的时候,如果当时没有数据,那么android系统就会自动生成一个数据库。SQLiteOpenHelper是一个抽象类,需要继承并实现它里面的2个函数。
  3. ContentValues ContentValues类和Hashmap类似,也是负责存储一些键值对,但是它存储的键值对中的key值必须是字符串,value值必须是基本数据类型。
  4. Cursor Cursor在android当中是一个非常有用的接口,通过Cursor可以对数据库查询出来的结果集进行随机的读写访问。

SQLiteHelper类:

public class MySQLiteHelper extends SQLiteOpenHelper{
 //调用父类构造器
 public MySQLiteHelper(Context context, String name, CursorFactory factory,
   int version) {
  super(context, name, factory, version);
 }
 
 /**
  * 当数据库首次创建时执行该方法,一般将创建表等初始化操作放在该方法中执行.
  * 重写onCreate方法,调用execSQL方法创建表
  * */
 @Override
 public void onCreate(SQLiteDatabase db) {
  db.execSQL("create table if not exists hero_info("
      + "id integer primary key,"
      + "name varchar,"
      + "level integer)");
 
 }
 
 //当打开数据库时传入的版本号与当前的版本号不同时会调用该方法
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
 }
 
}

sqlitehelper的调用:

myHelper = new MySQLiteHelper(this, "my.db", null, 1);//向数据库中插入和更新数据
//获取数据库对象
  SQLiteDatabase db = myHelper.getWritableDatabase();
  //使用execSQL方法向表中插入数据
  db.execSQL("insert into hero_info(name,level) values('bb',0)");
  //使用insert方法向表中插入数据
  ContentValues values = new ContentValues();
  values.put("name", "xh");
  values.put("level", 5);
  //调用方法插入数据
  db.insert("hero_info", "id", values);
  //使用update方法更新表中的数据
  //清空ContentValues对象
  values.clear();
  values.put("name", "xh");
  values.put("level", 10);
  //更新xh的level 为10
  db.update("hero_info", values, "level = 5", null);
  //关闭SQLiteDatabase对象
  db.close();
//查询数据

//获得数据库对象
  SQLiteDatabase db = myHelper.getReadableDatabase();
  //查询表中的数据
  Cursor cursor = db.query("hero_info", null, null, null, null, null, "id asc");
  //获取name列的索引
  int nameIndex = cursor.getColumnIndex("name");
  //获取level列的索引
  int levelIndex = cursor.getColumnIndex("level");
  for (cursor.moveToFirst();!(cursor.isAfterLast());cursor.moveToNext()) {
   result = result + cursor.getString(nameIndex)+ "\t\t";
   result = result + cursor.getInt(levelIndex)+"       \n";
  }
  cursor.close();//关闭结果集
  db.close();//关闭数据库对象