【问题标题】:How to Add a Boolean Column in Android SQlite如何在 Android SQlite 中添加布尔列
【发布时间】:2014-07-07 07:09:13
【问题描述】:

我使用以下行为我的ContentProvider 创建了一个表:

static final String CREATE_DB_TABLE = 
  " CREATE TABLE " + CONTACTS_TABLE_NAME +
  " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
  " pid TEXT NOT NULL, " +
  " name TEXT NOT NULL,"+
  "number TEXT NOT NULL);";

它有 4 列。现在我想添加一个布尔值为真/假的列。如果我必须添加一个名为 "status"boolean 列,如何添加附加/更改此语句。

【问题讨论】:

  • SQLite 没有单独的布尔存储类。相反,布尔值存储为整数 0(假)和 1(真)。检查这个Post
  • 你的意思是说像"status INTEGER NOT NULL,"???
  • 非常感谢您的快速帮助。
  • 请在这篇文章中掠夺一下,,,我在过去 3 天等待答案,我什至没有收到一条评论...stackoverflow.com/questions/24733444/…

标签: android sqlite android-sqlite


【解决方案1】:

你可以这样使用:

创建你的表:

static final String CREATE_DB_TABLE = 
    "CREATE TABLE " + CONTACTS_TABLE_NAME " + 
    " (_id INTEGER PRIMARY KEY AUTOINCREMENT," + 
    "..." + " flag INTEGER DEFAULT 0)";

检索您的值:

Boolean flag = (cursor.getInt(cursor.getColumnIndex("flag")) == 1);

【讨论】:

  • 请在这篇文章中掠夺一下,,,我在过去 3 天等待答案,我什至没有收到一条评论...stackoverflow.com/questions/24733444/…
  • 不幸的是,我对CursorJoinerLoaderManager 一无所知,因为我不使用它们。我的建议是……你不能直接在一个查询中JOIN(或者你想做一个UNION?)这两个表吗?
  • CursorJoiner 实际上连接了两个游标。但是,我需要通过 LoaderManager 调用它,因为它会自动查询 ContentProvider。我需要在运行时反映更改,我不能一次又一次地查询。
  • 谢谢,非常准确的解决方案
  • 谢谢,这个方法还会检查任何数字,是奇数还是偶数
【解决方案2】:

正如 M D 所说,

SQLite 没有单独的布尔存储类。反而, 布尔值存储为整数 0(假)和 1(真)。

使用以下 ALTER 语句 -

ALTER TABLE CREATE_DB_TABLE ADD status boolean NOT NULL default 0;

然后你可以使用Cursor获取所需的值,然后转换为实际的布尔值-

flag=cursor.getString(0).equals("1")

您可以使用此标志在用户屏幕上显示。

参考:http://www.sqlite.org/datatype3.html

【讨论】:

  • 好吧,我可能会改用return c.getShort(index) == 1;
【解决方案3】:
public enum Status{
        TRUE,FALSE;
}
static final String CREATE_DB_TABLE = 
  " CREATE TABLE " + CONTACTS_TABLE_NAME +
  " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +......
  " booleanColumn INTEGER DEFAULT 0);";

//插入时

将 Status.TRUE.ordinal() 值传递给数据库并

//在检索时

与状态的序数值交叉检查

【讨论】:

    【解决方案4】:

    不幸的是 android sqlite 不支持布尔类型,你应该使用 Integer 来代替它

    【讨论】:

      【解决方案5】:

      Sqlite 不提供任何类来存储布尔值。

      您可以将0 用于false,将1 用于true。然后,您必须在从数据库中检索这些值后对其进行转换。

      【讨论】:

        猜你喜欢
        • 2021-12-04
        • 2020-03-12
        • 2019-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-08
        • 2011-02-06
        • 1970-01-01
        相关资源
        最近更新 更多