Sqlite使用命令行

Ock*_*zor 16 sql sqlite

Sqlite有点令人沮丧.每次运行命令时,我都无法使用向上向下的向右箭头来检索以前键入的命令.有没有办法实现这个?

另一个问题:我有下表

CREATE TABLE resource (
    resourceID INTEGER PRIMARY KEY AUTOINCREMENT,
    resourceType STRING,
    userID INTEGER DEFAULT -1
);
Run Code Online (Sandbox Code Playgroud)

我插入如下:

insert into resource values(null, "razor");
Run Code Online (Sandbox Code Playgroud)

但它不允许我这样做,因为我只插入了2列而没有为userID列指定任何内容.但我认为DEFAULT的意思是如果没有插入任何内容,则将值默认为-1.我在这里错过了什么吗?

Wou*_*len 21

要使箭头键在sqlite3命令提示符下工作,需要将sqlite3二进制文件链接到readline库.您可以通过以下方式检查:

$ ldd $(which sqlite3)
Run Code Online (Sandbox Code Playgroud)

在我的例子中,我发现sqlite3命令实际上是在安装的Android SDK中使用sqlite3版本,运行:

$ which sqlite3
/opt/google/android-sdk/tools/sqlite3
Run Code Online (Sandbox Code Playgroud)

该版本没有readline库链接,而/ usr/bin/sqlite3则没有.所以我所做的就是将Android SDK中的sqlite3移开(我仍然希望能够访问该目录中的其他工具 - 但是我最好从/ usr/local/bin或〜/ bin创建符号链接),并且运行sqlite3现在使用/ usr/bin/sqlite3,其中readline链接到可执行文件中,向上/向下箭头键将在那里工作.

  • 类似地,如果你使用anaconda作为默认的python安装,它会将`sqlite3`指向`〜/ anaconda3/bin/sqlite3`,它没有readline链接.所以要么每次写出`/ usr/bin/sqlite3`,要么将别名`alias sqlite3 ='/ usr/bin/sqlite3'添加到`.bashrc`. (6认同)
  • 这是我的问题的原因.我通过确保android SDK在我的PATH中的"/ usr/bin"之后修复了我的问题.您可以使用"echo $ PATH"查看您的订单.我在〜/ .bash_profile中修改了我的 (4认同)

Yog*_*ity 18

快速解决方案是启动具有ReadLine支持的SQLite,如下所示:

rlwrap sqlite3 database.db
Run Code Online (Sandbox Code Playgroud)

如果rlwrap未安装,您可以使用以下命令在Ubuntu上执行此操作:

sudo apt-get install rlwrap
Run Code Online (Sandbox Code Playgroud)

对于其他Linux版本,请在此处查看.

rlwrap 是一个ReadLine包装器,一个小实用程序,它使用GNU readline库来允许编辑任何其他命令的键盘输入.

  • 很好的选择.如果您不想对服务器维护负责,重新编译可能会导致您不想要的附带损害. (2认同)
  • 这个选项对我来说是最好的.在Redhat/Centos 7上,该包也被命名为`rlwrap`. (2认同)
  • 绝妙的解决方案。我必须重新编译 SQLite3 才能获得当前版本,然后箭头键就停止工作了。这修复了这个问题,而无需弄清楚要在编译设置中更改什么。我还在“.bashrc”文件中添加了一行以自动添加“rlwrap”,如下所示:“alias sqlite3='rlwrap sqlite3'”。这样我就不必记住将其添加到命令前面。 (2认同)

Amb*_*pel 11

我在OS X上遇到了同样的问题.

为了解决这个问题,你需要自己编译sqlite3.预编译的二进制文件不能假设您已获得readline支持,因此他们将其排除在外.

如果从http://www.sqlite.org/download.html下载"autoconf"源代码(第二个链接,目前为http://www.sqlite.org/sqlite-autoconf-3071300.tar.gz):

然后你可以通过终端编译它(cd到tarball提取到的目录):

$ ./configure
$ make
$ sudo make install
Run Code Online (Sandbox Code Playgroud)

它会自动识别OS X有readline和curses支持,你的新sqlite3二进制文件将按预期响应箭头,删除键等.


Lar*_*tig 1

以下是两个问题的两个答案:

  1. 我发现使用 sqlite3 命令行客户端我的箭头键可以毫无问题地工作。

  2. 您的 INSERT 语句中有两个错误:

    • 您不应为 AUTOINCREMENT 列提供值。

    • 您应该列出列以及映射值的顺序。当您没有与列相同数量的值时,这是必需的,但即使您这样做也是一个很好的做法,因为以后对表结构的更改可能会更改列的顺序或数量。

    • 此外,单引号在 SQL 数据库中更为标准。SQLite 将接受双引号,而其他一些程序则不会。

      INSERT INTO 资源 (ResourceType) VALUES ('razor')

  • 谢谢拉里。顺便说一句,我使用的是 mac osx,所以每次我按向上箭头或其他东西时,都会出现 ^[[A 而不是上一个命令。这是在 bash 终端中。 (2认同)