SQLite默认值为boolean列,无法按预期工作

时间:2018-07-30 14:59:17

标签: sqlite xamarin xamarin.ios 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; }  
}

App启动时,我正在创建一个表。

conn.CreateTable<Employees>();

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

我尝试了以下方法:

案例1:

[Column ("is_wah_allowed")] //Newly added Column

输出:这显示SQLite进入数据库浏览器为空

案例2:

[Column ("is_wah_allowed"), Default (false)] //Newly added Column

输出:这会在conn.CreateTable()处引发异常。 -无法从布尔转换为整数。

案例3:

[Column ("is_wah_allowed"), Default (value : 0)] //Newly added Column

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

我想知道:

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

案例2:为什么会引发异常?

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

提前谢谢!

1 个答案:

答案 0 :(得分:0)

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

编辑1

布尔数据类型 SQLite没有单独的布尔存储类。取而代之的是,布尔值存储为整数0(false)和1(true)。

SQLite data types

有关更多信息,请访问this