使用SQLite储存数据

前端之家收集整理的这篇文章主要介绍了使用SQLite储存数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、sqlite简介  

  sqlite是一款开源的、嵌入式关系型数据库,第一个版本Alpha发布于2000年。sqlite在便携性、易用性、紧凑性、高效性和可靠性方面有着突出的表现。

  sqlite和C/S模式的数据库软件不同,它是一款嵌入式数据库,没有独立运行的进程,与所服务的应用程序在应用程序进程空间内共生共存。它的代码与应用程序代码也是在一起的,或者说嵌入其中,作为托管它的程序的一部分。因此不存在数据库的客户端和服务器,使用sqlite一般只需要带上它的一个动态库,就可以享受它的全部功能

  数据库服务器在程序中的好处是不需要网络配置或管理。将数据库客户端与服务器运行在同一个进程中,可以省去不少的操作及麻烦:不用担心防火墙或者地址解析;不用浪费时间管理复杂的授权和权限;可以减少网络调用相关的消耗;可以简化数据库管理并使程序更容易部署。

  sqlite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但是只有一个可以写入数据。在某个进程向数据库执行写操作之前,必须获得独占锁定。在发出独占锁定后,其他的读写操作将不会再发生。

  此外,sqlite数据库中的所有信息(比如表、视图、触发器等)都包含在一个文件内,方便管理和维护。sqlite数据库支持大部分操作系统,除电脑上使用的操作系统之外,很多手机上使用的操作系统同样可以运行。同时,sqlite数据库还提供了多语言的编程接口,供开发者使用。


二、建立我们的数据库

  在MysqL数据库中,第一步是创建数据库,第二步是创建表,如需要,还加上我们的初始预制的数据。在Android的sqlite的使用是一样的。稍微特别一点是,我们需要通过继承sqliteOpenHelper这个类来达到目的。对于抽象类sqliteOpenHelper的继承,需要重写构造方法、onCreate()和onUpgrade(),下面举例介绍。

  这个例子,我们创建一个名为bebook_db的数据库,里面有一个叫mytable的表格,有三列:_id,Name,Weight。下面我们将演示如何创建数据库,如何在数据库中创建表,如何删除表,如何更新数据库

class Chapter22Db extends sqliteOpenHelper{
	public static final String DATABASE_BAME ="bebook_db";
	// step 1 :重写构造函数中,继承super的构造函数,创建database
	public Chapter22Db(Context context){
		/* 在super中,
		 * 第一个参数 为当前环境
		 * 第二个参数 String name为数据库文件,如果数据存放在内存 ,则为null (不建议)
		 * 第三个参数 为sqliteDatabase.CursorFactory  factory,存放cursor,缺省设置为null
		 * 第四个参数 为int version数据库的版本,从1开始,如果版本旧,则通过onUpgrade()进行更新(升级),
		 * 如果版本新则通过onDowngrade()进行发布(降级)。
		 * 例如,我要更改mytable表格,增加一列,或者修改初始化的数据,或者程序变得复杂,我需要增加一个表,这时我需要在版本的数字增加
		 * 在加载时,才会对sqlite中的数据库个更新,这点非常重要,同时参见onUpgrade()的说明 */
		super(context,DATABASE_BAME,null,1);
	}

	/*step 2 :重写onCreate(),如果Android系统中第一次创建我们的数据库时,
	 * 即后面介绍调用getWritableDatabase()或者getReadbleDatabase()时,
	 * 将调用onCreate(),这这里创建数据库(虽然在构造函数中填入数据库名,但数据库的创建实在onCreate()中自动进行。
	 * 在这可以创建table,同时也可以写入初始数据
	 * 总而言之,onCreate方法不需要手动调用*/
	public void onCreate(sqliteDatabase db) {
		//execsql方法用于执行不需要返回数据的sql语句
		db.execsql("CREATE TABLE mytable(_id INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT,Weight REAL); ");
		//下面是初始化三个原始数据,对表格进行增、删、改、查,后面会详细介绍。
		//下面的几个数据来自Android自带的重力表,据说是为了传感器管理用,Android已经考虑到我们在月球和火星上使用Android手机的情况^_^,程序员有时真的很无聊……
		//ContentValues是一种键值对应的数据储存结构
		ContentValues cv = new ContentValues();
		cv.put("Name","Gravity,Earth");
		cv.put("Weight",SensorManager.GRAVITY_EARTH);
		db.insert("mytable","Name",cv);
		cv.put("Name",Mars");
		cv.put("Weight",SensorManager.GRAVITY_MARS);
		db.insert("mytable",Moon");
		cv.put("Weight",SensorManager.GRAVITY_MOON);
		db.insert("mytable",cv);
	}

	/* step 3:重写onUpgrade(),如果版本比原来的高,将调用onUpgrade()
	 * 通常,我们会删除原来的表格,再根据新的需求创建*/
	public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
		db.execsql("DROP TABLE IF EXISTS mytable");
		//删完了,别忘了调用onCreate(db)
		onCreate(db);
	}
}

三、和数据库进行关联

  就如同在MysqL中进行数据库的创建,表格创建和初始数据的填写,而其他的操作一般在Activity中和用户互动产生的。另外在Activity销毁(onDestroy())时,我们需要将连接断开,以释放有关资源。当然了,要不要释放,在哪释放,你来决定。

sqliteDatabase db = null;
//获取处理sqliteOpenHelper的子类的sqlite的实例,如果只读,可以采用getReadableDatabase()
//下面的例子例子我们将通过sqliteDatabase实例的操作,来进行对数据进行增删改查询,所以采用可写的方式。
//简单来说,如果以前从未操作过该数据库,那么通过下面这一语句,数据库和表就已经创建了
db= (new Chapter22Db (getApplicationContext())).getWritableDatabase();


四、对表进行操作

  对表格的操作有两种方式,一种是RAW方式,即直接给出sql语句(也就是前面出现的execsql()方法),另一种是采用sqliteDatabase中给出的方法来进行,姑且称为API方式,这种方法前面已经出现过,即db.insert("mytable",cv)这行。

  RAW方式:

  RAW方式很简单,调用execsql方法进行增加删除、更新操作均用sql语句操作,比如:

db.execsql("INSERT INTO mytable(Name,Weight) VALUES ('Test1',1.0);");
db.execsql("DELETE FROM mytable WHERE Name='Test1';");   
db.execsql("UPDATE mytable SET Weight=5.0 WHERE Name='Test1';");
  上面的三个操作都是无返回值的,而查询SELECT则不然,将返回游标Cursor:
Cursor corsor = db.rawQuery("SELECT _id,Name,Weight from mytable",null);
  获取Cursor数据方法

//移至第一行
corsor.moveToFirst();
while(!corsor.isAfterLast()){ 
	//参数0,即为该行的首列
	int id = corsor.getInt(0); 
	//参数为1,即为该行第二列,以此类推
	String name = corsor.getString(1);
	double weight = corsor.getDouble(2);
	//取出的数据怎么处理你来决定
	corsor.moveToNext();
}
//记得关掉
corsor.close();  


  API方式:

  API方式中,每一种目的都有不同的方法调用。简单归纳如下:

  insert(String table,String nullColumnHack,ContentValues values)
  第一参数:数据库表名;
  第二个参数如果CONTENT为空时则向表中插入一列什么(亦可为null);
  第三个参数为插入的内容

  例:db.insert("mytable",values);

  delete(String table,String whereClause,String[] whereArgs)
  第一参数:数据库表名;
  第二个参数表示条件语句(如"sex=?");
  第三个参数为条件带?的替代值,当然也可以直接在第二个参数中填充完毕。

  例:db.delete("mytable","Name=?",{"Test1"});

    db.delete("mytable","Name="Test1"",null);


  update(String table,ContentValues values,String[] whereArgs)
  第一个参数:数据库表名;
  第二个参数更新的内容
  第三个参数更新的条件;
  第四个参数条件带?号的替代者,当然也可以直接在第三个参数中填充完毕。

  例:db.update("mytable",values,name);

    db.update("mytable","Name="+name,null);


  至于查询方法,也就是query()系列的函数,实在是太多了,大家可以自行查阅官方文档(http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html)进行了解,实现方法也是大同小异。


  如果你对sql语句不熟悉,那么建议你稍微学习下。


以上部分内容转载或参考来源如下:

http://www.cnblogs.com/menlsh/archive/2013/04/13/3019588.html

http://www.jb51.cc/article/p-nrdlfjdx-baq.html

在此表示感谢。 转载请注明来源,版权归原作者所有,未经同意严禁用于任何商业用途。 微博:http://weibo.com/theworldsong 邮箱:theworldsong@foxmail.com

原文链接:https://www.f2er.com/sqlite/201213.html

猜你在找的Sqlite相关文章