1

我创建了一个使用 Eclipse + ADT 读取和写入 sqlite db 的应用程序,它在 Android 终端模拟器上运行良好,但是,从手机本身运行,它不会从 db 填充 Spinner,这意味着它没有找到db 在内部存储器中,我已经用 adb shell 检查了 db 是否在手机上并且它在那里,所以我想我需要授予应用程序 root 权限以允许它使用 db,我该怎么做?我的手机是摩托罗拉 Defy,它已经植根,谢谢,祝你有美好的一天。

编辑:这是我创建表并添加方法 onCreate 和 onUpdate 的类:

public class passwordSQLiteHelper extends SQLiteOpenHelper{

String SqlCreate = "CREATE TABLE password(id INTEGER, name TEXT, password TEXT)";

public passwordSQLiteHelper(Context context, String name,
        CursorFactory factory, int version) {
    super(context, name, factory, version);
    // TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    db.execSQL(SqlCreate);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    db.execSQL("DROP TABLE IF EXISTS password");
    db.execSQL(SqlCreate);

}

}

当活动开始时,我从主类调用它:

passwordSQLiteHelper passUserDb = new passwordSQLiteHelper(this, "/data/data/com.project.otto/databases/password", null, 1);

在终端上效果很好,但在手机上似乎找不到数据库,我用 adb 查了一下,它就在那里,请帮帮我,谢谢!

4

1 回答 1

0

首先,我不会在构造函数中指定数据库的完整路径。只是文件名应该没问题(因为 Android 会自动在您的应用程序私有数据区域中创建它)。

public PasswordDatabase(Context context {
    super(context, "password.db", null, 1);
}

并通过以下方式创建它:

PasswordDatabase db = new PasswordDatabase(this);

如果您查看SQLiteOpenHelpergetReadableDatabase()的文档,它会声明在调用或调用之前不会创建数据库getWriteableDatabase()。所以,我会尝试调用其中一种方法,然后检查数据库是否已创建。

于 2012-05-20T20:16:45.050 回答