Android SQLite插入查询将0修剪为插入字符串的第一个字符

Android SQLite插入查询将0修剪为插入字符串的第一个字符,android,database,sqlite,android-studio,android-sqlite,Android,Database,Sqlite,Android Studio,Android Sqlite,我有一个insert查询,它将联系人添加到数据库中。但是,我在插入第一个字符为“0”的字符串时遇到问题 例如,我输入这个:09127400049 它现在将另存为: 9127400049 public void addEmergencyContacts(String name, long number, String email, String relationship) { ContentValues cv = new ContentValues(); cv.put("NAME"

我有一个insert查询,它将联系人添加到数据库中。但是,我在插入第一个字符为“0”的字符串时遇到问题

例如,我输入这个:09127400049
它现在将另存为: 9127400049

public void addEmergencyContacts(String name, long number, String email, String relationship) {
    ContentValues cv = new ContentValues();
    cv.put("NAME", name);
    cv.put("NUMBER", number);
    cv.put("EMAIL", email);
    cv.put("RELATIONSHIP", relationship);

    this.getWritableDatabase().insertOrThrow("ELSA_EMERGENCY_CONTACTS", "", cv);
}
以下是我如何插入联系人

controller.addEmergencyContacts(emergencyContactET.getText().toString(), Long.parseLong(emergencyNumberET.getText().toString()), emergencyEmailET.getText().toString(), relationship);

您是否知道任何解决方案或建议要插入0字符,您需要执行以下操作:-

  • 定义列类型为文本的编号列(如果尚未定义为文本类型)
  • 更改AddMergencyContacts方法的签名,使2nd参数为字符串
    • i、 e.将
      public void addEmergencyContacts(字符串名称、长数字、字符串电子邮件、字符串关系){……
      更改为
      public void addEmergencyContacts(字符串名称、字符串编号、字符串电子邮件、字符串关系){……
  • 将每次调用更改为
    addMergencyContacts
    ,以将第二个参数的值作为字符串传递,确保前导0包含在该字符串中
  • 或者
    • 删除应用程序的数据或
    • 卸载应用程序
  • 重新运行应用程序

理由是为了灵活高效地使用SQLite:-

  • 具有灵活的列类型
  • 允许大多数列存储任何类型的数据
  • 使用尝试以尽可能少的字节存储数据的规则

这里有一个详细说明因素的链接。

您正在将电话号码解析为
long
并发送它。一旦打包,电话号码将不是
0009123
,而是
9123
,除非您在
cv
变量中使用不同的格式。请在此行上设置断点<代码>cv.put(“编号”,编号);并检查值
number
有什么办法插入0个字符吗?请添加创建表查询。正如Nikola告诉您的,您在插入电话号码之前就一直在解析电话号码,可能还有表结构。您必须将其作为字符串来处理,因为整个电话号码都应该存储和操纵ted为字符串…而不是那么长…因此,请更改您的数据库和代码,以将电话号码表示为字符串,而不是那么长)。