当前位置: 代码迷 >> SQL >> android 检测sqlite数据表中字段(列)是不是存在
  详细解决方案

android 检测sqlite数据表中字段(列)是不是存在

热度:76   发布时间:2016-05-05 11:31:59.0
android 检测sqlite数据表中字段(列)是否存在

一般数据库升级时,需要检测表中是否已存在相应字段(列),因为列名重复会报错。方法有很多,下面列举2种常见的方式:

1、根据 cursor.getColumnIndex(String columnName) 的返回值判断,如果为-1表示表中无此字段

/*** 方法1:检查某表列是否存在* @param db* @param tableName 表名* @param columnName 列名* @return*/private boolean checkColumnExist1(SQLiteDatabase db, String tableName        , String columnName) {    boolean result = false ;    Cursor cursor = null ;    try{        //查询一行        cursor = db.rawQuery( "SELECT * FROM " + tableName + " LIMIT 0"            , null );        result = cursor != null && cursor.getColumnIndex(columnName) != -1 ;    }catch (Exception e){         Log.e(TAG,"checkColumnExists1..." + e.getMessage()) ;    }finally{        if(null != cursor && !cursor.isClosed()){            cursor.close() ;        }    }    return result ;}

?

2、通过查询sqlite的系统表?sqlite_master?来查找相应表里是否存在该字段,稍微换下语句也可以查找表是否存在

?

/*** 方法2:检查表中某列是否存在* @param db* @param tableName 表名* @param columnName 列名* @return*/private boolean checkColumnExists2(SQLiteDatabase db, String tableName       , String columnName) {    boolean result = false ;    Cursor cursor = null ;    try{        cursor = db.rawQuery( "select * from sqlite_master where name = ? and sql like ?"           , new String[]{tableName , "%" + columnName + "%"} );        result = null != cursor && cursor.moveToFirst() ;    }catch (Exception e){        Log.e(TAG,"checkColumnExists2..." + e.getMessage()) ;    }finally{        if(null != cursor && !cursor.isClosed()){            cursor.close() ;        }    }    return result ;}

?

  相关解决方案