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

问题描述:

试图从数据库中读取值,即在WebView中使用JavaScript创建的,但无法获得使用如何在Android 4.4(API等级:19)中查找数据库路径?

getDatabasePath() 

这似乎是过时的数据库路径有任何解决方案或解决这一点。

在此先感谢

+0

在文档'getDatabasePath()'中没有标记为弃用。 – Henry

+0

http://developer.android.com/reference/android/webkit/WebSettings.html#getDatabasePath() - @Henry检查上面的链接 – N20084753

+0

我查了一下'android.content.Context.getDatabasePath()'。看到http://developer.android.com/reference/android/content/Context.html#getDatabasePath%28java.lang.String%29 – Henry

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); 

从奇巧,我们无法改变的WebView数据库路径。缺省数据库路径是/ data/data/{软件包名称}/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(); 
     } 
    } 
}