我为我的应用创建了一个包含5列的数据库。每列只包含整数。
首先,表格为空。现在,如果我将值{1,2,3}添加到第一列(column1),我希望它看起来像这样:
但实际上,它看起来像这样:
也就是说,它在我没有添加新值的地方插入了不需要的零。
我尝试了两种不同的方法将值插入数据库。
DBAdapter db = new DBAdapter(this);
int[] sdTest = new int[] {1,2,3};
storeIDs(db, sdTest);
public void storeIDs(DBAdapter db, int[] ids)
{
db.open();
long id;
for(int i=0; i<ids.length; i++)
{
id = db.insertIDs(ids[i]);
}
db.close();
}
这个方法来自DBAdapter类:
public long insertIDs(int sd)
{
ContentValues initialValues = new ContentValues();
initialValues.put(SD, sd);
return db.insert(DATABASE_TABLE, null, initialValues);
}
(其中SD
是第一列的列名。)
DBAdapter db = new DBAdapter(this);
int[] sdTest2 = new int[] {1,2,3};
storeIDsExe(db, sdTest2);
public void storeIDsExe(DBAdapter db, int[] ids)
{
db.open();
for(int i=0; i<ids.length; i++)
{
db.insertIDsExe(ids[i]);
}
db.close();
}
这个方法来自DBAdapter类:
public void insertIDsExe(int sd)
{
db.execSQL("INSERT INTO "
+ DATABASE_TABLE
+ " (column1)"
+ " VALUES ("+sd+");");
}
两种方式都会产生相同的结果:不需要的零。
如何摆脱它们?
修改
表格的创建如下:
private static final String DATABASE_CREATE =
"CREATE TABLE IF NOT EXISTS "
+ DATABASE_TABLE
+ " (column1 int, column2 int, column3 int, column4 int, column5 int);";
答案 0 :(得分:0)
您是否尝试过使用预准备语句而不是使用原始SQL查询?尝试使用SQLiteDatabase.insert(String, String, ContentValues)
。
答案 1 :(得分:0)
你无法摆脱它们。如果要使用数据库,则表示您正在使用包含列的表,其中表的每一行在特定列中具有相同的数据类型。如果列是整数而您没有指定值,那么它将具有值0。
如果您不想这样做,请编写一个逗号分隔值的文本文件。
如果列必须为空或数字,则可以使用VARCHARS类型的列,但在进行任何计算之前,您始终需要检查空白值。
答案 2 :(得分:0)
你的5列是否可以为空? 它们的默认值是0吗?
<强>更新强>:
尝试像这样创建你的表:
private static final String DATABASE_CREATE =
"CREATE TABLE IF NOT EXISTS "
+ DATABASE_TABLE
+ " (column1 int NULL, column2 int NULL, column3 int NULL, column4 int NULL, column5 int NULL);";
(不确定它是否可行,因为我不知道SQLite语法)
或者也许:
public void insertIDsExe(int sd)
{
db.execSQL("INSERT INTO "
+ DATABASE_TABLE
+ " (column1,column2,column3,column4,column5)"
+ " VALUES ("+sd+", NULL, NULL, NULL, NULL);");
}
答案 3 :(得分:0)
您的表是否定义了列的默认值?列应具有属性 DEFAULT NULL :
修改
我刚刚使用Firefox SQLiteManager测试了内存中的sqlite数据库。有用。
CREATE TABLE IF NOT EXISTS test (column1 int NULL DEFAULT NULL,
column2 int NULL DEFAULT NULL,
column3 int NULL DEFAULT NULL,
column4 int NULL DEFAULT NULL,
column5 int NULL DEFAULT NULL);
CREATE TABLE IF NOT EXISTS test (column1 int NULL DEFAULT NULL,
column2 int NULL DEFAULT NULL,
column3 int NULL DEFAULT NULL,
column4 int NULL DEFAULT NULL,
column5 int NULL DEFAULT NULL);
然后
INSERT INTO test(column1) VALUES (4);
答案 4 :(得分:0)
一个sqlite对话框。 (3.7.4版)
sqlite> CREATE TABLE DATABASE_TABLE
...> (column1 int, column2 int, column3 int, column4 int, column5 int);
sqlite> insert into database_table (column1) values (1);
sqlite> insert into database_table (column1) values (2);
sqlite> insert into database_table (column1) values (3);
sqlite> select * from database_table;
1||||
2||||
3||||
没有零。
sqlite> select * from database_table where column2 is null;
1||||
2||||
3||||
所有这些空白实际上都是空的。这表明它不是SQLite问题。