SQLite 默认值为布尔列,未按预期工作

Mil*_*anG 2 sqlite xamarin.ios xamarin sqlite.net

我有一张SQLite包含以下实体的表:

[Table ("employee")]
public class Employees
{
    [Column ("employee_id")]
    [PrimaryKey]
    public int EmployeeId { get; set; }

    [Column ("username")]
    public string UserName { get; set; }

    [Column ("password")]
    public string Password { get; set; }

    [Column ("first_name")]
    public string FirstName { get; set; }

    [Column ("last_name")]
    public string LastName { get; set; }

    [Column ("is_wah_allowed")] //Newly added Column
    public bool IsWAHAllowed { get; set; }  
}
Run Code Online (Sandbox Code Playgroud)

当应用程序启动时,我正在创建一个表。

conn.CreateTable<Employees>();
Run Code Online (Sandbox Code Playgroud)

我想添加新的布尔列,默认值设置为 0 - false,SQLite因为它将 bool 存储为 0 或 1。

我尝试了以下方法:

情况1 :

[Column ("is_wah_allowed")] //Newly added Column
Run Code Online (Sandbox Code Playgroud)

输出:这在 SQLite 的数据库浏览器中显示 Null

案例2:

[Column ("is_wah_allowed"), Default (false)] //Newly added Column
Run Code Online (Sandbox Code Playgroud)

输出:这会在 conn.CreateTable() 处引发异常;- 无法从 bool 转换为 int。

案例3:

[Column ("is_wah_allowed"), Default (value : 0)] //Newly added Column
Run Code Online (Sandbox Code Playgroud)

输出:这会在 SQLite 的数据库浏览器中显示 False 值,而不是 0。当服务器返回数据时,我保存/更新它们,然后在更新的行中将它们显示为 0 或 1,因为服务器将其处理为整数值。

我想知道 :

情况 1:为什么它显示 Null 而不是 0 默认值?

案例2:为什么会抛出异常?

情况 3:为什么显示 False 而不是 0?

提前致谢!!

Arv*_*iya 5

booleanSQLite 中不存在。相反,您可以boolean在 SQLite 中将值作为 int 存储在数据库中。您可以使用的值是 0 表示 false,1 表示 true。当您从数据库中选择 int 时。根据0和1你可以纠正你的if else方块。

编辑1

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

SQLite 数据类型

欲了解更多信息,请访问