本来不太想写这篇博客的,但是看到网上的关于android数据库操作的博文都讲得很详细,对于像我这样的新手入门了解SQLite的基本操作有一定难度,所以我参考了网上的一些博客文章,并自己亲自摸索了一遍,希望写出这么一篇博文来记录SQLite的最基本操作,同时也希望能够对android的新手们有些帮助。
参考博客:http://www.20864.com/201247/274.html
这里只是一个示范性的demo,并没实现什么具体功能,只实现了对数据库的增删查改操作。
以下是实现demo的步骤:
第一步,创建自己的SQL操作类 DBHelper
package com.example.SQLiterTest; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * 可以通过SQLiteOpenHelper的以下两个方法来或得SQLiteDatabase的对象: * getReadableDatabase() 创建或者打开一个查询数据库 * getWritableDatabase() 创建或者打开一个可写数据库 */ public class DBHelper extends SQLiteOpenHelper { /** * 构造函数,必须实现 * @param context 上下文路径 * @param name 数据库名称 * @param factory 可选游标工厂,通常为NULL * @param version 当前数据库版本号 */ private SQLiteDatabase mDataBase = null; private static final String USER_TABLE = "user"; public DBHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); mDataBase = this.getWritableDatabase(); } //数据库第一次创建时会调用,一般在其中创建数据库表 @Override public void onCreate(SQLiteDatabase db) { //使用execSQL()方法执行SQL语句,如果没有异常,这个方法没有返回值 db.execSQL("create table user(id INTEGER PRIMARY KEY AUTOINCREMENT," + "name varchar(20), address TEXT)"); Log.v("mytab","-->onCreate"); } //当数据库需要修改的时候,Android系统会主动的调用这个方法。 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} //打开数据库时的回调函数,一般不会用 @Override public void onOpen(SQLiteDatabase db) { super.onOpen(db); Log.v("mytab","-->onOpen"); } @Override public synchronized void close() { super.close(); } }
第二步,在Activity的onCreate函数中实现增删查改的功能。
package com.example.SQLiterTest; 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; public class MyActivity extends Activity { /** * Called when the activity is first created. */ private SQLiteDatabase db; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获取处理SQLiteOpenHelper的子类的SQLite的实例,如果只读,可以采用getReadableDatabase(), // 这个例子我们奖通过SQLiteDatabase实例的操作,来进行对数据进行增删改查询,采用可写的方式。 db = new DBHelper(getApplicationContext(),"mydb",null,1).getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put("name", "JackLi"); cv.put("address", "QingYuan"); //插入 db.insert("user",null,cv); Log.v("mytab","-->have insert"); //更新 ContentValues cv2 = new ContentValues(); cv2.put("name","HaiXin"); db.update("user",cv2,"name=?",new String[]{"JackLi"}); Log.v("mytab","-->have updated"); //查询 String[] columns = {"name", "address"}; Cursor cursor = db.query("user",columns,"name = ?", new String[] {"HaiXin"},null,null,null); while (cursor.moveToNext()) { String myname = cursor.getString(cursor.getColumnIndex("name")); Log.v("mytab","---->"+myname); } //删除 db.delete("user","name = ?",new String[]{"HaiXin"}); Log.v("mytab","-->have delete"); } @Override protected void onDestroy() { super.onDestroy(); db.close(); } }
总的来说整个过程只有两步,在第一次运行这个demo时,会创建一个名叫"mydb"的数据库和一个叫“user”的数据表。
运行程序后,在logcat中会显示以下一些信息:
05-19 08:08:30.864 1802-1802/com.example.SQLiterTest V/mytab﹕ -->onOpen
05-19 08:08:30.872 1802-1802/com.example.SQLiterTest V/mytab﹕ -->have insert
05-19 08:08:30.888 1802-1802/com.example.SQLiterTest V/mytab﹕ -->have updated
05-19 08:08:30.888 1802-1802/com.example.SQLiterTest V/mytab﹕ ---->HaiXin
05-19 08:08:30.900 1802-1802/com.example.SQLiterTest V/mytab﹕ -->have delete
通过logcat中的信息可以很清楚的看到程序的执行过程。