android判断sqlite中数据库的某个表是否存在
2011-03-0412:49SQLite判断表是否存在今天刚好用到sqlite来存放一些数据,但是需要检测表是否已经存在;
其实很简单,只要查看sqlite_master表中是否存在这条数据就可以知道了
SELECTcount(*)FROMsqlite_masterWHEREtype='table'ANDname='tableName'
android判断sqlite中数据库的某个表是否存在finalStringCREATE_BASE_TABLE="createtableifnotexistslogin("+"idINTEGERPRIMARYKEY,"+"emailTEXT,"+"passwordTEXT,"+");";
Ihaveanandroidappthatneedstocheckifthere’salreadyadatabaseavailableinthedevice,andifnot,processsomethingsandeventuallycreateit.Thencheckifaparticulartableexists.
SQLiteDatabasedb;db=openOrCreateDatabase("TestData.db",SQLiteDatabase.CREATE_IF_NECESSARY,null);
Ifdatabaseexistsandtableexistssimplyreadthedatafromthedatabaseifthedatadoesexist.
Tip:ForcheckingifatableExists:
However,ItiseasytofindifatableexistsorNOT,
CreateaSQLiteDatabaseobjectandhaveacalltoquery(…),thesqlquerystringhasselectcommand.Ifthereturnedcursorisnullthenthetabledoesn’texist.
SQLiteDatabasetempDatabase;try{tempDatabase=SQLiteDatabase.openDatabase(DBPATH+DBNAME,null,SQLiteDatabase.OPEN_READONLY);try{Cursorcur;cur=tempDatabase.rawQuery("select*fromtablewhereid='"+idvar+";",null);if(cur==null){//ourtabledoesn'texist,sowe'llcreateoneortakeanaction.}}catch(SQLiteExceptione){//ourtabledoesn'texist,sowe'llcreateoneortakeanaction.}}catch(SQLiteExceptione){//ourdatabasedoesn'texist,sowe'llcreateoneortakeanaction.}
翻译过来大致是这个意思:
有两种方法,
第一种方法是:不需要知道表是否存在,在创建表的时候加上ifnotexists例:createtableifnotexistsmyTable(...),这样做的好处是,不需要知道表是否存在,只要每次都进行创建即可。因为里面有判断,如果表存在的时候,再执行这句不会发生重复创建表的情况。
第二种方法是:直接执行某个SQL语句,用try...catch来捕获数据库操作的异常。当异常表示数据库表不存在的时候,再进行处理。例:
try{
Cursorc=getWritableDatabase().query("select*frommyTable",null);
catch(Exceptione)//或者是SQLiteException.
{//添加处理代码,例如:创建表。
}
第二种的方法不如第一种好,原因是:第二种写起来比较麻烦,还有,如果有其它异常的时候,需要对异常来进行判别,并处理。
PS:
上面的E文中有一种方法是判断query的返回值,那个别想了,我在测试的时候,如果表被删除了,一到那里就崩溃,只能通过try...catch的方法。