在sqlite中的表中插入新的列?
我有一个列name
, qty
, rate
。 现在我需要在name
和qty
列之间添加一个新列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 temptable
或RENAME table
或CREATE
,那么如果处理CREATE temptable
,数据丢失的可能性很高,例如在电池交换时发生事务用完了