phonegap Sqlite插件实现错误和警告:没有这样的表

phonegap Sqlite plugin implementation-error and warning:no such table

本文关键字:警告 插件 Sqlite 实现 错误 phonegap      更新时间:2023-09-26

我实现了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

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

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

由我做出的假设…

我把。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应用程序?

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

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

04-17 02:21:08.722: E/Web Console(1698): "no such table: api (code 1):, while compiling: SELECT * FROM api WHERE md5 = ?限制1" at file:///android_asset/www/js/app.js:9249

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

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

编辑:我回滚到cordova 2.5,现在一切似乎都为我工作。这可能是一个临时的解决方案,直到问题被追踪到。

检查这个并遵循它的工作!

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

我用最新版本的PHONEGAP 2.5.0, ANDROID 4.1.2 &新的sqlite插件更新7个月前…无法运行....

经过4-5天的努力,我终于找到了解决办法!!

YIPEE ! !

请参考下面的链接,它为我工作。

http://docs.phonegap.com/en/2.5.0/cordova_storage_storage.md.html存储