如何在Android 4.4中找到数据库路径(API级别:19)?

时间:2013-11-22 12:49:11

标签: android android-4.4-kitkat

尝试从数据库中读取值,这是使用javascript在webview中创建的,但无法使用

获取数据库路径
getDatabasePath()

似乎已经弃用了有任何解决方案或解决此问题。

提前致谢

1 个答案:

答案 0 :(得分:3)

String webviewDBPath = getFilesDir().getParent() + "/";  // getFilesDir().getParent() returns base path of app private data
if (Build.VERSION.SDK_INT <= 18) { // Below kitkat
    webviewDBPath += <ur old db folder>;
}
webview.getSettings().setDatabasePath(webviewDBPath);

从kitkat,我们无法更改webview数据库路径。默认数据库路径是/ data / data / {package name} / app_webview / databases /。对于以下kitkat,我们可以将数据库路径设置为任何位置。

如果要访问websql创建的数据库,则从Databases.db。

查询数据库的路径
public String getWebViewDBPath() {
    if (Build.VERSION.SDK_INT > 18) {
        return "app_webview/databases";
    } else {
        return "{any folder}";
    }
}

public String getDBFileName(ZoomRxApp ctx, String dbName) {
    String dbFilePath = getFilesDir().getParent() + "/" +  getWebViewDBPath() + "/Databases.db";
    SQLiteDatabase webSqlDb = SQLiteDatabase.openOrCreateDatabase(dbFilePath, null);
    Cursor result = null;
    String dbFileName = null;
    try {
        String query = "select * from Databases where name like '"+dbName+"'";
        result = webSqlDb.rawQuery(query, null);
        while (result != null && result.moveToNext()) {
            String origin = result.getString(result.getColumnIndex("origin"));
            if(Build.VERSION.SDK_INT <= 18) {
                dbFileName = origin + "/" + result.getString(result.getColumnIndex("path"));
            } else {
                dbFileName = origin + "/" + result.getString(result.getColumnIndex("id"));
            }
            break;
        }
    } catch (RuntimeException e) {
        throw e;
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    finally {
        if(result != null) {
            result.close();
        }
        if(webSqlDb != null) {
            webSqlDb.close();
        }
    }
}