当前位置: 首页 > 知识库问答 >
问题:

检查SQLite中是否存在列

司寇瑾瑜
2023-03-14

我需要检查一列是否存在,如果不存在,请添加它。根据我的研究,sqlite似乎不支持是否应该使用语句和case语句。

以下是我目前掌握的情况:

SELECT CASE WHEN exists(select * from qaqc.columns where Name = "arg" and Object_ID = Object_ID("QAQC_Tasks")) = 0 THEN ALTER TABLE QAQC_Tasks ADD arg INT DEFAULT(0);

但我得到了一个错误:接近“ALTER”:语法错误。

有什么想法吗?

共有3个答案

岳锦
2023-03-14
// This method will check if column exists in your table
public boolean isFieldExist(String tableName, String fieldName)
{
     boolean isExist = false;
     SQLiteDatabase db = this.getWritableDatabase();
     Cursor res = db.rawQuery("PRAGMA table_info("+tableName+")",null);
    res.moveToFirst();
    do {
        String currentColumn = res.getString(1);
        if (currentColumn.equals(fieldName)) {
            isExist = true;
        }
    } while (res.moveToNext());
     return isExist;
}
汤承德
2023-03-14

虽然这是一个老问题,我发现在PRAGMA函数一个更简单的解决方案:

SELECT COUNT(*) AS CNTREC FROM pragma_table_info('tablename') WHERE name='column_name'

如果结果大于零,则该列存在。简单的一行查询

诀窍是使用

pragma_table_info('tablename')

而不是

PRAGMA table_info(tablename)

编辑:请注意,正如PRAGMA函数中报告的那样:

此功能是实验性的,可能会更改。如果PRAGMAs功能的表值函数得到正式支持,则将提供进一步的文档。

PRAGMA功能的表值函数是在SQLite版本3.16.0 (2017-01-02)中添加的。以前版本的SQLite不能使用此功能。

卜弘文
2023-03-14

不能将ALTER TABLE与大小写一起使用

您正在查找表的列名::-

PRAGMA table_info(table-name);

在PRAGMA上查看此教程

此pragma为命名表中的每一列返回一行。结果集中的列包括列名、数据类型、列是否可以为NULL以及列的默认值。对于不属于主键的列,结果集中的“pk”列为零,并且是属于主键的列的主键中列的索引。

 类似资料:
  • 问题内容: 我有一个字符串数组,在插入它们之前需要检查表中是否存在这些字符串,以避免重复。什么是SQL查询,如何替换以下值?:) 我的产品型号: 表格名称: product_pics 数据库名称: product_db 我了解此声明将起作用: 如何正确格式化此格式,以使该方法在产品存在或不存在时返回? 问题答案: 只是喜欢

  • 问题内容: 我的游标带有查询语句,如下所示: 我想检查组件的存在:名称并返回python变量。我怎么做? 问题答案: 由于s是唯一的,因此与我最初使用的建议相比,我真的更喜欢您(OP的)使用方法或Alex Martelli的使用方法。 将结果(通常是多行数据)包装在一个列表中。由于s是唯一的,因此返回列表中只有一个元组的列表(例如,或为空列表。如果您想知道,则使用要求您浏览列表和元组以到达。 在这

  • 问题内容: 我有一个嵌入了数据库的桌面应用程序。当我执行程序时,我需要检查特定的表是否存在,如果不存在则创建它。 给我的数据库一个名为conn的Connection对象,我该如何检查呢? 问题答案: 您可以使用可用的元数据: 有关更多详细信息,请参见此处。还要注意JavaDoc中的注意事项。

  • 问题内容: 我正在尝试检查$ _POST是否存在,如果存在,则在另一个字符串中打印它,如果不存在,则根本不打印。 像这样的东西: 任何帮助将是巨大的! 问题答案:

  • 我需要验证表中是否已经存在列。我的类扩展了CustomTaskChange,因此我的方法接收一个数据库对象作为参数。我可以通过ResultSetObject进行我想要的验证吗?

  • 问题内容: 如何检查扫描仪中写入的值是否存在? 问题答案: 只需使用ArrayList.contains(desiredElement)即可。例如,如果您要从示例中查找conta1帐户,则可以使用以下方法: 编辑: 请注意,为了使其正常工作,您将需要适当地重写equals()和hashCode()方法。如果使用的是Eclipse IDE,则可以通过首先打开对象的源文件并选择来生成这些方法。