2016-05-23 33 views
1

我不明白這些文檔,我擔心在我的數據庫中不小心丟掉了我的表格,並且如果我做錯了,會損壞原始文件。SQLITEASSETHELPER正確的升級腳本

https://github.com/jgilfelt/android-sqlite-asset-helper

在參考與值添加列。下面的代碼通過創混帳樞紐樣品

-- add a FullNames column to Employees 
ALTER TABLE "Employees" RENAME TO 'Employees_ME_TMP'; 

CREATE TABLE "Employees" 
(
    "EmployeeID" int NOT NULL, 
    "LastName" varchar(20) NOT NULL, 
    "FirstName" varchar(10) NOT NULL, 
    "FullName" varchar(150), 
    PRIMARY KEY ("EmployeeID") 
); 

INSERT INTO "Employees" 
(
    "EmployeeID", 
    "LastName", 
    "FirstName", 
    "FullName" 
) 
SELECT 
    "EmployeeID", 
    "LastName", 
    "FirstName", 
    "FirstName" || ' ' || "LastName" 
FROM 
    "Employees_ME_TMP"; 

DROP TABLE "Employees_ME_TMP"; 

如果我需要添加兩列,然後插入一堆值到那些列,這會是正確的語法提供?

-- add a FullNames column and NickName to Employees 
ALTER TABLE "Employees" RENAME TO 'Employees_ME_TMP'; 

CREATE TABLE "Employees" 
(
    "EmployeeID" int NOT NULL, 
    "LastName" varchar(20) NOT NULL, 
    "FirstName" varchar(10) NOT NULL, 
    "FullName" varchar(150), 
    "NickName" varchar(150), 
    PRIMARY KEY ("EmployeeID") 
); 

    INSERT INTO Employees (FullName, NickName) 
    VALUES ('Tyler Durden','Jack') 
    WHERE rowid = 18; 

    INSERT INTO Employees (FullName, NickName) 
    VALUES ('Donnie Darko','Jake') 
    WHERE rowid = 19; 

DROP TABLE "Employees_ME_TMP"; 
+0

INSERT添加行,而不是列。 –

+0

@CL http://www.tutorialspoint.com/sqlite/sqlite_insert_query.htm會有其他建議。但好吧,那麼我該如何解決這個問題,以便將「VALUES」插入或添加到rowid和正確的列名相應的行中? –

+0

「SQLite INSERT INTO語句用於將新數據行添加到數據庫中的表中。」 –

回答

1

documentation說:

INSERT語句......在現有的表創建一個或多個新行。

您的新表爲空,所以您實際上需要創建行,但這些行中的數據必須來自舊錶。所以,你必須使用INSERT語句的SELECT形式:

INSERT INTO Employees(EmployeeID, LastName, FirstName) 
SELECT EmployeeID, LastName, FirstName FROM Employees_ME_TMP; 

在INSERT未提及的其他列將(在這種情況下,NULL)來填充其默認值。 然後,您必須將新值放入這些列中。 更改行與UPDATE statement完成:

UPDATE Employees 
SET FullName = 'Tyler Durden', 
    NickName = 'Jack' 
WHERE EmployeeID = 18; 

UPDATE Employees 
SET FullName = 'Donnie Darko', 
    NickName = 'Jake' 
WHERE EmployeeID = 19; 
+0

你知道爲什麼有必要嗎?(ALTER TABLE「Employees」RENAME TO'Employees_ME_TMP';)? *我不能只是* **(ALTER TABLE Employees ADD COLUMN「FullName」TEXT)**,*而不是必須再次填寫整個表格*,當我只需要更新兩列時? –

+0

SQLite的ALTER TABLE是相當有限的,所以SQLiteAssetHelper顯示了在任何情況下都可以使用的機制。當ALTER TABLE工作時,您可以使用它。 –