sqlite 查询表和字段是否存在

原文摘自 http://www.tuicool.com/articles/jmmMnu

一般数据库升级时,需要检测表中是否已存在相应字段(列),因为列名重复会报错。方法有很多,下面列举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 ;
}

我用的方法2,然后用alter改了表结构后,一样可以查出来 alter table yuhuolixian add aaa integer nullselect * from sqlite_master where name = ‘yuhuolixian‘ and sql like ‘%aaa%‘
时间: 2024-07-31 09:34:48

sqlite 查询表和字段是否存在的相关文章

sqlserver 查询表结构,字段,类型,长度,描述信息通通有

select sys.columns.name as 字段名, sys.types.name as 字段类型, sys.columns.max_length as 长度, sys.columns.is_nullable as 是否可空, (select count(*) from sys.identity_columns where sys.identity_columns.object_id = sys.columns.object_id and sys.columns.column_id =

查询表和字段有没有注释

原博主链接:https://blog.csdn.net/qq_33966061/article/details/85249408 1 --定义一个数组类型msg_array,元素类型是varchar2,元素的长度不能超过30 2 create or replace type msg_array is table of varchar2(30); 3 --定义一个存储过程,查询表和字段是否有注释,参数tableNames的类型为上面定义的类型 4 create or replace procedu

python sqlite中通过字段名获取查询结果

在连sqlite数据库时,用fetchall()查询结果,是用row[0],row[1]这样的方式来打印每列的结果 但是我想用row[“字段名”]方式查询怎么办? import sqlite3 con = sqlite3.connect("mydb") con.row_factory = sqlite3.Row cur = con.cursor() cur.execute("select name_last, age from people") for row in

Sql Server查询表的字段和注释

SELECT 表名 = d.name, 表说明 = case when a.colorder=1 then isnull(f.value,'') else '' end, 字段序号 = a.colorder, 字段名 = a.name, 标识 = case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end, 主键 = case when exists(SELECT 1 FROM sysobjects wher

查询表中字段的信息

使用select语句查询system用户下的logmnr_parameter$表中的字段信息. 实现思路: 通过数据字典dba_tab_columns查询该表的字段的信息. 查询语句如下: desc dba_tab_columns; select columns_id,columns_name from dba_tab_columns where table_name='LOGMNR_PARAMETER$: 注:通过第一条语句可以看到该表在该数据字典中,另外,where子句中需注意表的名称需要大

sqlserver中查询表,查询表的字段方式

1.获取所有数据库名: SELECT Name FROM Master..SysDatabases ORDER BY Name 2.获取所有表名: SELECT Name FROM DatabaseName..SysObjects Where XType='U' ORDER BY Name XType='U':表示所有用户表; XType='S':表示所有系统表; 3.获取所有字段名: SELECT Name FROM SysColumns WHERE id=Object_Id('TableNa

查询表、字段、类型、是否主键、长度、小数位、是否允许空、默认值等详细查询

小果 SELECT (case when a.colorder=1 then d.name else '' end) as 表名,--如果表名相同就返回空 a.colorder as 字段序号, a.name as 字段名, (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) as 标识, (case when (SELECT count(*) FROM sysobjects--查询主键 WHER

delphi显示Sqlite的Text字段

1 procedure Mainform.SetField(Sender: TField; var Text: string; 2 DisplayText: Boolean); 3 begin 4 Text := Sender.AsString ; 5 end; 6 7 procedure TClientform.UniQuery1AfterOpen(DataSet: TDataSet); 8 var 9 i :Integer ; 10 begin 11 with DataSet do 12 b

SQLite中Integer字段才支持自动增加,设置为主键可自增

CREATE TABLE gym_chatuser( id  Integer NOT NULL,       uid     text , name      text , img      text , account      text , pinyin         text , loginId       text, CONSTRAINT PK_userList PRIMARY KEY (id) );