Android数据库sqlite封装心得
2017-02-19 08:37
375 查看
SQLite是Android里面轻量实现的数据库,我们知道android提供了SQLiteDatabase类 用来创建和访问数据库对象。
当要打开和创建数据库对象时,会执行SQLiteDatabase .openOrCreateDatabase()方法;
当要执行sql语句的时候执行SQLiteDatabase .execSQL() 方法。
android里面也提供了SQLiteOpenHelper类,这个类是SQLiteDatabase的一个辅助类。通过这个类可以生成一个数据库,并对数据库的版本进行管理。
当在程序当中调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法的时候,如果当前还没有数据,Android系统就会自动生成一个数据库。
package com.example.faithhopelove;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import com.example.faithhopelove.db.Group;
/**
* 数据库访问辅助类
*/
public class DBHelper {
private static DBHelper dbhelper = null;
private DatabaseHelper databasehelper = null;
private DBHelper(Context context){
this.databasehelper = new DatabaseHelper(context );
}
public synchronized static DBHelper getInstance(Context context){ //单例模型
if(dbhelper == null){
dbhelper = new DBHelper(context);
} return dbhelper;
}
public SQLiteDatabase getWritableDB(){
return databasehelper.getWritableDatabase();
}
public SQLiteDatabase getReadableDB(){
return databasehelper.getReadableDatabase();
}
public void closeDB(){
databasehelper.close();
}
private class DatabaseHelper extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "hzbg.db"; //数据库名称
private static final int DB_VERSION = 10;
public DatabaseHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
public DatabaseHelper(Context context){
this(context, DATABASE_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// Log.d("TAG","onCreate");
db.execSQL(PersonColumns.CREAT_TABLE(PersonColumns.TABLE_NAME()));
db.execSQL(GroupColumns.CREAT_TABLE(GroupColumns.TABLE_NAME()));
initGroup(db, GroupColumns.TABLE_NAME());
initPerosn(db,PersonColumns.TABLE_NAME());
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Log.d("TAG","onUpgrade");
db.execSQL(PersonColumns.CREAT_TABLE(PersonColumns.TABLE_NAME()));
db.execSQL(GroupColumns.CREAT_TABLE(GroupColumns.TABLE_NAME()));
}
}
public void initGroup(SQLiteDatabase db,String tableName) {
String[] names = { Group.GROUP1, Group.GROUP2, Group.GROUP3 };
int len = names.length;
db.beginTransaction();
try {
for (int i = 0; i < len; i++) {
ContentValues values = new ContentValues();
values.put( GroupColumns.ID, i);
values.put(GroupColumns.GROUPNAME, names[i]);
db.insert(tableName, null, values);
}
db.setTransactionSuccessful();
} catch (Exception e) {
} finally {
db.endTransaction();
}
}
public void initPerosn(SQLiteDatabase db, String table_NAME) {
db.beginTransaction();
try {
ContentValues values = new ContentValues();
values.put(PersonColumns.ID, "3");
values.put(PersonColumns.USERNAME, "zhangkang");
values.put(PersonColumns.BIRTH, "25");
values.put(PersonColumns.ISMARRY, true);
values.put(PersonColumns.SEX, "man");
values.put(PersonColumns.BAPTISM, true);
values.put(PersonColumns.ADDRESS, "china");
values.put(PersonColumns.JOB, "programer");
values.put(PersonColumns.PHONE, "110");
values.put(PersonColumns.GROUPID, 1);
values.put(PersonColumns.GROUPNAME, "信实组");
db.insert(table_NAME, null, values);
db.setTransactionSuccessful();
} catch (Exception e) {
} finally {
db.endTransaction();
}
}
}
SQLiteOpenHelper在执行OnCreate的时候需要传入一个SQLiteDatabase 对象,这样的话对SQLiteOpenHelper操作时就有了SQLiteDatabase 对象。
对于每个bean进行操作的逻辑封装到一个BeanColumns类当中,BeanColumns的作用是由它去跟SQLiteOpenHelper完成跟bean对象相关的业务表的创建和查询等等,这样下次如果有新的业务表的话,就只用再新建一个bean对象,新建一个BeanColumns对象,这样拓展性就比较好。
附录:github完整项目地址
https://github.com/preqel/FaithHopeLove
当要打开和创建数据库对象时,会执行SQLiteDatabase .openOrCreateDatabase()方法;
当要执行sql语句的时候执行SQLiteDatabase .execSQL() 方法。
android里面也提供了SQLiteOpenHelper类,这个类是SQLiteDatabase的一个辅助类。通过这个类可以生成一个数据库,并对数据库的版本进行管理。
当在程序当中调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法的时候,如果当前还没有数据,Android系统就会自动生成一个数据库。
package com.example.faithhopelove;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import com.example.faithhopelove.db.Group;
/**
* 数据库访问辅助类
*/
public class DBHelper {
private static DBHelper dbhelper = null;
private DatabaseHelper databasehelper = null;
private DBHelper(Context context){
this.databasehelper = new DatabaseHelper(context );
}
public synchronized static DBHelper getInstance(Context context){ //单例模型
if(dbhelper == null){
dbhelper = new DBHelper(context);
} return dbhelper;
}
public SQLiteDatabase getWritableDB(){
return databasehelper.getWritableDatabase();
}
public SQLiteDatabase getReadableDB(){
return databasehelper.getReadableDatabase();
}
public void closeDB(){
databasehelper.close();
}
private class DatabaseHelper extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "hzbg.db"; //数据库名称
private static final int DB_VERSION = 10;
public DatabaseHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
public DatabaseHelper(Context context){
this(context, DATABASE_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// Log.d("TAG","onCreate");
db.execSQL(PersonColumns.CREAT_TABLE(PersonColumns.TABLE_NAME()));
db.execSQL(GroupColumns.CREAT_TABLE(GroupColumns.TABLE_NAME()));
initGroup(db, GroupColumns.TABLE_NAME());
initPerosn(db,PersonColumns.TABLE_NAME());
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Log.d("TAG","onUpgrade");
db.execSQL(PersonColumns.CREAT_TABLE(PersonColumns.TABLE_NAME()));
db.execSQL(GroupColumns.CREAT_TABLE(GroupColumns.TABLE_NAME()));
}
}
public void initGroup(SQLiteDatabase db,String tableName) {
String[] names = { Group.GROUP1, Group.GROUP2, Group.GROUP3 };
int len = names.length;
db.beginTransaction();
try {
for (int i = 0; i < len; i++) {
ContentValues values = new ContentValues();
values.put( GroupColumns.ID, i);
values.put(GroupColumns.GROUPNAME, names[i]);
db.insert(tableName, null, values);
}
db.setTransactionSuccessful();
} catch (Exception e) {
} finally {
db.endTransaction();
}
}
public void initPerosn(SQLiteDatabase db, String table_NAME) {
db.beginTransaction();
try {
ContentValues values = new ContentValues();
values.put(PersonColumns.ID, "3");
values.put(PersonColumns.USERNAME, "zhangkang");
values.put(PersonColumns.BIRTH, "25");
values.put(PersonColumns.ISMARRY, true);
values.put(PersonColumns.SEX, "man");
values.put(PersonColumns.BAPTISM, true);
values.put(PersonColumns.ADDRESS, "china");
values.put(PersonColumns.JOB, "programer");
values.put(PersonColumns.PHONE, "110");
values.put(PersonColumns.GROUPID, 1);
values.put(PersonColumns.GROUPNAME, "信实组");
db.insert(table_NAME, null, values);
db.setTransactionSuccessful();
} catch (Exception e) {
} finally {
db.endTransaction();
}
}
}
SQLiteOpenHelper在执行OnCreate的时候需要传入一个SQLiteDatabase 对象,这样的话对SQLiteOpenHelper操作时就有了SQLiteDatabase 对象。
对于每个bean进行操作的逻辑封装到一个BeanColumns类当中,BeanColumns的作用是由它去跟SQLiteOpenHelper完成跟bean对象相关的业务表的创建和查询等等,这样下次如果有新的业务表的话,就只用再新建一个bean对象,新建一个BeanColumns对象,这样拓展性就比较好。
package com.example.faithhopelove; public class PersonColumns { public static String TABLE_NAME(){ return "persons"; } public static final String ID = "id"; //ID public static final String USERNAME = "name"; //姓名 public static final String PHONE = "phone"; //电话号码 public static final String SEX = "sex"; //性别 public static final String BIRTH = "birth"; //生日 public static final String JOB = "job"; //工作 public static final String ISMARRY = "ismarried"; //是否结婚 public static final String ADDRESS = "address"; //地址 public static final String BAPTISM = "baptism"; public static final String GROUPID = "groupid"; //组id public static final String GROUPNAME = "groupname"; //组名 public static final String[] COLUMN_ARRAY = { ID, USERNAME, PHONE, SEX, BIRTH, JOB, ISMARRY, ADDRESS, BAPTISM, GROUPID, GROUPNAME }; public static String CREAT_TABLE(String tableName){ return new StringBuffer(). append("CREATE TABLE IF NOT EXISTS ").append(tableName). append("("). append(ID).append(" TEXT PRIMARY KEY NOT NULL,"). append(USERNAME).append(" TEXT,"). append(PHONE).append(" TEXT,"). append(SEX).append(" TEXT,"). append(BIRTH).append(" TEXT,"). append(JOB).append(" TEXT,"). append(ISMARRY).append(" INTEGER DEFAULT 1,"). append(ADDRESS).append(" INTEGER DEFAULT 0,"). append(BAPTISM).append(" TEXT ,"). append(GROUPID).append(" INTEGER DEFAULT 0, "). append(GROUPNAME).append(" TEXT "). append(");").toString(); } private static String DROP_TABLE(){ return "DROP TABLE IF EXISTS " + TABLE_NAME(); } }
附录:github完整项目地址
https://github.com/preqel/FaithHopeLove
相关文章推荐
- android 本地数据库sqlite的封装
- android 本地数据库sqlite的封装
- android SQLite数据库封装
- 利用反射实现对sqlite3数据库的crud(增删改查)操作的一个baseAndroidDao封装,安卓开发中
- 【android开发记录片】3.数据库SQLite 的对象封装
- Android-SQLite封装sql语句以及查看数据库
- Android_应用层_SQlite封装数据库工具
- Android sqlite数据库的封装使用
- 关于android sqlite数据库使用的几点心得
- 【android开发记录片】3.数据库SQLite 的对象封装
- 系出名门Android(9) - 数据库支持(SQLite),
- SQLite3命令行使用查询android的telephone数据库
- android 数据库 SQLiteOpenHelper和ContentProvider学习笔记---添加修改删除数据之联系人(二)
- android 数据库 SQLiteOpenHelper和ContentProvider学习笔记---添加数据及显示(一)
- 系出名门Android(9) - 数据库支持(SQLite), 内容提供器(ContentProvider)
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- Android 数据存储之 SQLite嵌入式数据库
- 系出名门Android(9) - 数据库支持(SQLite)
- Android 数据库SQLite基础
- android数据库---sqlite,所支持的数据类型