sqlite数字格式异常无法正常工作

时间:2014-08-14 06:06:06

标签: android sqlite

我在我的Android应用程序中使用sqlite数据库。在我的Employee表中有三个字段"emp_id","ph no","address",数据类型为整数,整数和文本。 emp_id是主键。如果我为"emp_id"输入字符串并尝试插入表格,那么它会给出数字格式异常,但是对于"不是"。如果我输入字符串值,那么它不会抛出异常,它会接受它。

这是我的代码:

}else{
    sqlcon.open();
    try {
        sqlcon.insert(DisaplayTables_list.getTableNameFromListView, storeEditextText);
    } catch (NumberFormatException e) {
        Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
        //Toast.makeText(getApplicationContext(),"column value already exists",Toast.LENGTH_LONG).show();
    }

    System.out.println("size of storeEdittext=" + storeEditextText.size());
    System.out.println("size of Edit Texts: " + allEds.size());

}

Intent i = new Intent(getApplicationContext(), DisplayTable_Grid.class);
startActivity(i);
sqlcon.close();

}

2 个答案:

答案 0 :(得分:0)

SQLite允许我将一个字符串插入一个整数类型的数据库列中!

这是一个功能,而不是一个bug。 SQLite使用动态类型。它不强制实施数据类型约束。任何类型的数据都可以(通常)插入任何列。您可以将任意长度字符串放入整数列,布尔列中的浮点数或字符列中的日期。您在CREATE TABLE命令中为列分配的数据类型不会限制可以将哪些数据放入该列。每列都能容纳一个任意长度的字符串。 (有一个例外:INTEGER PRIMARY KEY类型的列只能保存64位有符号整数。如果尝试将除整数之外的任何内容放入INTEGER PRIMARY KEY列,将导致错误。)

但SQLite确实使用声明的列类型作为提示,您更喜欢该格式的值。因此,例如,如果列的类型为INTEGER,并且您尝试将字符串插入该列,则SQLite将尝试将该字符串转换为整数。如果可以的话,它会插入整数。如果没有,则插入字符串。此功能称为类型亲和力。

Click here for refference

希望你清楚所有的疑惑,快乐编码:)

答案 1 :(得分:0)

这是一个功能,而不是一个bug。 SQLite使用动态类型。它不强制实施数据类型约束。任何类型的数据都可以(通常)插入任何列。您可以将任意长度字符串放入整数列,布尔列中的浮点数或字符列中的日期。您在CREATE TABLE命令中为列分配的数据类型不会限制可以将哪些数据放入该列。每列都能容纳一个任意长度的字符串。 (有一个例外:INTEGER PRIMARY KEY类型的列只能保存64位有符号整数。如果尝试将除整数之外的任何内容放入INTEGER PRIMARY KEY列,将导致错误。)

但SQLite确实使用声明的列类型作为提示,您更喜欢该格式的值。因此,例如,如果列的类型为INTEGER,并且您尝试将字符串插入该列,则SQLite将尝试将该字符串转换为整数。如果可以的话,它会插入整数。如果没有,则插入字符串。此功能称为类型亲和力。