1

我注意到 openOrCreateDatabase 仅适用于模拟器而不适用于手机,当我右键单击项目并“作为 Android 应用程序运行”时。我检查了 DDMS,数据库是通过模拟器成功创建的,但不是实际的设备。在手机上测试时,我根本没有收到任何错误消息。是的,我确实知道数据库助手类,我也尝试过,再次没有错误消息。所以我想知道,是否存在权限问题?需要设置某种配置以便在手机上进行测试时创建 SQLite 数据库?任何帮助表示赞赏。谢谢。

PS 我正在关注本教程:http ://www.youtube.com/watch?v=OUoGnvz_Yw4


编辑添加代码:在这里......在模拟器中工作正常,设备上没有任何反应。任何帮助表示赞赏。再次感谢。

package com.solitario.dbtest1;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SQLiteDatabase db = this.openOrCreateDatabase("dbtest1.db",MODE_PRIVATE,null);
        db.execSQL("CREATE TABLE IF NOT EXISTS FunnyNames (email VARCHAR, firstName VARCHAR, lastName VARCHAR);");
        db.close();
    }
}

针对 Rob 的问题进行编辑:密切关注我的 LogCat 我看到以下两行:

08-07 21:44:33.439: D/Database(2936): dbopen(): path = /data/data/com.solitario.dbtest1/databases/dbtest1.db, flag = 6
08-07 21:44:33.439: D/Database(2936): dbopen(): path = /data/data/com.solitario.dbtest1/databases/dbtest1.db, free size = 888

我试图通过在我的终端中输入这个来提取数据库,并得到“权限被拒绝”。

solitario@ubuntu:~/sdk/platform-tools$ sudo ./adb pull /data/data/com.solitario.dbtest1/databases/dbtest1.db
failed to copy '/data/data/com.solitario.dbtest1/databases/dbtest1.db' to './dbtest1.db': Permission denied

因此,如果我尝试拉取一个不存在的文件,则计算终端会给我一个不同的响应,我进入我的 droid 设置,清除了应用程序的数据但没有卸载应用程序。然后再次尝试从终端拉数据库,并得到一个“不存在”。

solitario@ubuntu:~/sdk/platform-tools$ sudo ./adb pull /data/data/com.solitario.dbtest1/databases/dbtest1.db
remote object '/data/data/com.solitario.dbtest1/databases/dbtest1.db' does not exist

所以看起来它确实创建了数据库,但是 DDMS 不会向您显示数据库何时创建,终端也不会允许您拉取它以查看它。

所以,我想修改我的问题......在构建一个 android 应用程序并在实际设备上进行测试时,如何验证您的命令是否成功?有什么工具可以验证我的查询是否已在机器人上执行?

再次感谢您的阅读和您的回复!

4

1 回答 1

2

要在非 root 设备上调试时查看数据库,您需要将其复制到公开可见的位置,例如 SD 卡。

您可以使用以下代码将您的数据库复制到 SD 卡(不要忘记在发货前禁用此代码)。在您想要验证您的数据库处于什么状态时调用它。

String sourcePath = "/data/data/com.solitario.dbtest1/databases/dbtest1.db";
File sourceFile = new File(sourcePath);

FileInputStream fis = new FileInputStream(sourceFile);

String outFilePath = Environment.getExternalStorageDirectory() + "/dbtest1.db";

OutputStream output = new FileOutputStream(outFilePath);

byte[] buff = new byte[1024];
int len;
while ((len = fis.read(buff)) > 0) {
    output.write(buff, 0, len);
}
output.flush();
output.close();
fis.close();

如果您的设备中没有 SD 卡,您可能需要修改输出目录。

将它放在 SD 卡上后,您可以使用 Eclipse 中的 DDMS 将其复制到您的开发机器上。

一旦它在您的开发机器上,SQLite DB 浏览器就可以打开数据库并浏览/查询它等。

于 2012-08-08T03:57:15.243 回答