0

我正在阅读一本 SQL 书籍,作者正在使用 Sqlite3,这很棒,因为没有服务器可以搞乱。

在书中作者说要键入:

sqlite3 -echo something.db < some.sql

问题是没有任何东西回显到终端,甚至没有从“<”重定向命令创建的数据库。

有谁知道这是怎么回事?

4

3 回答 3

0

something.db是一个现有的数据库。< some.sql意味着它从该文件中选择数据并将其写入 sqlite 控制台。所以这两个文件都必须存在。

something.db必须是有效的 l sqlite3 数据库文件(或空文件或不存在的文件);some.sql必须是包含您的命令的文本文件。

-echo参数指定它必须在执行之前打印命令。

于 2013-02-20T05:38:24.653 回答
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
于 2013-02-20T05:56:26.213 回答
0

根据您的评论和终端屏幕截图,我的印象是您的“some.sql”文件可能编码错误和/或以混淆 sqlite的BOM开头。

您可以使用该file命令找出问题,如果这是问题,请使用iconvrecode或您最喜欢的文本编辑器将文件转换为您的终端期望的编码,以及正确的行尾(\n在 Linux 中又称为“LF”,\r\n又称为“CRLF”在 Windows 中)。

于 2013-06-03T17:09:45.480 回答