android SQLite数据库的使用介绍详解

Posted JonsonWei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android SQLite数据库的使用介绍详解相关的知识,希望对你有一定的参考价值。

SQLite简介

Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。SQLite具备下列特点:

 1.轻量级

使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。

2.独立性

SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。

3.隔离性

SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。

4.跨平台

SQLite 目前支持大部分操作系统,不同电脑操作系统更在众多的手机系统也是能够运行,比如:android

5.多语言接口

SQLite 数据库支持多语言编程接口。

6.安全性

SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据

下面介绍一下SQLite数据库的使用方法,及增删改查操作。

Android平台下数据库相关类

1.SQLiteOpenHelper 抽象类:通过从此类继承实现用户类,来提供数据库打开、关闭等操作函数。
2.SQLiteDatabase 数据库访问类:执行对数据库的插入记录、查询记录等操作。
3.SQLiteCursor 查询结构操作类:用来访问查询结果中的记录。


(1).创建数据库类:

SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。

如:

public class StuDBHelper extends SQLiteOpenHelper 

	public StuDBHelper(Context context, String name, CursorFactory factory,
			int version) 
		super(context, name, factory, version);
		// TODO Auto-generated constructor stub
	
	//创建数据表
	@Override
	public void onCreate(SQLiteDatabase db) 
		// TODO Auto-generated method stub
		String sql="create table stu_table(_id INTEGER PRIMARY KEY AUTOINCREMENT, sname varchar(20),sage int, ssex varchar(10))";
		db.execSQL(sql);
	

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
		// TODO Auto-generated method stub

	

说明:

onCreate函数只会在数据库第一次创建时调用,所以此处适合做一些数据库初始化操作。

SQLiteOpenHelper构造函数中的参数name就是数据库名称; version从1开始,当将来数据库的表格以及字段发生变化时,用户可以增加此version值,从而触发onUpgrade()达到旧数据升级的效果。
<pre name="code" class="java">onUpgrade()函数可以实现数据库升级时的操作。

(2)对数据库中数据进行操作
使用SQLiteDatabase类的对象,可以对数据进行增删改查。
如:
<pre name="code" class="java">//创建数据库
			StuDBHelper dbHelper = new StuDBHelper(MainActivity.this, "stu_db",
					null, 1);
			SQLiteDatabase db = dbHelper.getWritableDatabase();//数据库设为可写权限

			String name = insertNameEditText.getText().toString();
			int age = Integer.parseInt(insertAgeEditText.getText().toString());
			String sex = insertSexEditText.getText().toString();
			ContentValues cValues = new ContentValues();
			cValues.put("sname", name);
			cValues.put("sage", age);
			cValues.put("ssex", sex);
			//执行插入数据语句
			long flag = db.insert("stu_table", null, cValues);
			if (flag == -1) 
				Toast.makeText(getApplicationContext(), "恭喜,插入数据失败!", Toast.LENGTH_LONG).show();
			 else 
				queryDataToListView();//刷新页面内容
				Toast.makeText(getApplicationContext(), "恭喜,插入数据成功!", Toast.LENGTH_LONG).show();
			
			db.close();
		

说明:
SQLiteDatabase对数据的操作有2种方法。
第一种,封装 ContentValues



ContentValues cv = new ContentValues(); //实例化一个ContentValues用来装载待插入的数据cv.put("username","Jack Johnson");//添加用户名 cv.put( "password" , "iLovePopMusic" ); //添加密码 db.insert( "user" , null ,cv); //执行插入操作

第二种使用execSQL方式来实现:

<pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java"><div class="container"><div class="line number1 index0 alt2"><code class="java plain">String sql = "insert into user(username,password) values (</code><code class="java string">'Jack Johnson'</code><code class="java plain">,</code><code class="java string">'iLovePopMuisc'</code><code class="java plain">);</code><code class="java comments">//插入操作的SQL语句</code></div><div class="line number2 index1 alt1"><code class="java plain">db.execSQL(sql);</code><code class="java comments">//执行SQL语句
</code></div></div>
 
 
 
 
<pre name="code" class="java"><table class=" " border="0" cellpadding="0" cellspacing="0" width="662" height="32"><tbody><tr><td class="code"> </td></tr></tbody></table>
 

(3)数据库查询
数据查询query有以下几种形式:
  1. db.rawQuery(String sql, String[] selectionArgs);  
  2. db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);  
  3. db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);  
  4. db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit); 
说明:
columns表示要查询的列所有名称集;selection表示WHERE之后的条件语句,当要查询字符串类型,可以使用占位符(?);selectionArgs就是占位符所指的实际参数集。
如:
StuDBHelper dbHelper = new StuDBHelper(MainActivity.this, "stu_db",
				null, 1);
		SQLiteDatabase db = dbHelper.getReadableDatabase();
		Cursor cursor = db.query("stu_table", new String[] "sname",
				"sage", "ssex",  "_id="+updateID, null, null, null,
				null);
		if (cursor.moveToFirst()) 
			updateNameEditText.setText(cursor.getString(0));
			updateAgeEditText.setText(cursor.getInt(1)+"");
			updateSexEditText.setText(cursor.getString(2));
		


(4)游标Cursor

游标是数据集的意思,有点类似于JavaSE中的ResultSet,针对游标(Cursor)也提供了不少方法

方法名称方法描述
getCount()总记录条数
isFirst()判断是否第一条记录
isLast()判断是否最后一条记录
moveToFirst()移动到第一条记录
moveToLast()移动到最后一条记录
move(int offset)移动到指定的记录
moveToNext()移动到吓一条记录
moveToPrevious()移动到上一条记录
getColumnIndex(String columnName)获得指定列索引的int类型值

实现代码

 
Cursor c = db.query("user",null,null,null,null,null,null);//查询并获得游标

if(c.moveToFirst())//判断游标是否为空

    for(int i=0;i<c.getCount();i++)

        c.move(i);//移动到指定记录

        String username = c.getString(c.getColumnIndex("username");

        String password = c.getString(c.getColumnIndex("password"));

    




以上例子的源码下载地址:
http://download.csdn.net/detail/xiyangyang8/9425200

参考文章:
http://blog.csdn.net/liuhe688/article/details/6715983/
http://www.cnblogs.com/Excellent/archive/2011/11/19/2254888.html
http://www.jb51.net/article/62423.htm

 
 

以上是关于android SQLite数据库的使用介绍详解的主要内容,如果未能解决你的问题,请参考以下文章

Android SQLite详解

adb命令详解——手机缺失sqlite3时操作数据库的多种解决方案

Android 中SQLite数据库的使用详解

Android Realm 详解

详解Android中的SQLite数据库存储

SQLite 使用方法详解 Android 数据存储