【Android】SqLitOpenHelper操作数据库
2011-02-27 00:29
387 查看
做android中一个最常用的就是数据库的操作了,我们在android提供的SqLitOpenHelper上稍稍加工,就可以很方便的对数据进行操作。
[code]
[/code]
下来我们写一个数据库表的基类:
[code]
[/code]
下来写具体的表了:
[code]publicstaticfinalintDATA_CACHE_VERSION_=1;
[/code]
到这里所有的工作都准备好了,下来看看怎么用这些个东西来操作数据库:
1、新增一条记录:
[code]imageTable.init();
[/code]
2、删除记录:
[code]imageTable.init();
[/code]
3、更新一条记录:
[code]imageTable.init();
[/code]
4、当然还有一个很重要的就是查询:
[code]imageTable.init();
[/code]
基本的功能都全了,日常再用都再接着完善了,使用还算方便吧,多张表也是这样使用,我用每个类的名字转为小写做为表的名称。
publicclassDatabaseHelperextendsSQLiteOpenHelper{
[code]
publicstaticfinalStringCOLUMN_ID="_id";
privateStringtableName;
privateMap<String,String>tableContent;
DatabaseHelper(Contextcontext,Stringname,CursorFactorycursorFactory,
intversion){
super(context,name,cursorFactory,version);
this.tableName=null;
this.tableContent=newHashMap<String,String>();
}
publicvoidsetTableAttr(StringtableName,Map<String,String>tableContent)
{
this.tableName=tableName;
this.tableContent=tableContent;
}
@Override
publicvoidonCreate(SQLiteDatabasedb){
//TODOAuto-generatedmethodstub
if(this.tableName==null||
this.tableContent.size()==0)
{
return;
}
Stringsql="createtableifnotexists";
sql+=this.tableName;
sql+="(";
sql+=COLUMN_ID;
sql+="integerprimarykey,";
Setset=tableContent.entrySet();
Iteratoriterator=set.iterator();
intindex=0;
while(iterator.hasNext()){
index++;
Map.EntrymapEntry=(Map.Entry)iterator.next();
if(mapEntry.getValue()!=null){
sql+=(String)mapEntry.getKey();
sql+="";
sql+=(String)mapEntry.getValue();
if(index<this.tableContent.size())
{
sql+=",";
}
}
}
sql+=")";
db.execSQL(sql);
}
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
//TODOAuto-generatedmethodstub
this.onCreate(db);
}
}
[/code]
下来我们写一个数据库表的基类:
[code]
publicabstractclassTable{
//publicstaticint_DATA_CACHE_VERSION_=1;
privatestaticfinalStringDB_NAME="XXXXXX.db";
protectedStringtableName;
privatefinalContextmContext;
protectedCursorFactorymFactory;
protectedMap<String,String>tableContent;
privateSQLiteDatabasemDataBase;
protectedDatabaseHelperdbHelper;
protectedStringmColumnIdInMedia;
privatebooleanmIsInit;
protectedint_DATA_CACHE_VERSION_=0;
publicTable(Contextctx){
this.mContext=ctx;
this.tableContent=newHashMap<String,String>();
mIsInit=false;
this.mFactory=null;
mColumnIdInMedia=null;
this.getClass().getSimpleName().toLowerCase();
}
protectedabstractvoid_init();
publicvoidinit(){
if(mIsInit){
return;
}
_init();
dbHelper=newDatabaseHelper(mContext,DB_NAME,mFactory,
_DATA_CACHE_VERSION_);
this.setTableAttr();
dbHelper.setTableAttr(tableName,tableContent);
mDataBase=dbHelper.getWritableDatabase();
mIsInit=true;
}
protectedabstractvoidsetTableAttr();
publicbooleaninsert(ContentValuesvalues){
if(mDataBase==null){
returnfalse;
}
mDataBase.insert(this.tableName,null,values);
returntrue;
}
publicbooleandelete(StringwhereClause){
if(mDataBase==null){
returnfalse;
}
mDataBase.delete(this.tableName,whereClause,null);
returntrue;
}
publicbooleanupdate(ContentValuesvalues,StringwhereClause){
if(mDataBase==null){
returnfalse;
}
mDataBase.update(this.tableName,values,whereClause,null);
returntrue;
}
privateCursorquery(StringcolumnName,intid){
if(mDataBase==null){
returnnull;
}
if(mColumnIdInMedia==null||
mColumnIdInMedia.equalsIgnoreCase(""))
{
mColumnIdInMedia=DatabaseHelper.COLUMN_ID;
}
Cursorcursor=mDataBase.query(this.tableName,newString[]{columnName,mColumnIdInMedia},null,null,null,
null,"_idasc");
int_idIndex=cursor.getColumnIndex(mColumnIdInMedia);
if(_idIndex!=-1)
{
for(cursor.moveToFirst();!(cursor.isAfterLast());cursor.moveToNext()){
if(id==cursor.getInt(_idIndex))
{
returncursor;
}
}
}
cursor.close();
returnnull;
}
publicStringqueryString(StringcolumnName,intid)
{
Cursorcursor=query(columnName,id);
Stringvalue=null;
if(cursor!=null)
{
value=cursor.getString(0);
cursor.close();
}
returnvalue;
}
publicintqueryInteger(StringcolumnName,intid)
{
Cursorcursor=query(columnName,id);
intvalue=-1;
if(cursor!=null)
{
value=cursor.getInt(0);
cursor.close();
}
returnvalue;
}
publicdoublequeryDouble(StringcolumnName,intid)
{
Cursorcursor=query(columnName,id);
doublevalue=-1;
if(cursor!=null)
{
value=cursor.getDouble(0);
cursor.close();
}
returnvalue;
}
publicvoidRelease(){
if(this.mDataBase!=null)
{
this.mDataBase.close();
this.mDataBase=null;
}
this.mIsInit=false;
}
}
[/code]
下来写具体的表了:
publicclassImageTableextendsTable{
[code]publicstaticfinalintDATA_CACHE_VERSION_=1;
publicstaticfinalStringCOLUMN_WIDTH="width";
publicstaticfinalStringCOLUMN_HEIGHT="height";
publicstaticfinalStringCOLUMN_LASTTIME="lasttime";
publicstaticfinalStringCOLUMN_DATA="_data";
publicstaticfinalStringCOLUMN_ID_IMAGE="_id_image";
publicImageCache(Contextctx){
super(ctx);
//TODOAuto-generatedconstructorstub
}
@Override
protectedvoidsetTableAttr(){
//TODOAuto-generatedmethodstub
this.mColumnIdInMedia=COLUMN_ID_IMAGE;
this.tableContent.clear();
this.tableContent.put(COLUMN_ID_IMAGE,"integer");
this.tableContent.put(COLUMN_WIDTH,"integer");
this.tableContent.put(COLUMN_HEIGHT,"integer");
this.tableContent.put(COLUMN_LASTTIME,"integer");
this.tableContent.put(COLUMN_DATA,"varchar");
}
@Override
protectedvoid_init(){
//TODOAuto-generatedmethodstub
_DATA_CACHE_VERSION_=DATA_CACHE_VERSION_;
}
}
[/code]
到这里所有的工作都准备好了,下来看看怎么用这些个东西来操作数据库:
1、新增一条记录:
TableimagTable=newImageTable(ctx);
[code]imageTable.init();
ContentValuesvalues=newContentValues();
values.put(ImageTable.COLUMN_DATA,
"/mnt/sdcard/image/xxx.jpg");
values.put(ImageTable.COLUMN_HEIGHT,
300);
values.put(ImageTable.COLUMN_WIDTH,400);
values.put(ImageTable.COLUMN_LASTTIME,
123123123123);
imageTale.insert(values);
imageTale.Release();
[/code]
2、删除记录:
TableimagTable=newImageTable(ctx);
[code]imageTable.init();
imageTale.delete(ImageTable.COLUMN_LASTTIME+"=45554837");
imageTale.delete(DatabaseHelper.COLUMN_ID+"=3");
imageTale.Release();
[/code]
3、更新一条记录:
TableimagTable=newImageTable(ctx);
[code]imageTable.init();
ContentValuesvalues=newContentValues();
values.put(ImageTable.COLUMN_DATA,
"/mnt/sdcard/image/xxx.jpg");
values.put(ImageTable.COLUMN_HEIGHT,
300);
values.put(ImageTable.COLUMN_WIDTH,400);
values.put(ImageTable.COLUMN_LASTTIME,
123123123123);
imageCache.update(values,DatabaseHelper.COLUMN_ID+"=3");
imageTale.Release();
[/code]
4、当然还有一个很重要的就是查询:
TableimagTable=newImageTable(ctx);
[code]imageTable.init();
intwidth=imagTable.queryInteger(ImageTable.COLUMN_WIDTH,1);
Stringstr=imagTable.queryString(ImageTable.COLUMN_DATA,1);
imageTale.Release();
[/code]
基本的功能都全了,日常再用都再接着完善了,使用还算方便吧,多张表也是这样使用,我用每个类的名字转为小写做为表的名称。
相关文章推荐
- android:SQLiteOpenHelper 与 greenDao 数据库操作
- Xamarin.Android 使用 SQLiteOpenHelper 进行数据库操作
- 2014-10-27Android学习------SQLite数据库操作(二)-----数据库的创建--SQLiteHelper extends SQLiteOpenHelper
- android数据库操作SQLiteOpenHelper
- Android下SQLite3数据库操作笔记(二)之-SQLiteOpenHelper
- android sqliteopenhelper 数据库操作
- Android开发—数据库应用—访问数据表(SQLite OpenHelper) —添加检索操作(Retrieve)
- android 之SQLite使用SQLiteOpenHelper对数据库操作
- android SQLiteHelper对数据库的操作
- 我的android 第15天 -使用SQLiteOpenHelper获取用于操作数据库的SQLiteDatabase实例
- android 数据库技术 | 文件系统,SDCARD访问,CONTENT PROVIDER,SQLITE ,CURSOR操作,CURSOR适配器,SQLITEHELPER,数据库设计模式
- android SQLiteOpenHelper操作数据库 搜索关键字列表应用
- Android--数据库操作辅助类:SQLiteOpenHelper
- Android获取操作数据库的SQLiteDatabase实例
- Android数据库高手秘籍(六)——LitePal的修改和删除操作
- 快速上手Android数据库操作
- 如何将Android数据库操作通用化(三)
- android数据库操作(二) 某实体类的DAO操作类
- Android程序员学PHP开发(40)-ThinkPHP5.0(12)后台操作数据库(3)修改-phpStudy+PhpStorm
- android中数据库操作简介