[转]SQLiteOpenHelper

本文转自:http://code.google.com/p/androidlearn/wiki/SQLiteOpenHelper

 

继承SQLiteOpenHelper类,在构造方法中分别需要传入Context,数据库名称,CursorFactory(一般传入null,为默认数据库),数据库版本号(不能为负数)。在SQLiteOpenHelper中首先执行的是onCreate方法(当shujk第一次被创建时)。在构造函数时并没有真正创建数据库,而在调用getWritableDatabase或者getReadableDatabase方法时才真正去创建数据库,返回一个SQLiteDatabase对象。

public class MyDataBaseAdapter 
{ 
   
// 用于打印log 
   
private static final String TAG = "MyDataBaseAdapter"; 
 
   
// 表中一条数据的名称 
   
public static final String KEY_ID = "_id"; 
 
   
// 表中一条数据的内容 
   
public static final String KEY_NUM = "num"; 
   
// 表中一条数据的id 
   
public static final String KEY_DATA = "data"; 
 
   
// 数据库名称为data 
   
private static final String DB_NAME = "Examples_06_06.db"; 
         
   
// 数据库表名 
   
private static final String DB_TABLE = "table1"; 
         
   
// 数据库版本 
   
private static final int DB_VERSION = 1; 
 
   
// 本地Context对象 
   
private Context mContext = null; 
         
   
//创建一个表 
   
private static final String DB_CREATE = "CREATE TABLE " + DB_TABLE + " (" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NUM + " INTERGER,"+ KEY_DATA + " TEXT)"; 
 
   
// 执行open()打开数据库时,保存返回的数据库对象 
   
private SQLiteDatabase mSQLiteDatabase = null; 
 
   
// 由SQLiteOpenHelper继承过来 
   
private DatabaseHelper mDatabaseHelper = null; 
         
         
   
private static class DatabaseHelper extends SQLiteOpenHelper{ 
 
     
/* 构造函数-创建一个数据库 */ 
     
DatabaseHelper(Context context){ 
 
         
//当调用getWritableDatabase()  
         
//或 getReadableDatabase()方法时 
         
//则创建一个数据库 
         
super(context, DB_NAME, null, DB_VERSION); 
     
} 
 
     
/* 创建一个表 */ 
     
@Override 
     
public void onCreate(SQLiteDatabase db){ 
 
         
// 数据库没有表时创建一个 
         db
.execSQL(DB_CREATE); 
     
} 
 
     
/* 升级数据库 */ 
     
@Override 
     
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 
 
         db
.execSQL("DROP TABLE IF EXISTS notes"); 
         onCreate
(db); 
     
} 
   
} 
         
   
/* 构造函数-取得Context */ 
   
public MyDataBaseAdapter(Context context){ 
 
         mContext
= context; 
   
} 
 
 
   
// 打开数据库,返回数据库对象 
   
public void open() throws SQLException{ 
 
         mDatabaseHelper
= new DatabaseHelper(mContext); 
         mSQLiteDatabase
= mDatabaseHelper.getWritableDatabase(); 
   
} 
 
 
   
// 关闭数据库 
   
public void close(){ 
 
         mDatabaseHelper
.close(); 
   
} 
 
   
/* 插入一条数据 */ 
   
public long insertData(int num, String data){ 
 
         
ContentValues initialValues = new ContentValues(); 
         initialValues
.put(KEY_NUM, num); 
         initialValues
.put(KEY_DATA, data); 
 
         
return mSQLiteDatabase.insert(DB_TABLE, KEY_ID, initialValues); 
   
} 
 
   
/* 删除一条数据 */ 
   
public boolean deleteData(long rowId){ 
 
         
return mSQLiteDatabase.delete(DB_TABLE, KEY_ID + "=" + rowId, null) > 0; 
   
} 
 
   
/* 通过Cursor查询所有数据 */ 
   
public Cursor fetchAllData(){ 
 
         
return mSQLiteDatabase.query(DB_TABLE, new String[] { KEY_ID, KEY_NUM, KEY_DATA }, null, null, null, null, null); 
   
} 
 
   
/* 查询指定数据 */ 
   
public Cursor fetchData(long rowId) throws SQLException{ 
 
     
Cursor mCursor = mSQLiteDatabase.query(true, DB_TABLE, new String[] { KEY_ID, KEY_NUM, KEY_DATA }, KEY_ID + "=" + rowId, null, null, null, null, null); 
 
     
if (mCursor != null){ 
 
         mCursor
.moveToFirst(); 
     
} 
     
return mCursor; 
 
   
} 
 
   
/* 更新一条数据 */ 
   
public boolean updateData(long rowId, int num, String data){ 
 
     
ContentValues args = new ContentValues(); 
      args
.put(KEY_NUM, num); 
      args
.put(KEY_DATA, data); 
 
     
return mSQLiteDatabase.update(DB_TABLE, args, KEY_ID + "=" + rowId, null) > 0; 
   
} 
         
}

 

posted on 2012-11-23 16:50  freeliver54  阅读(232)  评论(0编辑  收藏  举报

导航