从 Android HTML 资源创建 SQLite 表联系示例

问题描述 投票:0回答:3

我尝试在android中使用HTML在SQLite中创建表,但它不起作用。

示例 HTML:

<!doctype html>
<html>
  <head>
    <title>Contact Example</title>

    <script
      type="text/javascript"
      charset="utf-8"
      src="phonegap-1.0.0.js"
    ></script>
    <script type="text/javascript" charset="utf-8">
      // Wait for PhoneGap to load
      //
      //document.addEventListener("deviceready", onDeviceReady, false);

      // PhoneGap is ready
      //
      function onDeviceReady() {
        var db = openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
        db.transaction(populateDB, errorCB, successCB);
      }

      // Populate the database
      //
      function populateDB(tx) {
        tx.executeSql("DROP TABLE IF EXISTS DEMO");
        tx.executeSql("CREATE TABLE IF NOT EXISTS DEMO (id unique, data)");
        tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
        tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
      }

      // Transaction error callback
      //
      function errorCB(tx, err) {
        alert("Error processing SQL: " + err);
      }

      // Transaction success callback
      //
      function successCB() {
        alert("success!");
      }
    </script>
  </head>
  <body onload="onDeviceReady()">
    <h1>Example</h1>
    <p>Database</p>
  </body>
</html>

我看不到在 android 2.2 中创建的任何数据库。

android html sqlite
3个回答
4
投票

我认为您的数据库是在android的缓存目录中创建的,这就是为什么无法看到它的原因。因此使用WebView的设置方法并启用缓存也将WebView的SQLite数据库路径提供给您的缓存目录,然后使用您的数据库。


  1. 创建一个

    WebView

  2. 获取

    webSettings
    ,并设置数据库路径。该路径应该是您的数据库的路径,即
    /path/path/your_package_name/

    appView.setWebChromeClient(new WebClient(this));
    WebSettings settings = appView.getSettings();
                settings.setJavaScriptEnabled(true);
                settings.setJavaScriptCanOpenWindowsAutomatically(true);
                settings.setDatabaseEnabled(true);
                settings.setDatabasePath("/data/data/<database path>/app_database");
    
  3. 创建一个

    WebChromeClient
    ,并重写
    onExceededDatabaseQuota
    方法。这是在您第一次打开应用程序时调用的,因为最初没有数据库设置。这允许您在 Java 中设置配额。由于这是一个测试代码,我只是在此处输入任意值。

    final class WebClient extends WebChromeClient {
        Context mCtx;
        WebClient(Context ctx)
        {
            mCtx = ctx;
        }
    
        public void onExceededDatabaseQuota(String url, String databaseIdentifier,
            long currentQuota, long estimatedSize,
            long totalUsedQuota,WebStorage.QuotaUpdater quotaUpdater)
        {
            Log.d(LOG_TAG, "We exceeded the quota");
            quotaUpdater.updateQuota(100000);
        }
    }
    

欲了解更多详情:


0
投票

在已取得 root 权限的设备上,转到:

  1. DDMS
  2. 文件资源管理器
  3. 数据->数据
  4. 包名
  5. 应用程序数据库

这里“app_databases”包含“Databases.db”文件,该文件包含其他数据库文件。


-2
投票

WebView具有通过javascript代码调用java代码的能力。尝试这个解决方案怎么样?

© www.soinside.com 2019 - 2024. All rights reserved.