在ICS(4.0.4)中获取SQLite语法错误,但在其他版本上工作正常吗?

时间:2013-01-16 01:47:48

标签: android database sqlite

SQL是

INSERT INTO "quotes" VALUES(1,1,1,'This is a quote','This is a quote in german','By Me','jackson',1,1,1305587611,'0','Thriller');

我从文本文件中读取后使用db.execSQL来执行此行。

            InputStream is = myContext.getResources().openRawResource(R.raw.quotesinsert);
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String readLine = null;
            db.execSQL(QUOTE_DB_CREATE);                    
            while ((readLine = br.readLine()) != null) {
                db.execSQL(readLine); 
            }

这适用于Android的所有其他版本,但在ICS(4.0.4)上崩溃

01-14 02:07:46.271: E/AndroidRuntime(1802): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.foo.quotesapp/com.foo.quotesapp.QuoteList}: android.database.sqlite.SQLiteException: near "?INSERT": syntax error

我已经尝试了在单独的SQLite程序中创建表和插入的SQL,它们工作正常,可能会发生什么?

2 个答案:

答案 0 :(得分:1)

您的文本文件采用UTF-8编码,并使用在开头插入byte order mark的程序创建。

从文件读取时,Java / Android运行时不会删除此字符;你必须自己做这件事 (这种行为是故意的;请参阅UTF-8 encoding does not recognize initial BOMUTF-8 decoder handling of byte-order mark has changed。)

答案 1 :(得分:0)

确保sql语句为Single(SQL语句之前的空格和空格)