现在已经可以在真机(nexus one)下使用sqlite3命令行工具了。不想在模拟器上面使用,android的模拟器和真机比较起来,太慢了,尤其是启动的时候。
如果在android上无法使用下面提到的命令行工具,报告:
sqlite3: not found
那么可能需要安装带sqlite3的ROM,见nexus one更新第三方ROM。另外,想使用sqlite3访问程序私有目录下的文件,需要具备ROOT权限,见nexus one获取root权限。
如果这两条都具备了,可以开始使用。
日志引用
在官方nexus one上获取了ROOT权限,以为只需覆盖几个文件,即可让联系人支持中文排序,另外,以为可以使用sqlite3了,结果却让人失望。
获得联系人中文排序的文件,据说,只能在android 2.1版本中使用,在2.1 update1后无效。看网上的帖子,很难区分是否是在update1推出前还是之后的,不想为此做试验了。
有了root权限后,依然无法在adb shell中使用sqlite3命令,报:
sqlite3: not found
这个工程菜单,主要是用于对手机的测试。
通过拨号,拨:
*#*#4636#*#*
可以看到类似如下信息:
这个操作应该是对所有android系统有效的,刚才测试了一下htc hero,也可以使用。
目前使用的nexus one是出厂带的版本。
打算处理成带root权限的版本。因为:
- 需要调试程序,使用root权限会很方便,比如通过adb shell查sqlite表中的内容,这是目前比较迫切的,估计以后类似情况还很多;
- 当前版本联系人,对中文的检索不好,不过这个不紧迫,现在用连云助手也还算好用,基本可以满足要求,不过如果能刷联系人的话,会更直接,这需要root权限。
做了个简单的测试,用于android的sqlite3操作下载的sqlite3数据库文件。
是可以的,目前测试的仅是Cursor(游标)移动到结果集第一行,然后操作指定列的值。
代码:
FileOutputStream outputStream = openFileOutput("mydb", 0);
InputStream inputStream = response.getEntity().getContent();byte[] data = new byte[bufferSize];
for (int i = inputStream.read(data); i > 0; i = inputStream
.read(data)) {
outputStream.write(data, 0, i);
}SQLiteDatabase database = SQLiteDatabase
.openOrCreateDatabase(getFileStreamPath(fileName)
.getAbsolutePath(), null);
Cursor cursor = database.rawQuery("select * from users",
new String[] {});
if (cursor.moveToFirst()) {
Log.i(TAG, "user name: " + cursor.getString(1));
}
database.close();
比如在android ProgressDialog和后台线程中前台ui线程在显示ProgressDialog,后台线程在下载更新数据,那么更新数据完毕,会dismiss ProgressDialog对象,而且会再显示一个提示对话框,告知数据更新完毕。
触发的事件是下载完毕,这是后台线程知道的,但是后台线程不能直接创建ui组件,这样会产生报错,比如:
要实现这样的效果:
需要一个后台线程到服务器端下载初始数据。因为不能使用前台ui线程,否则会造成无法在屏幕绘制ProgressDialog对话框。
android做的没有iphone好看,现在都2.1版本了,依然是如此。
使用android的api,如果想在标签页的题目上带个图片,也只能是这样了。
这个工具,比SQLite Database Browser强大很多。是免费软件,使用需要安装。
网址在:
有多个版本,其中SQLite2009 Pro Enterprise Manager是免费版本。
最主要的是这个版本支持blob的insert。见截图:
是开源免费的sqlite数据库浏览工具,网址是:
可以在windows、linux和mac osx下运行。在windows下是个绿色软件,解压缩后就可以使用。
目前使用的结果是,可以实现日常的建库建表,对表内数据的CRUD等,但是对blob数据支持有问题,不能做到正确处理导入二进制文件到blob字段。