SQlite的使用

Android 为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper 帮助类,借助这个类就可以非常简单地对数据库进行创建和升级

SQLiteOpenHelper 具有的方法

onCreate()    : 抽象方法,需在子类中实现,在该方法中实现创建数据库的逻辑
onUpgrade(): 抽象方法,需在子类中实现,在该方法中实现升级数据库的逻辑

getWritableDatabase()  : 实 例 方 法,  
创建或打开一个现有的数据库(如果数据库已存在
 
则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象,
 


getReadableDatabase() : 实 例 方 法,  
创建或打开一个现有的数据库(如果数据库已存在
 
则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象,

getWritableDatabase()跟getReadableDatabase()的区别
当数据库不可写入的时候(如磁盘空间已满) getReadableDatabase()方法返回的对  
象将以只读的方式去打开数据库,而 getWritableDatabase()方法则将出现异常

构造方法  
SQLiteOpenHelper 中有两个构造方法可供重写,一般使用参数少一点的那个构造方法即
 
可。
构造方法的参数
第一个参数   Context,上下文
第二个参数   创建的数据库的名称
第三个参数   在查询数据的时候返回一个自定义的 Cursor,一般都是传入 null
第四个参数   当 前 数 据 库 的 版 本 号,可 用 于 对 数 据 库 进 行 升 级 操 作

构 建 出SQLiteOpenHelper 的实例之后,再调用它的 getReadableDatabase()或 getWritableDatabase()方法就能够创建数据库了,数据库文件会存放在/data/data/<package name>/databases/目录下。此时, 重写的 onCreate()方法也会得到执行, 所以通常会在这里去处理一些创建表的逻辑。


新建一个类继承 SQLiteOpenHelper,给该类创建构造方法

[java]  view plain  copy
  1. public class CoolWeatherOpenHelper extends SQLiteOpenHelper {  
  2.   
  3. /* 
  4.     * Province省份 
  5.     * 
  6.     * */  
  7. public static final  String CREATE_PROVINCE = "create table Province(id integer primary key autoincrement,province_name text,province_code text)";  
  8.   
  9. /* 
  10.     * City城市 
  11.     * 
  12.     * */  
  13. public static  final  String CREATE_CITY = "create table City(id integer primary key autoincrement,city_name text,city_code text,province_code text)";  
  14.   
  15.   
  16. /* 
  17.     * Country县 
  18.     * 
  19.     * */  
  20.   
  21. public  static final  String CREATE_COUNTRY = "create table Country(id integer primary key autoincrement,country_name text,country_code text,city_code text)";  
  22.   
  23.   
  24.          public CoolWeatherOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {  
  25.             super(context, name, factory, version);  
  26.          }  
  27.   
  28.         @Override  
  29.         public void onCreate(SQLiteDatabase db) {  
  30.             db.execSQL(CREATE_PROVINCE);  
  31.             db.execSQL(CREATE_CITY);  
  32.             db.execSQL(CREATE_COUNTRY);  
  33.         }  
  34.   
  35.         @Override  
  36.         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  37.   
  38.         }  
  39. }  

添加数据

[java]  view plain  copy
  1. CoolWeatherOpenHelper  dbHelper = new CoolWeatherOpenHelper(this"cool_weather"null1);  
  2. SQLiteDatabase db = dbHelper.getWritableDatabase();  
  3. ContentValues values = new ContentValues();  
  4. // 开始组装第一条数据  
  5. values.put("province_name""山东");  
  6. values.put("province_code""07");  
  7. db.insert("Province"null, values); // 插入第一条数据  
  8. values.clear();  
  9. // 开始组装第二条数据  
  10. values.put("province_name""山西");  
  11. values.put("province_code""09");  
  12. db.insert("Province"null, values); // 插入第二条数据  

更新数据

[java]  view plain  copy
  1. SQLiteDatabase db = dbHelper.getWritableDatabase();  
  2. ContentValues values = new ContentValues();  
  3. values.put("province_name""湖北");  
  4. db.update("Province", values, "province_code = ?"new String[] {"09"});  

删除数据

[java]  view plain  copy
  1. SQLiteDatabase db = dbHelper.getWritableDatabase();  
  2. db.delete("Province""province_code = ?"new String[] {"09"});  

查询数据

[java]  view plain  copy
  1. SQLiteDatabasedb = dbHelper.getWritableDatabase();  
  2. Cursor cursor = db.query("Province"nullnullnullnullnullnull);  
  3. if (cursor.moveToFirst()) {  
  4. do {  
  5.         String priovice_name = cursor.getString(cursor.getColumnIndex("province_name"));  
  6.         String province_code = cursor.getString(cursor.getColumnIndex("provice_code"));  
  7.         Log.d("MainActivity""province name is " + priovice_name);  
  8.         Log.d("MainActivity""province code is " + province_code);  
  9.     } while (cursor.moveToNext());  
  10. }  
  11. cursor.close();  

数据库中的事务

[java]  view plain  copy
  1. SQLiteDatabase db = dbHelper.getWritableDatabase();  
  2. db.beginTransaction(); // 开启事务  
  3. try {  
  4.     ..............................................................  
  5.     ..............................................................  
  6.     ..............................................................  
  7. db.setTransactionSuccessful(); // 事务已经执行成功  
  8. catch (Exception e) {  
  9.    e.printStackTrace();  
  10. finally {  
  11.    db.endTransaction(); // 结束事务  
  12. }  

注:为了确保 endTransaction() 方法一定会执行,将该方法放在finally方法里面

Android 已经给我们提供了很多非常方便的 API 用于操作数据库,不过总会有一些人不习惯去使用这些辅助性的方法,而是更加青睐于直接使用 SQL 来操作数据库

添加数据
db.execSQL("insert into Province (provice_name, province_code) values(?, ?)",new String[] {  "山东", "07" });

更新数据
db.execSQL("update Province set province_code = ? where province_name = ?", new String[] { "10",  "山西" });

删除数据
db.execSQL("delete from Province where province_code = ?", new String[] { "10" });

查询数据
db.rawQuery("select * from Book", null);


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值