1. 程式人生 > >android 檢測sqlite資料表中欄位(列)是否存在

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 ;
}

相關推薦

android 檢測sqlite資料中欄是否存在

一般資料庫升級時,需要檢測表中是否已存在相應欄位(列),因為列名重複會報錯。方法有很多,下面列舉2種常見的方式: 1、根據 cursor.getColumnIndex(String columnName) 的返回值判斷,如果為-1表示表中無此欄位 /** * 方法1:檢

SQL刪除資料中欄時出現【由於一個或多個物件訪問此列,ALTER TABLE DROP COLUMN *** 失敗。 】

今天做個功能,先是在程式中向資料表中新增欄位,然後再刪除該表中不需要的欄位,第一步的時候還是蠻順利的,可是第二步時就卡那裡了,刪除不了。提示出現了 當然,這個圖片是我在SQL裡去測試時截的,vs後臺刪不了其實也是這個原因。找了好多辦法來解決都沒搞定,後面知道是約束的問

MyBatis學習-----解決在"資料中欄與自己定義的屬性類的屬性欄不相同“的情況下的問題

  在平時的開發中,我們表中的欄位名和表對應實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決欄位名與實體類屬性名不相同的衝突。 一、準備演示需要使用的表和資料 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCRE

MYSQL資料庫,資料簡單操作

資料型別 整形 TINTINT 1bt SMALLINT 2bt MEDIUMINT 3bt INT 4bt BIGINT 8bt 浮點型 FLOAT(8,2) 總共8位2位小數 4bt DOUBLE 8bt 字元型 CHAR固定位數空格

SQL語句在中新增欄

ALTER TABLE — 更改表屬性 語法 ALTER TABLE table [ * ]       ADD [ COLUMN ] column type ALTER TABLE table [ * ]       ALTER [ COLUMN ] column { SET DEFAULT value

Android 的簡單資料儲存及讀取

介面: 首先將介面所有控制元件在initView()中初始化,並且在MainActivity的onCreate(Bundle savedInstanceState)方法中呼叫initView()。 實現程式碼: protected void onCreate(

vb 如何在對Access建立新欄的過程中自動新增該的預設值

搞了一下午,終於解決了,希望能幫助到他人。 '通用-宣告 Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim sql$ '連線Data.mdb資料庫 Public Sub openConn()

mysql將多個欄合併成一個欄

一:sql語句SELECT declare_type_id,support_model,project_name,CONCAT(declare_type_id,support_model,project_name) from gf_index;二:結果

查詢資料庫中欄值重複的資料

1.使用分組,例如:查tab_omin_meta_chginfo表中欄位value03重複的資料,顯示value03的值,根據value03進行分組,條件是出現的次數大於1     2.查詢結果如圖:,也就是說 10cm地溫 這些元素在 tab_omin_meta_

Oracle_不刪除資料,修改中欄型別

資料庫表名稱為:TX_Separateout 現想將TX_Separateout 中的Comcode欄位由原來的number型別修改為varchar2(20) –修改一個欄位的型別 alter tabl

ireport中 根據中欄獲得的值來判斷顯示不同資料

ireport  中沒有 if  else  寫法但 有 ?: 運算子。 如 以下 if  else 語句  if {CLASS}="0" then "中國出口" else if {CLASS

MySQL 一中欄內容是用逗號分隔的 另一含有對應資料的兩聯合查詢

有時為了資料庫簡潔,存放資料的時候,某一欄位採用逗號隔開的形式進行儲存。 一般情況這個欄位都應該具有如下幾個共性。 被分割的欄位一定是有限而且數量較少的,我們不可能在一個字串中儲存無限多個字元這個欄位所屬的表與這個欄位關聯的表,一定是一對多的關係下面舉例說明: 原表: l

mysql查詢一個中欄相同的資料

SELECT * FROM `education_student_tmp_from_crp` a WHERE (a.stu_no) IN ( SELECT stu_no FROM

MySql中欄為Null 和 空'' 有什麼區別, 分別有什麼影響?

資料準備 insert into user VALUES (6,NULL,1,0,1,NULL); insert into user VALUES (7,'',10,0,0,''); 然後我們編寫了一個簡單的小程式查詢這兩條記錄 public User

中欄為逗號分隔的數字,去資料字典中查詢返回逗號分隔字串的方法

SELECTgroup_concat(`ty`.`INFORMATION_TYPE_NAME` SEPARATOR ',')FROM(`BAS_INFORMATION_TYPE` `ty`LEFT JOIN `BAS_USER_CRAFTSMAN` `f` ON (find

mysql 批量修改中欄資料成不同的值 用一個更新另一個的方法

首先mysql更新資料的某個欄位,一般這樣寫: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 也可以這樣用in指定要更新的記錄: UPDATE mytable SET myfield = 'value

MySQL中如何用一個中的欄更新另一個中欄

1,修改1列 update student s, city c set s.city_name = c.name where s.city_code = c.code; 2,修改多個列 update a, b set a.title=b.title, a.name=b.name wh

Oracle中查詢一個中欄 個數

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

spring事務管理,基於xml配置完成事務回滾;spring中資料庫中欄名和pojo中屬性名不一致時候,實現RowMapper介面手動封裝

宣告使用JDK8,spring5.0.7, 測試說明: service 層 宣告介面進行轉賬,從A轉賬B ,然後對AB 進行更新操作,在事務中對find方法開啟 只讀許可權,無法進行更新操作,造成事務回滾進行測試事務; 主要測試方法:* void tra

Logstash 配置elasticsearch index欄中欄重複的問題

input{ file{ path => ["/tmp/data/t_url.csv"] start_position =>"beginning" } } filter{ csv{ separator =