Android之SQLite数据库的使用

SQLite是比较小而功能比较全的关系型数据库,下面介绍一下SQLite数据库的使用方法,及增删改查操作。

创建一个Android项目;

首先我们需要创建一个DatabaseHelper这个助手类,源码:

package cn.android.sword.sqlite.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatabaseHelper extends SQLiteOpenHelper{
	private static final int VERSION = 1;
	private static final String SWORD="SWORD";
	//三个不同参数的构造函数
	//带全部参数的构造函数,此构造函数必不可少
	public DatabaseHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
		
	}
	//带两个参数的构造函数,调用的其实是带三个参数的构造函数
	public DatabaseHelper(Context context,String name){
		this(context,name,VERSION);
	}
	//带三个参数的构造函数,调用的是带所有参数的构造函数
	public DatabaseHelper(Context context,String name,int version){
		this(context, name,null,version);
	}
	//创建数据库
	public void onCreate(SQLiteDatabase db) {
		Log.i(SWORD,"create a Database");
		//创建数据库sql语句
		String sql = "create table user(id int,name varchar(20))";
		//执行创建数据库操作
		db.execSQL(sql);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		//创建成功,日志输出提示
		Log.i(SWORD,"update a Database");
	}

}

布局资源文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

	<Button 
	    android:id="@+id/createDatabase"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/createDatabse"/>
	<Button 
	    android:id="@+id/updateDatabase"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/updateDatabase"/>
	<Button 
	    android:id="@+id/insert"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/insert"/>
	<Button 
	    android:id="@+id/update"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/update"/>
	<Button 
	    android:id="@+id/query"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/query"/>
	<Button 
	    android:id="@+id/delete"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:text="@string/delete"/>
	
</LinearLayout>

在Activity中进行增删改查操作,源码:

package cn.android.sword.sqlite;

import cn.android.sword.sqlite.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.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class SQLiteActivity extends Activity implements OnClickListener{
    private final static String SWORD="SWORD";
    //声明五个控件对象
    Button createDatabase=null;
    Button updateDatabase=null;
    Button insert=null;
    Button update=null;
    Button query=null;
    Button delete=null;
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        findViews();
    }

	private void findViews() {
		//根据控件ID得到控件
		createDatabase = (Button) this.findViewById(R.id.createDatabase);
		updateDatabase = (Button) this.findViewById(R.id.updateDatabase);
		insert = (Button) this.findViewById(R.id.insert);
		update = (Button) this.findViewById(R.id.update);
		query = (Button) this.findViewById(R.id.query);
		delete = (Button) this.findViewById(R.id.delete);
		//添加监听器
		createDatabase.setOnClickListener(this);
		updateDatabase.setOnClickListener(this);
		insert.setOnClickListener(this);
		update.setOnClickListener(this);
		query.setOnClickListener(this);
		delete.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		//判断所触发的被监听控件,并执行命令
		switch(v.getId()){
		//创建数据库
		case R.id.createDatabase:
			//创建一个DatabaseHelper对象
			DatabaseHelper dbHelper1 = new DatabaseHelper(SQLiteActivity.this, "test_db");
			//取得一个只读的数据库对象
			SQLiteDatabase db1 = dbHelper1.getReadableDatabase();
			break;
		//更新数据库
		case R.id.updateDatabase:
			DatabaseHelper dbHelper2 = new DatabaseHelper(SQLiteActivity.this, "test_db", 2);
			SQLiteDatabase db2 = dbHelper2.getReadableDatabase();
			break;
		//插入数据
		case R.id.insert:
			//创建存放数据的ContentValues对象
			ContentValues values = new ContentValues();
			//像ContentValues中存放数据
			values.put("id", 1);
			values.put("name","zhangsan");
			DatabaseHelper dbHelper3 = new DatabaseHelper(SQLiteActivity.this, "test_db");
			SQLiteDatabase db3 = dbHelper3.getWritableDatabase();
			//数据库执行插入命令
			db3.insert("user", null, values);
			break;
		//更新数据信息
		case R.id.update:
			DatabaseHelper dbHelper4 = new DatabaseHelper(SQLiteActivity.this, "test_db");
			SQLiteDatabase db4 = dbHelper4.getWritableDatabase();
			ContentValues values2 = new ContentValues();
			values2.put("name", "xiaosan");
			db4.update("user", values2, "id=?", new String[]{"1"});
			break;
		//查询信息
		case R.id.query:
			DatabaseHelper dbHelper5 = new DatabaseHelper(SQLiteActivity.this, "test_db");
			SQLiteDatabase db5 = dbHelper5.getReadableDatabase();
			//创建游标对象
			Cursor cursor = db5.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null, null);
			//利用游标遍历所有数据对象
			while(cursor.moveToNext()){
				String name = cursor.getString(cursor.getColumnIndex("name"));
				//日志打印输出
				Log.i(SWORD,"query-->"+name);
			}
			break;
		//删除记录
		case R.id.delete:
			DatabaseHelper dbHelper6 = new DatabaseHelper(SQLiteActivity.this,"test_db");
			SQLiteDatabase db6 = dbHelper6.getWritableDatabase();
			db6.delete("user", "id=?", new String[]{"1"});
			break;
		default:
			Log.i(SWORD,"error");
			break;
		}
	}
}

在虚拟机中运行:

点击createDatabase按钮查看日志输出:

我们看到成功打印了语句,说明我们的数据库已经创建完毕,那么我们在哪里找到这个数据库呢,当然,有很多中方法,我采用的是一种相对比较麻烦的,不过我用的很顺手,

在File Explorer下的data下的data文件夹中找到我们创建该项目时的包名(cn.android.sword.sqlite)

导出test_db文件,打开这个数据库文件我们可以用SQLite Expert或Navicat软件,我用的是Navicat;

将test_db导入到软件中就可以查看了,一次点击insert,update,query和delete可以看到数据库中数据变化的预期的结果。

发表评论