Android - 如何从内存手机访问sqlite数据库?

时间:2012-05-20 16:59:34

标签: android sqlite root

我使用Eclipse + ADT创建了一个应用程序,可以读取和写入sqlite数据库,它在Android终端模拟器上工作正常,但是,从手机本身运行,它不会从db填充Spinners,意味着它没有在内部存储器中找到数据库,如果数据库在手机上,我已经用adb shell检查了它,所以我想我需要为应用程序授予root权限以允许它使用数据库, 我怎样才能做到这一点?我的手机是摩托罗拉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检查过它,请帮助我,谢谢!

1 个答案:

答案 0 :(得分:0)

首先,我不会在构造函数中指定数据库的完整路径。只需文件名就可以了(因为Android会自动在你的应用程序私有数据区创建它)。

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

通过以下方式创建:

PasswordDatabase db = new PasswordDatabase(this);

如果您查看SQLiteOpenHelper的文档,则会指出在调用getReadableDatabase()getWriteableDatabase()之前不会创建数据库。所以,我尝试调用其中一个方法,然后检查数据库是否已创建。