当使用sqlite3到adb shell
箭头键时,不是将光标移动到所需位置或召唤历史记录工具,屏幕上会显示以下内容:^[[A
,^[[B
, ^[[C
,^[[D
。
我正在使用Mac OS X,我尝试过终端和 iTerm 终端模拟器。
有人知道如何解决这个问题吗?
答案 0 :(得分:5)
要在控制台程序的输入中允许编辑和历史记录,该程序必须与readline
库链接。
sqlite3
工具确实支持readline,但在Android上,已禁用readline支持。
(可能是因为readline仅在GPL下获得许可。)
答案 1 :(得分:5)
解决方法是使用具有readline支持的本地SQLite版本。
将数据库文件从您的设备复制到本地计算机:
adb pull <database-file-on-device>
使用本地版本的SQLite访问数据库文件:
sqlite3 <database-file-on-local>
如果您进行了更改,则可以将其传输到设备。将本地数据库文件从本地计算机复制到设备:
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