android - 与本地 android 和 html5 共享数据库(sqlite 错误没有这样的表)

标签 android html database sqlite android-webview

我正在尝试创建一个与 native android 和 html 共享数据库的应用程序。 我初始化以下代码并为我的 webview 页面启用数据库。但是在 webview 页面上,当我更新数据库时,我没有得到这样的表 (hybrid_user)。我不确定我在这里错过了什么。

数据库

public class DBHelper extends SQLiteOpenHelper{

private SQLiteDatabase helper;
private static final String DATABASE_NAME="hybrid_db";
private static final int SCHEMA_VERSION=1;
private static final String TAG = "DBHelper";


public DBHelper(Context context){
    super(context, DATABASE_NAME, null, SCHEMA_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    Log.i(TAG, "DBHelper");
    db.execSQL("CREATE TABLE hybrid_user (" +
            "tableid INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "userid TEXT," +
            "password TEXT," +
            "mobile TEXT," +
            "createdate TIMESTAMP default current_timestamp);");
}

Activity

    webView = (WebView)findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("file:///android_asset/www/index.html");
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webView.getSettings().setDatabaseEnabled(true);
    webView.getSettings().setDatabasePath("/data/data/com.example.hybrid/hybrid_db");
    webView.getSettings().setDomStorageEnabled(true);
    webView.setWebViewClient(new WebViewClient(){

        @Override
        public void onPageFinished(WebView view, String url){
            webView.loadUrl("javascript:callFromActivity(\""+userid+"\")");
        }
    });

    webView.setWebChromeClient(new WebChromeClient(){

        public void onExceededDatabaseQuota(String url, String databaseIdentifier, 
                long currentQuota, long estimatedSize, long totalUsedQuota,
                WebStorage.QuotaUpdater quotaUpdater){
            quotaUpdater.updateQuota(204801);
        }
    });

index.html

<script>
var hybrid_user = null;
    function errorHandler(transaction, error){
        alert('Error:'+error.message+' (Code '+error.code+')');
        return true;
    }
    window.onerror = errorHandler;
    try{
        if(window.openDatabase){
            var shortName = 'hybrid_db';
            var version = '1.0';
            var displayName = 'Hybrid Database';
            var maxSize = 204801;
            hybrid_user = openDatabase(shortName, version, displayName, maxSize);
            alert("alert: "+hybrid_user);
        }
        else{
            alert("Database is not supported");
        }           
    }
    catch(e){
        if(e == 2){
            alert("Invalid database version.");
        }
        else{
            alert("Unknown error "+e+".");
        }
        return;
    }



    function updateRecord(){
        hybrid_user.transaction(
                function(transaction){
                    transaction.executeSql("UPDATE hybrid_user SET mobile=? WHERE userid ='"+document.getElementById("userid")+"'", [mobileNum]);
                    alert("mobileNum:" +mobileNum);
                    alert("userid:" +document.getElementById("userid"));
        });
    }
</script>

<body>
<form>
    <fieldset>
        <legend>Hybrid Application</legend>
        <p>

            <label>UserName: </label> <p id="userid"></p>
        <p>
            <label>Mobile Number :</label>
            <input type = "text"
                        id = "mobileNum" />
        </p>
            <button type="button" 
            onclick="updateRecord()">Submit</button>    
                <div id="output"></div> 
    </fieldset>
</form>
</body>

我从 alert("alert:"+hybrid_user); 得到 alert:[object Database]。但我仍然收到 sqlite 错误,没有这样的表。 sqlite 返回:error code = 1, msg = no such table:hybrid_user

最佳答案

数据库路径不正确,您缺少“数据库”目录。
它应该是:/data/data/com.example.hybrid/databases/hybrid_db,
而不是:/data/data/com.example.hybrid/hybrid_db

关于android - 与本地 android 和 html5 共享数据库(sqlite 错误没有这样的表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15565367/

相关文章:

android - 无法在设备“emulator-5554”上安装 HelloAndroid.apk!

JavaScript-创建一个函数来将字符串的第一个字母大写

android - 自定义字体的垂直对齐偏移

php插入不向数据库添加数据,有什么想法吗?

c# - 普遍存在的 SQL 德语变音符号问题

java - Java中从字符串中获取子字符串(Android)

android - 使用AudioTrack类在Android中连续合成静态波形

java - 使用计算机视觉进行 Android 数独求解器

html - 当焦点是另一个元素时更改元素的样式

android - 如何只显示一次 Firebase 数据?