我在我的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();
}
答案 0 :(得分:0)
SQLite允许我将一个字符串插入一个整数类型的数据库列中!
这是一个功能,而不是一个bug。 SQLite使用动态类型。它不强制实施数据类型约束。任何类型的数据都可以(通常)插入任何列。您可以将任意长度字符串放入整数列,布尔列中的浮点数或字符列中的日期。您在CREATE TABLE命令中为列分配的数据类型不会限制可以将哪些数据放入该列。每列都能容纳一个任意长度的字符串。 (有一个例外:INTEGER PRIMARY KEY类型的列只能保存64位有符号整数。如果尝试将除整数之外的任何内容放入INTEGER PRIMARY KEY列,将导致错误。)
但SQLite确实使用声明的列类型作为提示,您更喜欢该格式的值。因此,例如,如果列的类型为INTEGER,并且您尝试将字符串插入该列,则SQLite将尝试将该字符串转换为整数。如果可以的话,它会插入整数。如果没有,则插入字符串。此功能称为类型亲和力。
希望你清楚所有的疑惑,快乐编码:)
答案 1 :(得分:0)
这是一个功能,而不是一个bug。 SQLite使用动态类型。它不强制实施数据类型约束。任何类型的数据都可以(通常)插入任何列。您可以将任意长度字符串放入整数列,布尔列中的浮点数或字符列中的日期。您在CREATE TABLE命令中为列分配的数据类型不会限制可以将哪些数据放入该列。每列都能容纳一个任意长度的字符串。 (有一个例外:INTEGER PRIMARY KEY类型的列只能保存64位有符号整数。如果尝试将除整数之外的任何内容放入INTEGER PRIMARY KEY列,将导致错误。)
但SQLite确实使用声明的列类型作为提示,您更喜欢该格式的值。因此,例如,如果列的类型为INTEGER,并且您尝试将字符串插入该列,则SQLite将尝试将该字符串转换为整数。如果可以的话,它会插入整数。如果没有,则插入字符串。此功能称为类型亲和力。