在android本机应用程序和html5之间共享数据库

时间:2011-03-01 19:29:53

标签: android

我正在编写一个演示应用程序,以查看是否可以在本机android和Web视图之间共享数据库。为此,我在我的活动中添加了一个webview和一个按钮。单击按钮,我在/data/data/com.demo/databases/testdb中创建一个数据库。我可以在sqlite3提示符下看到这个数据库。然后我写了一个html页面,在头部

中有以下脚本标记
<script type="text/javascript">
        if (window.openDatabase){
            db = window.openDatabase("testdb", "1", "test database", 1024*1024);
            alert("Database " + db);
            if(db){
                db.transaction(function(tx) 
                  {    
                    tx.executeSql('SELECT * FROM KeyValues', 
                      [], 
                      function (tx, rs) { displayMyResult(rs); }, 
                      function (tx, err) { displayMyError(err); } );
                  });
            }
        }else{
            alert("Database is not supported");
        }

        function displayMyResult(rs){
            alert("In display method");
            for(var i=0; i < rs.rows.length; i++) {
                r = rs.rows.item(i);
                alert('id = ' + r['id'] + ', Key: ' + r['key_name'] + ', Value: ' +  r['key_value']);
            }
        }

        function displayMyError(err){
            alert(err.message);
        }
    </script>

问题是我总是将数据库对象db作为null。可能这是不可能的。或者我错过了什么。

感谢任何帮助。

编辑:底线:是否可以访问由webview中的原生android API创建的数据库?

1 个答案:

答案 0 :(得分:0)

您是否尝试过阅读此帖How do I call window.openDatabase from a webView hosted in an android application?

你需要做

WebSettings settings = webView.getSettings();  
settings.setJavaScriptEnabled(true);  
settings.setJavaScriptCanOpenWindowsAutomatically(true); 
... 
settings.setDatabaseEnabled(true);  
settings.setDatabasePath("/data/data/your.package.name/database_name");