从adb shell使用sqlite3时,光标键不起作用

时间:2013-04-01 16:46:58

标签: android sqlite adb readline

当使用sqlite3到adb shell箭头键时,不是将光标移动到所需位置或召唤历史记录工具,屏幕上会显示以下内容:^[[A^[[B^[[C^[[D

我正在使用Mac OS X,我尝试过终端 iTerm 终端模拟器。

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

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:5)

解决方法是使用具有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>

答案 2 :(得分:3)

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

然后你可以用向上箭头重做那个命令。有点破解,但比在sqlite3交互式提示符中重新输入命令更好。

答案 3 :(得分: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命令,以分号结尾,并用列名漂亮地打印它,您可以使用向上箭头获取最后一个命令。并且由于您具有写访问权,因此可以直接对设备上的数据库进行更新。

我希望这会使某人的生活更轻松!

答案 4 :(得分:0)

使用ADB Shell而非sqlite3 Shell来获得readline软件包的优势。

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

只需确保您使用的是正确的软件包,并且不要在数据库名称的末尾放置 .db ,否则将创建一个新数据库,并且查询将不会返回任何结果。 br /> PS:source