您的位置:首页 > 移动开发 > Android开发

android SQLite使用SQLiteOpenHelper类对数据库进行操作

2014-05-20 15:22 288 查看
一、 SQLite介绍

SQLite是android内置的一个很小的关系型数据库。

SQLite的官网是http://www.sqlite.org/,可以去下载一些文档或相关信息。

博客中有一篇有稍微详细一点的介绍,大家可以去看一下。

二、 SQLiteOpenHelper的使用方法

SQLiteOpenHelper是一个辅助类来管理数据库的创建和版本。

可以通过继承这个类,实现它的一些方法来对数据库进行一些操作。

所有继承了这个类的类都必须实现下面这样的一个构造方法:

public DatabaseHelper(Context context, String name, CursorFactory factory, int version)

第一个参数:Context类型,上下文对象。

第二个参数:String类型,数据库的名称

第三个参数:CursorFactory类型

第四个参数:int类型,数据库版本

下面是这个类的几个方法:

方法名 返回类型 描述 备注

getReadableDatabase() synchronized SQLiteDatabase 创建或打开一个数据库 可以通过这两个方法返回的SQLiteDatabase对象对数据库进行一系列的操作,如新建一个表,插入一条数据等

getWritableDatabase() synchronized SQLiteDatabase 创建或打开一个可以读写的数据库

onCreate(SQLiteDatabase db) abstract void 第一次创建的时候调用

onOpen(SQLiteDatabase db) void 打开数据库

onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) abstract void 升级数据库

close() synchronized void 关闭所有打开的数据库对象

SQLiteDatabase的常用方法
方法名称
方法描述
openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)
打开或创建数据库
insert(String table,String nullColumnHack,ContentValues values)
添加一条记录
delete(String table,String whereClause,String[] whereArgs)
删除一条记录
query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)
查询一条记录
update(String table,ContentValues values,String whereClause,String[] whereArgs)
修改记录
execSQL(String sql)
执行一条SQL语句
close()
关闭数据库

下面有一个例子,当点击按钮时进行相应的操作,效果图如下:



介于代码中有详细备注了,在此我就不多写了,直接贴代码了,代码如下:

DatabaseHelper类:

[java] view
plaincopy





package android.sqlite;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

/**

* SQLiteOpenHelper是一个辅助类,用来管理数据库的创建和版本他,它提供两个方面的功能

* 第一,getReadableDatabase()、getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作

* 第二,提供了onCreate()、onUpgrade()两个回调函数,允许我们再创建和升级数据库时,进行自己的操作

*/

public class DatabaseHelper extends SQLiteOpenHelper {

private static final int VERSION = 1;

/**

* 在SQLiteOpenHelper的子类当中,必须有该构造函数

* @param context 上下文对象

* @param name 数据库名称

* @param factory

* @param version 当前数据库的版本,值必须是整数并且是递增的状态

*/

public DatabaseHelper(Context context, String name, CursorFactory factory,

int version) {

//必须通过super调用父类当中的构造函数

super(context, name, factory, version);

}

public DatabaseHelper(Context context, String name, int version){

this(context,name,null,version);

}

public DatabaseHelper(Context context, String name){

this(context,name,VERSION);

}

//该函数是在第一次创建的时候执行,实际上是第一次得到SQLiteDatabase对象的时候才会调用这个方法

@Override

public void onCreate(SQLiteDatabase db) {

// TODO Auto-generated method stub

System.out.println("create a database");

//execSQL用于执行SQL语句

db.execSQL("create table user(id int,name varchar(20))");

}

@Override

public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {

// TODO Auto-generated method stub

System.out.println("upgrade a database");

}

}

Activity类:

[java] view
plaincopy





package android.sqlite;

import android.app.Activity;

import android.content.ContentValues;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class SQLiteActivity extends Activity {

/** Called when the activity is first created. */

private Button createDatabaseButton = null;

private Button updateDatabaseButton = null;

private Button insertButton = null;

private Button updateButton = null;

private Button selectButton = null;

private Button deleteButton = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// 根据控件id获得相应的控件对象

createDatabaseButton = (Button) findViewById(R.id.createDatabase);

updateDatabaseButton = (Button) findViewById(R.id.updateDatabase);

insertButton = (Button) findViewById(R.id.insert);

updateButton = (Button) findViewById(R.id.update);

selectButton = (Button) findViewById(R.id.select);

deleteButton = (Button) findViewById(R.id.delete);

// 为按钮设置监听器

createDatabaseButton

.setOnClickListener(new CreateDatabaseOnClickListener());

updateDatabaseButton

.setOnClickListener(new UpdateDatabaseOnClickListener());

insertButton.setOnClickListener(new InsertOnClickListener());

updateButton.setOnClickListener(new UpdateOnClickListener());

selectButton.setOnClickListener(new SelectOnClickListener());

deleteButton.setOnClickListener(new DeleteOnClickListener());

}

// createDatabaseButton点击事件监听器

class CreateDatabaseOnClickListener implements OnClickListener {

public void onClick(View v) {

// 创建了一个DatabaseHelper对象,只执行这句话是不会创建或打开连接的

DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,

"test_yangyz_db");

// 只有调用了DatabaseHelper的getWritableDatabase()方法或者getReadableDatabase()方法之后,才会创建或打开一个连接

SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();

}

}

// updateDatabaseButton点击事件监听器

class UpdateDatabaseOnClickListener implements OnClickListener {

public void onClick(View v) {

// TODO Auto-generated method stub

DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,

"test_yangyz_db", 2);

// 得到一个只读的SQLiteDatabase对象

SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();

}

}

// insertButton点击事件监听器

class InsertOnClickListener implements OnClickListener {

public void onClick(View v) {

// 创建ContentValues对象

ContentValues values = new ContentValues();

// 向该对象中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致

values.put("id", 1);

values.put("name", "yangyz");

// 创建DatabaseHelper对象

DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,

"test_yangyz_db", 2);

// 得到一个可写的SQLiteDatabase对象

SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();

// 调用insert方法,就可以将数据插入到数据库当中

// 第一个参数:表名称

// 第二个参数:SQl不允许一个空列,如果ContentValues是空的,那么这一列被明确的指明为NULL值

// 第三个参数:ContentValues对象

sqliteDatabase.insert("user", null, values);

}

}

// updateButton点击事件监听器

class UpdateOnClickListener implements OnClickListener {

public void onClick(View v) {

// 创建一个DatabaseHelper对象

DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,

"test_yangyz_db", 2);

// 得到一个可写的SQLiteDatabase对象

SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();

// 创建一个ContentValues对象

ContentValues values = new ContentValues();

values.put("name", "zhangsan");

// 调用update方法

// 第一个参数String:表名

// 第二个参数ContentValues:ContentValues对象

// 第三个参数String:where字句,相当于sql语句where后面的语句,?号是占位符

// 第四个参数String[]:占位符的值

sqliteDatabase.update("user", values, "id=?", new String[] { "1" });

System.out.println("-----------update------------");

}

}

// selectButton点击事件监听器

class SelectOnClickListener implements OnClickListener {

public void onClick(View v) {

String id = null;

String name = null;

//创建DatabaseHelper对象

DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,

"test_yangyz_db", 2);

// 得到一个只读的SQLiteDatabase对象

SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();

// 调用SQLiteDatabase对象的query方法进行查询,返回一个Cursor对象:由数据库查询返回的结果集对象

// 第一个参数String:表名

// 第二个参数String[]:要查询的列名

// 第三个参数String:查询条件

// 第四个参数String[]:查询条件的参数

// 第五个参数String:对查询的结果进行分组

// 第六个参数String:对分组的结果进行限制

// 第七个参数String:对查询的结果进行排序

Cursor cursor = sqliteDatabase.query("user", new String[] { "id",

"name" }, "id=?", new String[] { "1" }, null, null, null);

// 将光标移动到下一行,从而判断该结果集是否还有下一条数据,如果有则返回true,没有则返回false

while (cursor.moveToNext()) {

id = cursor.getString(cursor.getColumnIndex("id"));

name = cursor.getString(cursor.getColumnIndex("name"));

}

System.out.println("-------------select------------");

System.out.println("id: "+id);

System.out.println("name: "+name);

}

}

// deleteButton点击事件监听器

class DeleteOnClickListener implements OnClickListener {

public void onClick(View v) {

//创建DatabaseHelper对象

DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_yangyz_db",2);

//获得可写的SQLiteDatabase对象

SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();

//调用SQLiteDatabase对象的delete方法进行删除操作

//第一个参数String:表名

//第二个参数String:条件语句

//第三个参数String[]:条件值

sqliteDatabase.delete("user", "id=?", new String[]{"1"});

System.out.println("----------delete----------");

}

}

}

布局文件:

[html] view
plaincopy





<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

<Button

android:id="@+id/createDatabase"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/createDatabaseButton"

/>

<Button

android:id="@+id/updateDatabase"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/updateDatabaseButton"

/>

<Button

android:id="@+id/insert"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/insertButton"

/>

<Button

android:id="@+id/update"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/updateButton"

/>

<Button

android:id="@+id/select"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/selectButton"

/>

<Button

android:id="@+id/delete"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/deleteButton"

/>

</LinearLayout>

String文件:

[html] view
plaincopy





<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="hello">Hello World, SQLiteActivity!</string>

<string name="app_name">SQLiteTest</string>

<string name="createDatabaseButton">createDatabase</string>

<string name="updateDatabaseButton">updateDatabase</string>

<string name="insertButton">insert</string>

<string name="updateButton">update</string>

<string name="selectButton">select</string>

<string name="deleteButton">delete</string>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: