您的位置:首页 > 大数据 > 人工智能

android SQLite使用SQLiteOpenHelper类对数据库进行操作 from http://blog.csdn.net/draling/article/details/6569237

2012-12-27 11:58 489 查看
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 关闭所有打开的数据库对象

例子:
DatabaseHelper类:

package qyq.sqlitetest.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
/**
* SQLiteOpenHelper是一个辅助类,用来管理数据库的创建和版本他,它提供两个方面的功能
* 第一,getReadableDatabase()、getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作
* 第二,提供了onCreate()、onUpgrade()两个回调函数,允许我们再创建和升级数据库时,进行自己的操作
*/
public class DatabaseHelper extends SQLiteOpenHelper{
private static final int VERSION = 1;
/** 构造方法,这个构造方法在SQLiteOpenHelper的实现类当中是必须的
* @param context 上下文对象 这里的话也就是Activity了
* @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 synchronized SQLiteDatabase getReadableDatabase() {
// TODO Auto-generated method stub
return super.getReadableDatabase();
}
// 创建或打开一个可以读写的数据库,返回 SQLiteDatabase对象
@Override
public synchronized SQLiteDatabase getWritableDatabase() {
// TODO Auto-generated method stub
return super.getWritableDatabase();
}
// 第一次创建数据库时候执行,第一次得到SQLiteOpenHelper对象的时候,才会调用这个方法
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
System.out.println("onCreate method");
//execSQL用于执行SQL语句,创建数据库表
db.execSQL("create table users (id int,name varchar(50))");

}

@Override
public void onOpen(SQLiteDatabase db) {
// TODO Auto-generated method stub
System.out.println("onOpen method");
super.onOpen(db);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("onUpgrade method");

}

Activity类

package qyq.sqlitetest;

import qyq.sqlitetest.db.DatabaseHelper;
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;
import android.widget.EditText;

public class sqLiteTestActivity extends Activity {
/** Called when the activity is first created. */
// 控件的声明
private Button createDataBase = null;
private Button updateDataBase = null;
private Button insert = null;
private Button update = null;
private Button query = null;
private Button delete =null;
private EditText id = null;
private EditText name = null;
private int inputid = 0;
private String inputname = null;
// 获取控件设置OnClickListener监听器
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
createDataBase = (Button)findViewById(R.id.createDataBase);
createDataBase.setOnClickListener(new createDataBaseListener());
updateDataBase=(Button)findViewById(R.id.updateDataBase);
updateDataBase.setOnClickListener(new updateDataBaseListener());
id =(EditText)findViewById(R.id.id);
name = (EditText)findViewById(R.id.name);
insert = (Button)findViewById(R.id.insert);
insert.setOnClickListener(new insertListener());
update =(Button)findViewById(R.id.update);
update.setOnClickListener(new updateListener());
query=(Button)findViewById(R.id.query);
query.setOnClickListener(new queryListener());
delete =(Button)findViewById(R.id.delete);
delete.setOnClickListener(new deleteListener());
System.out.println("test");
}
// 监听器类
class createDataBaseListener implements OnClickListener{

@Override
public void onClick(View v) {
// 创建了一个DatabaseHelper对象,只执行这句话是不会创建或打开连接的
DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
// 只有调用了DatabaseHelper的getWritableDatabase()方法或者getReadableDatabase()方法之后,才会创建或打开一个连接
SQLiteDatabase db = helper.getReadableDatabase();
}
}
// 监听器类
class updateDataBaseListener implements OnClickListener{

@Override
public void onClick(View v) {
DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test",2);
SQLiteDatabase db = helper.getWritableDatabase();
}
}
// 监听器类
class insertListener implements OnClickListener{

@Override
public void onClick(View v) {
// 创建ContentValues对象
ContentValues values = new ContentValues();
// 向该对象中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致
//Integer.parseInt(id.getText().toString())从画面获取要插入的值
values.put("id",Integer.parseInt(id.getText().toString()));
values.put("name", name.getText().toString());
// 创建DatabaseHelper对象
DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
// 得到一个可写的SQLiteDatabase对象
SQLiteDatabase db = helper.getWritableDatabase();
// 调用insert方法,就可以将数据插入到数据库当中
// 第一个参数:表名称
// 第二个参数:SQl不允许一个空列,如果ContentValues是空的,那么这一列被明确的指明为NULL值
// 第三个参数:ContentValues对象
db.insert("users", null, values);
}
}
// 监听器类
class updateListener implements OnClickListener{

@Override
public void onClick(View v) {
ContentValues values = new ContentValues();
values.put("name", "lisiyuan");
DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
SQLiteDatabase db = helper.getWritableDatabase();
String id1 =id.getText().toString();
// 调用update方法
// 第一个参数String:表名
// 第二个参数ContentValues:ContentValues对象
// 第三个参数String:where字句,相当于sql语句where后面的语句,?号是占位符
// 第四个参数String[]:占位符的值
db.update("users", values, "id=?", new String[]{id1});
}
}
// 监听器类
class queryListener implements OnClickListener{

@Override
public void onClick(View v) {
DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
SQLiteDatabase db = helper.getReadableDatabase();
// 调用SQLiteDatabase对象的query方法进行查询,返回一个Cursor对象:由数据库查询返回的结果集对象
// 第一个参数String:表名
// 第二个参数String[]:要查询的列名
// 第三个参数String:查询条件
// 第四个参数String[]:查询条件的参数
// 第五个参数String:对查询的结果进行分组
// 第六个参数String:对分组的结果进行限制
// 第七个参数String:对查询的结果进行排序
Cursor cs=db.query("users", new String[]{"id","name"}, "id=?", new String[]{"5"}, null, null, null);
// 将光标移动到下一行,从而判断该结果集是否还有下一条数据,如果有则返回true,没有则返回false
while(cs.moveToNext()){
System.out.println(cs.getString(cs.getColumnIndex("name")));
}
}
}
// 监听器类
class deleteListener implements OnClickListener{

@Override
public void onClick(View v) {
DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
SQLiteDatabase db = helper.getWritableDatabase();
String id1 =id.getText().toString();
//调用SQLiteDatabase对象的delete方法进行删除操作
//第一个参数String:表名
//第二个参数String:where字句,相当于sql语句where后面的语句,?号是占位符
//第三个参数String[]:占位符的值
db.delete("users", "id=?", new String[]{id1});
}
}
}

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