在sqlite中的表中插入新的列?

我有一个列nameqtyrate 。 现在我需要在nameqty列之间添加一个新列COLNew 。 如何在两列之间添加新列?

你有两个select。 首先,您可以简单地添加一个新的列:

 ALTER TABLE {tableName} ADD COLUMN COLNew {type}; 

其次,也更复杂,但实际上把列放在你想要的地方,就是重命名表:

 ALTER TABLE {tableName} RENAME TO TempOldTable; 

然后创build缺less列的新表:

 CREATE TABLE {tableName} (name TEXT, COLNew {type} DEFAULT {defaultValue}, qty INTEGER, rate REAL); 

并用旧数据填充它:

 INSERT INTO {tableName} (name, qty, rate) SELECT name, qty, rate FROM TempOldTable; 

然后删除旧的表格:

 DROP TABLE TempOldTable; 

我更喜欢第二个选项,因为它可以让你完全重命名所有需要的东西。

您不要在SQL中的其他列之间添加列,只需添加它们即可。 他们放在哪里完全取决于数据库pipe理系统。 确保列按正确顺序出现的正确位置是select它们的时间。

换句话说,如果你想按顺序{name,colnew,qty,rate} ,你可以使用:

 select name, colnew, qty, rate from ... 

使用SQLite,你需要使用alter table ,一个例子是:

 alter table mytable add column colnew char(50) 

SQLite具有有限的ALTER TABLE支持,您可以使用它将列添加到表的末尾或更改表的名称。

如果您想在表格结构中进行更复杂的更改,则必须重新创build表格。 您可以将现有数据保存到临时表中,删除旧表,创build新表,然后将数据从临时表中复制回来。

例如,假设您有一个名为“t1”的表,其中列名称为“a”和“c”,并且您希望从此表中插入列“b”。 以下步骤说明了如何做到这一点:

 BEGIN TRANSACTION; CREATE TEMPORARY TABLE t1_backup(a,c); INSERT INTO t1_backup SELECT a,c FROM t1; DROP TABLE t1; CREATE TABLE t1(a,b, c); INSERT INTO t1 SELECT a,c FROM t1_backup; DROP TABLE t1_backup; COMMIT; 

现在你已经准备好插入你的新数据了:

 UPDATE t1 SET b='blah' WHERE a='key' 

您可以添加新的列与查询

 ALTER TABLE TableName ADD COLUMN COLNew CHAR(25) 

但是它会在最后添加,而不是在现有的列之间。

 ALTER TABLE {tableName} ADD COLUMN COLNew {type}; UPDATE {tableName} SET COLNew = {base on {type} pass value here}; 

需要此更新来处理空值,根据需要input默认值。 和你一样,你需要调用SELECT查询,你将得到列的顺序,正如paxdiablo已经说过的那样:

 SELECT name, colnew, qty, rate FROM{tablename} 

在我看来,你的列名从光标获取值:

 private static final String ColNew="ColNew"; String val=cursor.getString(cursor.getColumnIndex(ColNew)); 

所以如果索引改变你的应用程序将不会面临任何问题。

这是一种安全的方式,否则,如果您使用的是CREATE temptableRENAME tableCREATE ,那么如果处理CREATE temptable ,数据丢失的可能性很高,例如在电池交换时发生事务用完了