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链接到可执行文件中,向上/向下箭头键将在那里工作.
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库来允许编辑任何其他命令的键盘输入.
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二进制文件将按预期响应箭头,删除键等.
以下是两个问题的两个答案:
我发现使用 sqlite3 命令行客户端我的箭头键可以毫无问题地工作。
您的 INSERT 语句中有两个错误:
您不应为 AUTOINCREMENT 列提供值。
您应该列出列以及映射值的顺序。当您没有与列相同数量的值时,这是必需的,但即使您这样做也是一个很好的做法,因为以后对表结构的更改可能会更改列的顺序或数量。
此外,单引号在 SQL 数据库中更为标准。SQLite 将接受双引号,而其他一些程序则不会。
INSERT INTO 资源 (ResourceType) VALUES ('razor')