SQLite使用方法

1.SQLite介绍

官方网站 http://www.sqlite.org
它是一个非常小的关系型数据库,小到占用的资源几乎可以忽略不计,但是它提供的功能又比较齐全

2.SQLiteOpenHelper使用方法

相当于说这个ÓpenHelper是Android自己定义的一种创建数据库的方法,它是一个抽象类,所以必须通过自己创建类来继承它。继承了以后本身就具备了比如说getReadableDatabase()和getWritableDatabase()这些重要的方法,通过调用它们,直接就会返回SQLiteDatabase对象,从而达到创建空数据库的目的。

然后里面有2个重要的抽象方法,分别是onCreate 和onUpdate方法。实现这2个方法,这样,在创建,升级数据库的时候就会分别执行里面的代码。

有一种说法就是,因为本身SQLite只能进行增删改查,没法对数据库进行创建和升级,所以就加入了这个助手类。

SQLiteOpenHelper是一个抽象类,我们必须继承它。由于它新创建了有参的构造函数,所以继承的时候,必须在子类中创建一个含有同样参数的构造函数,里面的操作是调用父类的有参的构造函数。

//DatabaseHelper作为一个访问SQLite的助手类,提供2个方面的功能
//1.getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作
//2.提供了onCreate()和onUpgrade()2个回调函数,允许我们在创建和升级数据库时,进行自己的操作

程序例子:

public class DatabaseHelper extends SQLiteOpenHelper{
//在SQLiteOpenHelper的子类中,必须有这个构造函数
//context 就是一个Activity,name是指数据库的表名,factory暂时不管,传递空值就行
//version为当前数据库的版本,一定是正数,且呈现递增趋势
     public DatabaseHelper(Context context, String name, CursorFactoryfactory, int version){
//必须通过super调用父类中的构造函数
//其实在Eclipse里面写这个函数的时候,相关的需要实现的函数都会自动生成出来,只是要养成习惯记住
     super(context, name, factory, version);
     }
//该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabase对象的时候,才会调用这个方法
     public void onCreate(SQLiteDatabase db){
       System.out.println("create a database");
//execSQL函数用于执行SQL语句,貌似这个地方是一个字符串类型,但是具体怎样裁减这段字符串我还没搞清楚。
       db.execSQL("create table user(id int, name varchar(20))");
}
     public void onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion){
       System.out.println("upgrade a database");
}
}
getReadableDatabase()
getWritableDatabase()

2个回调函数
onCreate(SQLiteDatabase db)

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)


3.使用adb访问SQLite

这个只要插入Device,就可以使用,具体的安装和配置请参见博客里面Android文件夹里面有一篇关于ADB的笔记
也就是说呢,如果使用这个,那么就可以以传统linux的操作方法来操作手机里面的文件系统。使用比如ls,cd,以及标准SQL数据库的操作命令,会很方便。

每当我们创建一个工程,都会指明一个package名字,这个东西就会自动在/data/data/路径里面生成一个对应的文件夹。

4.创建和升级数据库

举个例子,假如在一个页面里面有多个按钮,每一个按钮执行一种数据库操作。那么就要创建一个xml文件,一个类。假设这个类叫做SQLiteActivity.java

创建:
class CreateListener implements OnClickListener{
     public void onClick(View v){
//先创建一个DatabaseHelper的对象
     DatabaseHelper dbHelper = newDatabaseHelper(SQLiteActivity.this,"Joshua ", null, 1);
//只有调用了getReadableDatabase() 或者 getWritableDatabase()方法,才会真正地创建数据库    
SQLiteDatabase db = dbHelper.getReadableDatabase();
}
}

更新版本:
class UpgradeListener implements OnClickListener{
     DatabaseHelper dbHelper = newDatabaseHelper(SQLiteActivity.this,"Joshua ", null, 2);
     SQLiteDatabase db = dbHelper.getReadableDatabase();
}

可能内部实现是这样的,因为无论所创建还是升级都是先创建一个OpenHelper的对象,然后调用getReadableDatabase方法,有意思的就是版本号了,如果第一次创建,那么版本号为初始值,那么系统默认自动调用onCreate方法,而不调用onUpgrade方法,并且将这个版本号赋值给onUpgrade方法中的形参oldVersion,一旦同一个名字的数据库版本号发生变更,系统就会通过比对发现,然后忽略掉onCreate方法,转而直接调用onUpgrade方法。这可能就是SQLite数据库在android的内部实现。

5.增,删,改,查

插入:

class InsertListener implements OnClickListener{
     ContentValues values=new ContentValues();
     values.put("id",1);
     values.put("name","joshua");
     DatabaseHelper dbHelper = newDatabaseHelper(SQLiteActivity.this,"Joshua ", null, 1);
    //这里因为要插入数据,所以要使用getWritableDatabase方法,这样才可以改写
     SQLiteDatabase db = dbHelper.getWritableDatabase();
     db.insert("user",null,values);
}

首先来说 SQLiteDatabas这个类里面的insert方法接受的参数类型就是ContentValues类型的,所以要想往表格里面插入值的话,必须先将要插入的值封装到ContentValues里面,然后再通过insert方法将值放进具体的表格中。键值对里面的键都是列名,比如说一个表格中有id和name,那么就有两列,指定列名再传值。

更新:

class UpdateListener implements OnClickListener{
     ContentValues values=new ContentValues();
     values.put("name","joshua.yin");
     DatabaseHelper dbHelper= newDatabaseHelper(SQLiteActivity.this,"Joshua ", null, 1);
     SQLiteDatabase db = dbHelper.getWritableDatabase();
     //第一个参数,要更新的表名
     //第二个参数,一个ContentValues的对象
     //第三个参数,相当于设置要更新哪一个,这个地方用了占位符,如果赋值为null的话,那么所有的列都要被
     //更新
     //第四个参数,字符串类型的数组,前面有几个占位符,这个数组中就有几个值,这里相当于把数组里面的第
     //一个参数赋给第一个占位符(这里本身也只有一个)
     db.update("user",values,"id=?",new String[]{"1"});
}

删除和查询还没有搞清楚,需要找个例子进一步研究一下。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值