【问题标题】:android SQLite not respecting "not null" constraintandroid SQLite不尊重“非空”约束
【发布时间】:2012-01-23 03:32:41
【问题描述】:

我正在使用一个简单的数据库。它有三列。 _id(整数主键自增)、jobnumber(文本唯一非空)和jobpart(文本非空)。

我正在使用带有两个 EditText 小部件的对话框来获取输入,并在按下按钮时将其添加到数据库中。

当我输入工作编号但将工作部分留空时,我希望不会添加记录。但是,它正在被添加,我得到一个空白的工作部分。我正在使用“插入”。看,我想也许我需要使用“insertWithOnConflict”,但这似乎没有什么不同,同样的事情发生了。

我的下一个想法可能是一个空字符串不算作空值,所以我尝试了以下方法:

if (jobpart == "") {
    jobpart1 = null;
}else{
    jobpart1 = jobpart;
}

同样的事情发生了,数据库甚至没有打嗝并放入一个空槽。

所以我开始查看 SQL 文档。我想知道是否需要将数据库设置为严格模式,因为可能正在使用隐式默认值?虽然我发现该部分与服务器有关,但我不确定它是否适用于此,如果适用,我将如何以及何时执行。 (在创建数据库时?在数据库打开时?)。

任何指针表示赞赏。

【问题讨论】:

  • 你能贴出你用来插入的代码吗?

标签: android sqlite


【解决方案1】:

当您比较字符串时,您需要使用equals() 方法,而不是==,因为String 是一个对象,所以== 只是比较指针。

即你想要:

if (jobpart.equals("")) {

【讨论】:

  • Doh。我从很久以前的课上就知道了。进行了建议的更改,现在一切正常。总结一下并将其与我的基本问题/问题联系起来......空字符串 not 等同于 null,因此期望 SQL 命令由于空行而失败是行不通的。感谢您的帮助!
【解决方案2】:

试试这个

if (jobpart.matches("")) {
jobpart1 = null;
}else{
jobpart1 = jobpart;
}

或者你可以确保他们在编辑文本中输入了一些内容

【讨论】:

  • 我可能最终会确保他们在我完成之前输入一些内容,但目前它只是简单的框架,所以我将从简单地将空字符串更改为无效的。感谢您的帮助!
猜你喜欢
  • 2021-10-26
  • 1970-01-01
  • 2020-12-08
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多