2

我实现了之前问题中提到的 Phonegap 插件。

我收到一个错误,因为查询中没有给出这样的表。而该名称中有一个表。

代码

    <script type="text/javascript" charset="utf=8" src="cordova-2.5.0.js"></script> 
    <script type="text/javascript" charset="utf-8" src="main.js"></script>
    <script type="text/javascript" charset="utf-8" src="SQLitePlugin.js"></script>
    <script type="text/javascript" charset="utf-8">

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

    function onDeviceReady() 
    {
        var db =  window.sqlitePlugin.openDatabase("abc.db", "1.0", "test", 20000);

        db.transaction(function(tx) 
        {
            tx.executeSql("SELECT column_name FROM table_name;", [], function(tx) 
            {
                console.log("column_name length: " + column_name.length);

          });
        }, 
        function(e) 
        {
        console.log("ERROR: " + e.message);
        });

      }

  </script>

**Error and Warnings**

    04-12 18:11:58.271: D/dalvikvm(400): VFY: dead code 0x0047-0067 in Lcom/phonegap/plugin/sqlitePlugin/SQLitePlugin;.results2string (Landroid/database/Cursor;)Ljava/lang/String;
    04-12 18:11:58.281: V/info(400): Open sqlite db: /data/data/com.a.android.b/databases/abc.db.db
    04-12 18:11:58.351: D/CordovaLog(400): SQLitePluginTransaction - this.trans_id:1365770518342000
    04-12 18:11:58.351: I/Web Console(400): SQLitePluginTransaction - this.trans_id:1365770518342000 at file:///android_asset/www/SQLitePlugin.js:83
    04-12 18:11:58.351: D/CordovaLog(400): SQLitePluginTransaction.prototype.executeSql
    04-12 18:11:58.362: I/Web Console(400): SQLitePluginTransaction.prototype.executeSql at file:///android_asset/www/SQLitePlugin.js:164
    04-12 18:11:58.362: D/CordovaLog(400): success not null:SELECT column_name FROM table_name;
    04-12 18:11:58.362: I/Web Console(400): success not null:SELECT type FROM tpl_category; at file:///android_asset/www/SQLitePlugin.js:171
    04-12 18:11:58.362: D/CordovaLog(400): executeSql - add_to_transactionSELECT column_name FROM table_name;
    04-12 18:11:58.362: I/Web Console(400): executeSql - add_to_transactionSELECT column_name FROM table_name; at file:///android_asset/www/SQLitePlugin.js:199
    04-12 18:11:58.383: D/CordovaLog(400): SQLitePluginTransaction.prototype.complete
    04-12 18:11:58.383: I/Web Console(400): SQLitePluginTransaction.prototype.complete at file:///android_asset/www/SQLitePlugin.js:204
    04-12 18:11:58.391: I/Database(400): sqlite returned: error code = 1, msg = no such table: tpl_category
    04-12 18:11:58.391: W/System.err(400): android.database.sqlite.SQLiteException: no such table: table_name: , while compiling: SELECT column_name FROM table_name;
    04-12 18:11:58.391: W/System.err(400):  at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
    04-12 18:11:58.391: W/System.err(400):  at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
    04-12 18:11:58.391: W/System.err(400):  at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
    04-12 18:11:58.391: W/System.err(400):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
    04-12 18:11:58.401: W/System.err(400):  at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
    04-12 18:11:58.401: W/System.err(400):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
    04-12 18:11:58.401: W/System.err(400):  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
    04-12 18:11:58.401: W/System.err(400):  at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315)
    04-12 18:11:58.401: W/System.err(400):  at com.phonegap.plugin.sqlitePlugin.SQLitePlugin.executeSqlBatch(SQLitePlugin.java:263)
    04-12 18:11:58.401: W/System.err(400):  at com.phonegap.plugin.sqlitePlugin.SQLitePlugin.execute(SQLitePlugin.java:109)
    04-12 18:11:58.401: W/System.err(400):  at org.apache.cordova.api.CordovaPlugin.execute(CordovaPlugin.java:61)
    04-12 18:11:58.401: W/System.err(400):  at org.apache.cordova.api.PluginManager.exec(PluginManager.java:220)
    04-12 18:11:58.401: W/System.err(400):  at org.apache.cordova.ExposedJsApi.exec(ExposedJsApi.java:44)
    04-12 18:11:58.401: W/System.err(400):  at org.apache.cordova.CordovaChromeClient.onJsPrompt(CordovaChromeClient.java:221)
    04-12 18:11:58.401: W/System.err(400):  at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:566)
    04-12 18:11:58.401: W/System.err(400):  at android.os.Handler.dispatchMessage(Handler.java:99)
    04-12 18:11:58.401: W/System.err(400):  at android.os.Looper.loop(Looper.java:123)
    04-12 18:11:58.412: W/System.err(400):  at android.app.ActivityThread.main(ActivityThread.java:4627)
    04-12 18:11:58.412: W/System.err(400):  at java.lang.reflect.Method.invokeNative(Native Method)
    04-12 18:11:58.412: W/System.err(400):  at java.lang.reflect.Method.invoke(Method.java:521)
    04-12 18:11:58.412: W/System.err(400):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    04-12 18:11:58.412: W/System.err(400):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    04-12 18:11:58.412: W/System.err(400):  at dalvik.system.NativeStart.main(Native Method)
    04-12 18:11:58.412: V/executeSqlBatch(400): SQLitePlugin.executeSql(): Error=no such table: table_name: , while compiling: SELECT column_name FROM table_name;
    04-12 18:11:58.412: V/executeSqlBatch(400): 1365770518342000
    04-12 18:11:58.432: D/CordovaLog(400): SQLitePluginTransaction.txErrorCallback---transId:1365770518342000
    04-12 18:11:58.432: I/Web Console(400): SQLitePluginTransaction.txErrorCallback---transId:1365770518342000 at file:///android_asset/www/SQLitePlugin.js:132
    04-12 18:11:58.444: D/CordovaLog(400): ERROR: undefined
    04-12 18:11:58.444: I/Web Console(400): ERROR: undefined at file:///android_asset/www/view all.html:27

我错过了任何初始化或声明吗?

4

4 回答 4

1

好吧,我找到了我这篇文章的答案。但这给我带来了一个新问题。

我做的假设...

我已将 .sqlite 放在 assets/www 文件夹中。所以我假设 eclipse 正在打开那个特定的 sqlite 文件夹。

代码:

var db =  window.sqlitePlugin.openDatabase("abc.db", "1.0", "test", 20000);

形成的数据库是 abc.db.db。这是我的另一个错误。所以,当我发出命令通过命令访问表时

tx.executeSql("SELECT column_name FROM table_name;", [], function(tx) 
    {
        console.log("column_name length: " + column_name.length);

  });
}, 
function(e) 
{
console.log("ERROR: " + e.message);
});

它向我显示了一个错误,因为没有这样的 table_name。

事实上,它创建了一个新的 .DB 文件(根据我的代码),其中没有这样的表。

这完全是我的错误。

但是,这让我进一步思考如何让 eclipse 访问我的 .sqlite 文件,将它集成到我的 Phonegap 应用程序中?

任何建议和解决方案请告诉我..

于 2013-04-16T06:18:47.550 回答
1

我认为 Cordova 2.6 中有一个错误,我今天刚从 2.5 升级,我所有的 sqlite 代码似乎都坏了,尽管我做了一些其他的改变。我不断收到同样的错误,但我 90% 确定它与科尔多瓦有关。

04-17 02:21:08.722:E/Web 控制台(1698):“没有这样的表:api(代码 1):,编译时:SELECT * FROM api WHERE md5 = ? LIMIT 1”在 file:///android_asset /www/js/app.js:9249

但是当我创建数据库和表时我没有得到任何错误,我可以使用文件资源管理器直接在 eclipse 中浏览数据库,并看到不仅数据库存在,而且表也在那里。

我会报告我找到的任何解决方案。

编辑:我回滚到cordova 2.5,现在一切似乎都对我有用。在追查问题之前,这可能会作为临时解决方案。

于 2013-04-17T09:29:30.273 回答
1

检查这个并按照它的工作!

有 phonegap OF 2.1.0 版本 android OF 2.2 Jquery OF 1.8.2min(如果你使用)我没有使用 Jquery。

我在 7 个月前更新的最新版本的 PHONEGAP 2.5.0、ANDROID 4.1.2和新的 SQLITE 插件上尝试了同样的方法......它没有工作......

终于在将近 4-5 天后,我找到了解决方案!

伊皮!!

于 2013-04-18T08:41:24.183 回答
0

请参考下面的链接,它对我有用。

http://docs.phonegap.com/en/2.5.0/cordova_storage_storage.md.html#Storage

于 2013-04-15T11:03:06.167 回答