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



我有一个带有以下实体的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; }  
}

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

conn.CreateTable<Employees>();

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

我尝试了以下方法:

情况1:

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

输出:这在SQLite 的DB浏览器中显示Null

情况2:

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

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

情况3:

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

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

我想知道:

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

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

案例3:为什么它显示False而不是0?

提前感谢!!

SQLite中不存在boolean。相反,您将boolean值作为int存储在数据库中的SQLite中。可以使用的值为0表示false,1表示true。当您从数据库中选择int时。根据0&1您可以右键单击ifelse块。

编辑1

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

SQLite数据类型

欲了解更多信息,请访问此

最新更新