12

通过adb shell箭头键使用 sqlite3 时,不是将光标移动到所需位置或调用历史工具,而是在屏幕上显示以下内容:^[[A, ^[[B, ^[[C, ^[[D

我正在使用 Mac OS X,并且我尝试过TerminaliTerm终端仿真器。

有人知道如何解决这个问题吗?

4

5 回答 5

6

为了允许在控制台程序的输入中进行编辑和历史记录,该程序必须与readline库链接。

sqlite3工具确实支持 readline,但在 Android 上,readline 支持已被禁用。(可能是因为 readline 仅在 GPL 下获得许可。)

于 2013-04-01T19:05:19.593 回答
6

一种解决方法是使用具有 readline 支持的本地版本的 SQLite。

  1. 将数据库文件从您的设备复制到本地计算机:
    adb pull <database-file-on-device>

  2. 使用本地版本的 SQLite 访问数据库文件:
    sqlite3 <database-file-on-local>

  3. 如果您进行了更改,您可以将它们传输到设备。将本地数据库文件从本地计算机复制到设备:
    sqlite3 <database-file-on-local> <database-file-on-device>

于 2013-09-22T07:00:42.243 回答
5

您可以在 adb shell 中使用之前的命令功能。所以只是 adb shell。然后 cd 到 /data/data//databases 目录。从这里运行(例如): sqlite3 "select * from "

然后您可以使用向上箭头来重做该命令。有点 hack,但比在 sqlite3 交互式提示中重新键入命令要好得多。

于 2015-05-17T02:58:18.687 回答
0

根据 Khanad 的回答:我在设备上编写了一个 shell 脚本,并通过它发送我的 sqlite 命令。

首先在设备上创建一个脚本文件并使其可执行:

# get on the device
$ adb shell 

# get write access on the device (this will also put you in the data/data directory)
$ run-as com.YOUR_PACKAGE.YOUR_APP_NAME

# create the script file
$ touch qlite

# make it executable
$ chmod +x qlite

然后将此代码添加到脚本中。请记住将您的实际应用名称放在那里。(回声只是为输出增加了一点喘息的空间。)

echo

sqlite3 databases/YOUR_APP_NAME -cmd ".mode column" ".headers on" "$1;"

echo

然后你只需要做类似的事情:

./qlite "select * from table limit 1"

该脚本将传递 sqlite 命令,添加分号,用列名漂亮地打印它,您可以使用向上箭头获取最后一个命令。由于您具有写入权限,因此您可以直接对设备上的数据库进行更新。

我希望这能让某人的生活更轻松!

于 2019-08-10T00:26:24.030 回答
0

使用 ADB shell 代替 sqlite3 shell 以获得 readline 包的优势。

generic_x86:/data/data/com.example.musicplayer/databases $ sqlite3 music_player_database -line 'select * from lastplayedsong;'

只要确保您在正确的包中并且不要将.db放在数据库名称的末尾,否则将创建一个新数据库并且查询将不会返回任何结果。
PS:来源

于 2019-10-28T11:56:59.487 回答