您的位置:首页 > 移动开发 > Android开发

【Android】SqLitOpenHelper操作数据库

2011-02-27 00:29 387 查看
做android中一个最常用的就是数据库的操作了,我们在android提供的SqLitOpenHelper上稍稍加工,就可以很方便的对数据进行操作。

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]

基本的功能都全了,日常再用都再接着完善了,使用还算方便吧,多张表也是这样使用,我用每个类的名字转为小写做为表的名称。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: