Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android (21)使用NULL prepared语句调用API_Android_Database_Sqlite_Android Sqlite_Batch Processing - Fatal编程技术网

Android (21)使用NULL prepared语句调用API

Android (21)使用NULL prepared语句调用API,android,database,sqlite,android-sqlite,batch-processing,Android,Database,Sqlite,Android Sqlite,Batch Processing,我目前正在使用sqlite数据库,android。我想 将包含sql语句的原始文件导入我的数据库。我的 场景如下 将原始文件读取为字符串 按拆分这些sql语句符号 在循环中执行每个语句 但是,当我执行sql语句时,它会抛出错误,例如在只执行文件的一行之后,(21)使用空准备语句调用的API,以及在[b3bb660af9]的第70084行错误使用。我看不出我的编码有任何问题 错误日志 03-08 14:56:41.652 15867-15867/com.sv.gauge D/EXECUTED SQ

我目前正在使用sqlite数据库,android。我想 将包含sql语句的原始文件导入我的数据库。我的 场景如下

  • 将原始文件读取为字符串
  • 拆分这些sql语句符号
  • 在循环中执行每个语句
  • 但是,当我执行sql语句时,它会抛出错误,例如在只执行文件的一行之后,
    (21)使用空准备语句调用的API
    ,以及在[b3bb660af9]
    的第70084行错误使用。我看不出我的编码有任何问题

    错误日志

    03-08 14:56:41.652 15867-15867/com.sv.gauge D/EXECUTED SQL: PRAGMA foreign_keys=OFF
    03-08 14:56:41.662 15867-15867/com.sv.gauge E/SQLiteLog: (21) API called with NULL prepared statement
    03-08 14:56:41.662 15867-15867/com.sv.gauge E/SQLiteLog: (21) misuse at line 70084 of [b3bb660af9]
    03-08 14:56:41.672 15867-15867/com.sv.gauge D/AndroidRuntime: Shutting down VM
    03-08 14:56:41.672 15867-15867/com.sv.gauge E/AndroidRuntime: FATAL EXCEPTION: main
                                                              Process: com.sv.gauge, PID: 15867
                                                              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sv.gauge/com.sv.gauge.LoginActivity}: android.database.sqlite.SQLiteException: not an error (code 0)
                                                              #################################################################
                                                              Error Code : 0 (SQLITE_OK)
                                                              Caused By : not an error (code 0)
                                                              #################################################################
                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2695)
                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769)
                                                                  at android.app.ActivityThread.access$900(ActivityThread.java:177)
                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430)
                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                  at android.os.Looper.loop(Looper.java:135)
                                                                  at android.app.ActivityThread.main(ActivityThread.java:5910)
                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                  at java.lang.reflect.Method.invoke(Method.java:372)
                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
                                                               Caused by: android.database.sqlite.SQLiteException: not an error (code 0)
                                                              #################################################################
                                                              Error Code : 0 (SQLITE_OK)
                                                              Caused By : not an error (code 0)
                                                              #################################################################
                                                                  at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method)
                                                                  at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:904)
                                                                  at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754)
                                                                  at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
                                                                  at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1814)
                                                                  at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1743)
                                                                  at com.sv.gauge.controller.GaugeDatabaseHelper.onCreate(GaugeDatabaseHelper.java:78)
                                                                  at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
                                                                  at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
                                                                  at com.sv.gauge.controller.GaugeDatabaseHelper.getReadableDatabase(GaugeDatabaseHelper.java:43)
                                                                  at com.sv.gauge.controller.GaugeDatabaseHelper.<init>(GaugeDatabaseHelper.java:37)
                                                                  at com.sv.gauge.LoginActivity.onCreate(LoginActivity.java:39)
                                                                  at android.app.Activity.performCreate(Activity.java:6178)
                                                                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2648)
                                                                    ... 10 more
    
    包含sql语句的原始文件

    PRAGMA foreign_keys=OFF;
    BEGIN TRANSACTION;
    CREATE TABLE "domain" (
        `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
        `title` TEXT NOT NULL,
        `description`   TEXT NOT NULL,
        `first_step`    INTEGER NOT NULL
    );
    INSERT INTO "domain" VALUES(1,'GENERATOR ROOM','take measurements of generator room',1);
    CREATE TABLE "domain_step" (
        `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
        `domain_id` INTEGER NOT NULL,
        `title` TEXT NOT NULL,
        `visual_type`   TEXT NOT NULL,
        `visual_link`   TEXT,
        `visual_description`    TEXT NOT NULL,
        `next_step` INTEGER,
        `show_map`  INTEGER NOT NULL,
        `last_step` INTEGER NOT NULL,
        `map_from_previous_link`    TEXT,
        `enable_skip`   INTEGER NOT NULL,
        `skip_to_step`  INTEGER,
        `map_from_beginning_link`   TEXT,
        `value_type`    TEXT NOT NULL,
        `value_hint`    TEXT,
        `default_value` TEXT,
        `default_from_value`    TEXT,
        `default_to_value`  TEXT,
        `report_description`    TEXT
    );
    INSERT INTO "domain_step" VALUES(1,1,'Safty Items','IMAGE',NULL,'Did you ware safety Items?
    
    1) Ear protection
    
    2) Helmet with light',2,0,0,NULL,0,NULL,NULL,'NONE',NULL,NULL,NULL,NULL,NULL);
    COMMIT;
    

    如果sql文件已经有“;”那么

    应该是

    try {
        while ((line = reader.readLine()) != null) {
            builder.append(line);
        }
    

    其他访客的另一种选择

    PRAGMA foreign_keys=OFF;
    BEGIN TRANSACTION;
    CREATE TABLE "domain" (
        `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
        `title` TEXT NOT NULL,
        `description`   TEXT NOT NULL,
        `first_step`    INTEGER NOT NULL
    );
    INSERT INTO "domain" VALUES(1,'GENERATOR ROOM','take measurements of generator room',1);
    CREATE TABLE "domain_step" (
        `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
        `domain_id` INTEGER NOT NULL,
        `title` TEXT NOT NULL,
        `visual_type`   TEXT NOT NULL,
        `visual_link`   TEXT,
        `visual_description`    TEXT NOT NULL,
        `next_step` INTEGER,
        `show_map`  INTEGER NOT NULL,
        `last_step` INTEGER NOT NULL,
        `map_from_previous_link`    TEXT,
        `enable_skip`   INTEGER NOT NULL,
        `skip_to_step`  INTEGER,
        `map_from_beginning_link`   TEXT,
        `value_type`    TEXT NOT NULL,
        `value_hint`    TEXT,
        `default_value` TEXT,
        `default_from_value`    TEXT,
        `default_to_value`  TEXT,
        `report_description`    TEXT
    );
    INSERT INTO "domain_step" VALUES(1,1,'Safty Items','IMAGE',NULL,'Did you ware safety Items?
    
    1) Ear protection
    
    2) Helmet with light',2,0,0,NULL,0,NULL,NULL,'NONE',NULL,NULL,NULL,NULL,NULL);
    COMMIT;
    
    我之所以得到这一行,是因为我的SQL脚本中有一条注释以
    结尾字符。因此,它试图独自执行注释,从而产生“NULL prepared statement”错误

    解决方案

    PRAGMA foreign_keys=OFF;
    BEGIN TRANSACTION;
    CREATE TABLE "domain" (
        `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
        `title` TEXT NOT NULL,
        `description`   TEXT NOT NULL,
        `first_step`    INTEGER NOT NULL
    );
    INSERT INTO "domain" VALUES(1,'GENERATOR ROOM','take measurements of generator room',1);
    CREATE TABLE "domain_step" (
        `id`    INTEGER PRIMARY KEY AUTOINCREMENT,
        `domain_id` INTEGER NOT NULL,
        `title` TEXT NOT NULL,
        `visual_type`   TEXT NOT NULL,
        `visual_link`   TEXT,
        `visual_description`    TEXT NOT NULL,
        `next_step` INTEGER,
        `show_map`  INTEGER NOT NULL,
        `last_step` INTEGER NOT NULL,
        `map_from_previous_link`    TEXT,
        `enable_skip`   INTEGER NOT NULL,
        `skip_to_step`  INTEGER,
        `map_from_beginning_link`   TEXT,
        `value_type`    TEXT NOT NULL,
        `value_hint`    TEXT,
        `default_value` TEXT,
        `default_from_value`    TEXT,
        `default_to_value`  TEXT,
        `report_description`    TEXT
    );
    INSERT INTO "domain_step" VALUES(1,1,'Safty Items','IMAGE',NULL,'Did you ware safety Items?
    
    1) Ear protection
    
    2) Helmet with light',2,0,0,NULL,0,NULL,NULL,'NONE',NULL,NULL,NULL,NULL,NULL);
    COMMIT;
    
    您可以通过执行以下任一操作来解决此问题:

  • 删除以
    结尾的注释行
  • 之后添加额外的文本。我这样做:

    -- version 1 of the database vocab table was
    --
    -- CREATE TABLE vocab
    -- ( _id INTEGER PRIMARY KEY,
    --   date INTEGER,
    --   list_id TEXT NOT NULL, -- this should have been INTEGER
    --   mongol TEXT NOT NULL,
    --   definition TEXT,
    --   pronunciation TEXT,
    --   audio TEXT,
    --   FOREIGN KEY(list_id) REFERENCES lists(_id)
    -- ); -- end comment (comment lines cannot end with semicolon)
    
  • 更改运行脚本的逻辑,使其忽略以
    --
    开头的任何行,而不尝试运行它们
  • 结论


    如果您遇到此错误,请查找错误的
    可能单独执行的字符。

    似乎您正在追加另一个字符;对于文件中已经存在的文件,它不是
    。这是断线谢谢Jayvee。事实上,它是有效的。但有时insert语句包含要插入的多行文本。那么我如何处理它呢?您可能需要为您调用的每个语句(sql)添加行分隔符。实际上,行分隔符属于insert语句,如下所示<代码>插入“域_步骤”值(1,1,'Safty Items','IMAGE',NULL,'you ware safety Items?1)护耳2)带灯头盔,2,0,0,NULL,0,NULL,NULL,NULL,'NONE',NULL,NULL,NULL,NULL)哎呀,这里没有显示行分隔符。让我更新这个问题。在db.execSQL(sql)中提交执行的每一行sql都用“;”分隔,因此问题似乎与insert语句中的换行符有关。
    
    -- version 1 of the database vocab table was
    --
    -- CREATE TABLE vocab
    -- ( _id INTEGER PRIMARY KEY,
    --   date INTEGER,
    --   list_id TEXT NOT NULL, -- this should have been INTEGER
    --   mongol TEXT NOT NULL,
    --   definition TEXT,
    --   pronunciation TEXT,
    --   audio TEXT,
    --   FOREIGN KEY(list_id) REFERENCES lists(_id)
    -- ); -- end comment (comment lines cannot end with semicolon)