`

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数据库管理软件

    SQLite是一款轻量级的数据库管理系统,它被广泛应用于Android应用程序中,因为它不需要独立的服务进程,而是内嵌在应用中,提供了高效、可靠的本地数据存储功能。"android SQLite数据库管理软件"是一个专为Android...

    Android数据库升级不丢失数据解决方案 OrmLite

    在Android应用开发中,随着应用的迭代更新,数据库版本也需要随之升级以添加新的表或修改已有结构。然而,数据库升级过程中如何确保用户数据不丢失是一个关键问题。Ormlite是一款轻量级的Java ORM(对象关系映射)库...

    基于Android中原生SDK操作SQLite的封装,大大简化了实体对象与本地数据库间的交互操作,提升App的开发效率.zip

    该库主要包括如下几个要点根据实体对象自动建表、新增字段(SQLite不支持删除字段列)支持注解配置表名、字段名、字段默认值、主键是否自增长以及哪些字段不作为数据表中的映射字段直接映射实体对象到SQLite数据库,...

    Android SQLite数据库操作demo

    下面将详细探讨Android中SQLite数据库的基本操作,包括创建数据库、创建表、插入数据、查询数据以及更新和删除数据。 1. **创建数据库** 在Android中,SQLite数据库通常在`onCreate()`方法中通过SQLiteOpenHelper...

    Android sqlite 便笺

    4. **数据加载策略**: 当用户停止滑动时,应用会检测到这个停顿,然后从SQLite数据库中获取更多的数据,填充到GridView中。这种“按需加载”的策略有效避免了初次加载时的延迟,也减少了不必要的网络或数据库操作,...

    android greenDao实现数据存储和增删改查

    在Android应用开发中,数据持久化是至关重要的一个环节,GreenDao是一个高效的对象关系映射(ORM)框架,专门用于Android平台,它使得在Android应用中操作SQLite数据库变得更加简单。本篇文章将深入探讨如何利用...

    Android DBflow数据库数据操作

    在Android开发中,数据库管理是一项关键任务,它涉及数据的存储、检索和更新。DBFlow是一个高效的、流行的Android ORM(对象关系映射)框架,它简化了SQLite数据库的使用,提供了强大的API和灵活的数据操作方式。本...

    AndroidSQLite详解

    当向数据库中插入一个值时,SQLite 会自动检测该值的数据类型。如果类型与列定义不匹配,SQLite 将尝试进行类型转换;若无法转换,则保持原样。特别地,对于 `INTEGER PRIMARY KEY` 列,其他类型的值将无法插入,会...

    SQLite升级

    在Android应用开发中,SQLite是一种常用的轻量级数据库系统,用于存储和管理应用程序的数据。当APP需要升级时,处理SQLite数据库的变化是一项关键任务。本文将深入探讨如何在APP升级过程中正确地管理和升级SQLite...

    SQLite Expert.zip

    SQLite是Android系统默认的轻量级关系型数据库,它支持多种数据库操作,如创建表、查询数据、更新记录、删除记录等。这款工具提供了一个直观的界面,使得数据库管理工作变得更加便捷。 在Android应用开发中,SQLite...

    android注册登录小Demo

    本文将基于一个名为"MyLoginDemo"的小型项目,深入解析Android应用中的用户注册与登录功能的实现,以及数据在SQLite数据库中的存储。 一、注册功能的实现 1. UI设计:首先,我们需要创建一个包含用户名(Username...

    simple-android,用于记录血压测量的android应用程序.zip

    开发者可以创建数据表,定义字段,然后通过SQL语句进行数据操作。每次血压测量后,新的记录会被添加到数据库中,用户可以在任何时候查看历史记录。 考虑到数据的安全性,开发者可能会实现数据备份与恢复功能,利用...

    android合并重复联系人功能

    在Android中,联系人信息存储在SQLite数据库中,主要分布在`ContactsContract`表中,如`Data`、`RawContacts`和`Contacts`等。这些表之间的关系复杂,我们需要通过查询来找出可能的重复联系人。例如,我们可以根据...

    采用mvp实现;sqlite结合ormlite,实现本地数据库结构的自动升级;

    在Android应用开发中,数据持久化是一个非常重要的环节,SQLite作为一个轻量级的数据库,被广泛用于存储应用程序的数据。ORM(Object-Relational Mapping)框架则简化了对象与数据库之间的交互,使得开发者可以更加...

    Android应用源码结合数据库进行摇一摇的实例.zip

    在本实例中,我们主要探讨的是如何在Android应用中实现"摇一摇"功能,并结合数据库来处理摇动事件产生的数据交互。这个压缩包提供的源码是一个完整的Android项目,可以帮助开发者深入理解Android传感器API和SQLite...

    Android实现记事本,简易词典,自动登陆,电话本功能.zip

    记事本功能的实现可能基于SQLite数据库,创建一个笔记表,包含笔记标题、内容、创建日期等字段。用户可以创建、编辑、删除和查看笔记。Android的SQLiteOpenHelper类可以帮助管理数据库的版本控制和生命周期,而...

    android 实时监听读取微信最新消息

    根据描述,对于不同版本的微信,资源ID可能会变化,所以可能需要利用反编译工具(如Apktool)查看不同版本微信的资源文件,找到对应的消息表和字段。 4. **DDMS与HierarchyViewer**:DDMS(Dalvik Debug Monitor ...

    自定义表格自动刷新数据.zip

    这可能是一个简单的JavaBean,包含了所有列所需的数据字段。 3. **数据监听器(Data Listener)**:为了实现数据自动刷新,我们需要添加一个监听器,当数据源发生变化时,触发界面的刷新。这可以通过在Adapter中...

    Android 快捷查询源码.rar

    总之,"Android 快捷查询源码"这个压缩包中包含了Android应用开发中的多个关键知识点,包括UI设计、数据查询与存储、数据展示、网络请求以及性能优化。通过深入学习和分析这些源码,开发者可以提升自己的Android编程...

Global site tag (gtag.js) - Google Analytics