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可以看到数据库中数据变化的预期