2013-02-20 71 views
0

我正在讀SQL book和筆者使用SQLITE3,這是真棒,因爲沒有一個服務器與混亂。無論如何,作者在書中說,要輸入sqlite3 -echo something.db < some.sql這個問題對於終端來說什麼都沒有迴應,甚至沒有從'<'重定向命令創建的數據庫。sqlite3的回聲和「<」管道命令無法正常運行

有誰知道是怎麼回事......這件事?

你的朋友,

user2085446

回答

0

其實,你顯示命令是建立從SQL轉儲一個新的數據庫的正確方法。

能否請您出示的sql文件的內容(cat some.sql)?我可以重現所描述的行爲的唯一方法是通過給sqlite提供一個空的sql文件。

試試這個命令,看看你是否能得到同樣的結果:

$ cat <<EOF > test.sql 
> create table test1 (f1, f2, f3); 
> insert into test1(f1, f2, f3) values ("foo", "bar", "baz"); 
> EOF 
$ sqlite3 -echo test.db < test.sql 
create table test1 (f1, f2, f3); 
insert into test1(f1, f2, f3) values ("foo", "bar", "baz"); 
$ file test.db 
test.db: SQLite 3.x database 
+0

嗨。我可以將SQL轉儲爲.txt或其他東西,否則它看起來像瘋狂的字節碼。讓我在這一分鐘上工作。我現在也要試試你的bash-foo! :D – 2013-02-20 06:08:17

+0

我能夠獲得相同的結果!太棒了。 – 2013-02-20 06:11:04

+0

請找到我的SQL轉儲:'PRAGMA foreign_keys = OFF; BEGIN TRANSACTION; CREATE TABLE person(id整數主鍵,名字文本,姓氏文本,年齡整數); INSERT INTO「person」VALUES(0,'beta','bill',59); CREATE TABLE寵物(ID整數主鍵,名稱文本,品種文本,年齡整數,死亡整數); INSERT INTO「pet」VALUES(0,'t.rex','dinosaur',23,0); CREATE TABLE person_pet(person_id integer,pet_id integer); INSERT INTO「person_pet」VALUES(0,0); COMMIT;' – 2013-02-20 06:22:32

0

something.db是現有的數據庫。 < some.sql表示它從該文件中選擇數據並將其寫入sqlite控制檯。所以這兩個文件都必須存在。

something.db必須是一個有效的sqlite3升數據庫文件(或空或不存在的文件); some.sql必須是包含您的命令的文本文件。

-echo PARAMS指定它必須執行之前打印的命令。

+0

這讓我想起很多事情。感謝您的答覆。有沒有辦法創建一個空的數據庫.db文件,然後將現有的.sql文件加載到它?因爲如果我創建一個新的數據庫,我必須指定一個新的表和東西,或者當我退出sqlite3時它就會消失... – 2013-02-20 05:49:19

+0

@user如果database.db存在,那麼some.sql中的查詢將只編輯它。 – n1xx1 2013-02-20 05:50:52

+0

我需要爲database.db創建表來加載一個.sql文件到它嗎? – 2013-02-20 06:06:20

0

根據您的意見和你的終端屏幕截圖,我得到的印象是你的「some.sql」文件可能在錯誤的編碼和/或開始與BOM混淆sqlite。

可以使用file命令查找出來,如果這是問題的使用iconvrecode或你喜歡的文本編輯器將文件轉換成你的終端預計,編碼,和正確的行結束符(\n又名「LF 「在Linux中,\r\n又名Windows中的」CRLF「)。