2

'Offline Dictionary Android AppCordova を使用して作成しようとしています。を使用してsqliteデータベースを作成しましSQLite database browserた。データベース ファイルはで、2 つのフィールド '_id'と 'value' をtest.db持つ 1 つのテーブルがあります。いくつかのレコードも挿入されます。testINTEGER PRIMARY KEYTEXT

私は運がないこれらを試しました:

  1. Android sqlite データベースへのインポート/エクスポート
  2. Android で PhoneGap/Cordova を使用して事前設定された SQLite データベースにアクセスできない


以下のコードを集めることができました。3 回目の試みを成功させたいので、専門家に助けを求めるためにここにいます。

私がやった事

test.dbsqlite データベース ファイルをassetsAndroid プロジェクトのディレクトリに配置しました。MainActivity.java次のコードを持つファイルがあります。

MainActivity.java

package com.example.sqlite;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.os.Bundle;
import android.util.Log;

import org.apache.cordova.*;

public class MainActivity extends DroidGap {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.loadUrl("file:///android_asset/www/index.html");

        try{
            System.out.println("----------Copying Database -----------");
                copyDataBase("test.db");

        } catch (IOException ioe){
            System.out.println("----------Error Copying Database -----------");
            ioe.printStackTrace();

        }


    }

    private void copyDataBase(String dbname) throws IOException {
        // Open your local db as the input stream
        String pkg = this.getApplicationContext().getPackageName();
        InputStream myInput = this.getAssets().open(dbname);

        // Path to the just created empty db
        String outFileName = "/data/data/"+ pkg + "/databases/" + dbname;

        // Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);


        // transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);
        }
        // Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();

    }

}

script.js次のスクリプトでファイルします。

script.js

(function($, undefined){

    document.addEventListener('deviceready', onDeviceReady, false);

    function onDeviceReady(){

        var db = window.openDatabase(
            'test.db',
            '1.0.0',
            'Test Database',
            64 * 1024
        );

        db.transaction(function(tx){

            tx.executeSql(
                'SELECT * FROM test', [], function(tx, result){

                    console.log("Query Success");
                    console.log('Total Rows :' + result.rows.length);

                },function(tx, error) {
                    console.log('An Error Occured (Qry) : ' + error.message);
                }
            )

        }, function(error){

            console.log('An Error Occured : ' + error.message);

        }, function(){
            console.log("Transaction Success");
        })

    }

})(jQuery);

と の両方でアプリを起動しましたemulatorphysical device、「no such table : test」という同じエラー応答が返されました。test.dbインディーを見つけましたdata/data/MY_PACKAGE/databases/。私pulledはEclipseを使用してそのデータベースファイルを開き、入力したいくつかのレコードを含むテーブルSQLite Database browserがあります。test

私は cordova 2.6.0 を使用しており、Android 4.2 でアプリをテストしています。私のデバイスはルート化されていません (影響がない場合は無視してください)。

シナリオを視覚化するスクリーン ショット: ここに画像の説明を入力

テーブルがあっても「そのようなテーブルはありません」というエラーが表示されるのはなぜですか?

助けてください。

4

2 に答える 2

1

データベースへの接続が正しく行われたかどうかを確認してから、テーブルを作成し、データを挿入してから、Cordova とデータベース ブラウザーからテーブルに配置したものを選択します。

.db を入れる必要はないかもしれません。最初にこのコードを試してください。

var db = window.openDatabase(
        'test',
        '1.0.0',
        'Test Database',
        64 * 1024
    );

db.transaction(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")');

},function errorCB(tx, err) {

    alert("Error processing SQL: "+err);

},function successCB() {

    alert("success!");

});
于 2013-09-16T17:07:42.780 に答える