Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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 Studio将Android SQLite查询标记为错误_Android_Sqlite - Fatal编程技术网

Android Studio将Android SQLite查询标记为错误

Android Studio将Android SQLite查询标记为错误,android,sqlite,Android,Sqlite,在我的一个安卓应用程序中,我使用了一些SQLite查询,自从我更新到androidstudio3.0后,这些查询开始出现问题 尽管我可以编译和运行应用程序,但它们被标记为错误 这些是查询 db.execSQL("INSERT INTO table1 (…) ... substr(replace(table2.field2, ',', ''), table1.field1, 1) … FROM table1 … WHERE …"); “替换”中出现错误: “)”或应为表达式,但得到了“repl

在我的一个安卓应用程序中,我使用了一些
SQLite
查询,自从我更新到
androidstudio3.0
后,这些查询开始出现问题

尽管我可以编译和运行应用程序,但它们被标记为错误

这些是查询

 db.execSQL("INSERT INTO table1 (…) ... substr(replace(table2.field2, ',', ''), table1.field1, 1) … FROM table1 … WHERE …");
“替换”中出现错误:

“)”或应为表达式,但得到了“replace”

我认为这是可行的,因为
replace
返回一个
字符串

以及:

“rowid”中出现错误:

应为列名或表名,获得“rowid”

我认为这也行得通,因为
SQLite
向每个表添加了一个隐式
rowid

以及:

在“?”中给出错误:

表达式应为,得到“?”

我已将此查询更改为:

db.execSQL("ATTACH DATABASE '"+getDatabasePath(DATABASE_NAME_NEW).getPath()+"' as newDB");
此外:

这就产生了以下错误:

在“字段6不喜欢”中:

“)”或“.”预期的,得到的是“不”

在“NOCASE”中:

中间、中间或分号应为get')'

我不知道这个有什么问题

这些查询正确吗?在iOS中是相同的,并且运行良好

更新:

这些是完整的查询(不幸的是,由于客户端的安全策略,我必须更改表和字段的名称,但我希望可以检测到错误)


@馄饨这里有一个使用MVP设计的建议,这是一个数据库模型,在这个模型中,数据库表中的每个项目都有一组get和set。 接下来,在一个名为DBHelper的活动中处理所有CRUD,然后您可以从任何其他活动中调用它,从而大大减少出错的机会。是的,我使用db.execSQL,但是一旦您在DBHelper中有了要更新或插入的字符串,生活就好了。下面是一个来自DBHelper活动提示的代码示例,请阅读有关MVP的内容

    /* Update Record in Database*/
public void updateDBRow(String rowid,String website, String username, String password, String question,String answer, String notes){

    db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();

    cv.put(Col_WS,website);
    cv.put(Col_UN,username);
    cv.put(Col_PW,password);
    cv.put(Col_SQ,question);
    cv.put(Col_SA,answer);
    cv.put(Col_NOTES,notes);

    /*NOTE WHERE THE quotation MARKS ARE */
    db.update(TABLE_INFO,cv, Col_ID + " = ?",new String[] { rowid });
    db.close();
}

你能发布完整的查询吗?你配置了什么Android版本?我已经配置了Android 23(6.0)。关于完整的查询,我将尝试发布。@Wonton您能发布您的查询作为答案吗?
db.execSQL("ATTACH DATABASE '"+getDatabasePath(DATABASE_NAME_NEW).getPath()+"' as newDB");
db.execSQL("UPDATE table1 SET field1=0 WHERE field2 IN 
(SELECT field2 FROM table2 WHERE field3 LIKE '%blablabla%' OR field4 LIKE '%blebleble%' OR (field5 LIKE '%bliblibli%' AND field6 NOT LIKE '%blobloblo%') 
COLLATE NOCASE)");
db.execSQL("INSERT INTO table1 (field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14) " +
                    "SELECT t6.field1, t7.field2, t3.field4, t3.field5, CASE WHEN t5.field1='1' THEN '11' " +
                    "WHEN t5.field1='2' THEN '22' WHEN t5.field1='3' THEN '33' WHEN t5.field1='4' THEN '44' " +
                    "ELSE t5.field1 END AS newfield1, t4.field1, CASE WHEN t2.field1 = '0' THEN t4.field2 " +
                    "ELSE substr(replace(t4.field3, ',', ''), t2.field1, 1) END AS newfield2, t2.field4, '0', -1, '0', '1', -1, t8.field1 " +
                    "FROM table2 AS t2, table3 AS t3, table4 AS t4, table5 AS t5, table6 AS t6, table7 AS t7, table8 AS t8 " +
                    "WHERE t2.field2=t3.field3 AND t2.field3=t4.field1 AND t2.field3=t5.field2 AND t3.field2=t7.field2 AND " +
                    "t3.field1=t6.field1 AND substr(t5.field1, 1, 1) IN ('1', '2', '3', '4') AND substr(t5.field1, 2, 1) IN ('1', '2', '3', '4') AND t2.field5=t8.field2");

db.execSQL("DELETE FROM table1 WHERE table1.rowid IN (SELECT table1.rowid FROM table1, table4 AS t4 WHERE table1.field6=t4.field1 AND (((t4.field2 NOT LIKE '%%' || substr(table1.field5, 1,1) || '%%') AND (t4.field3 NOT LIKE '%%' || substr(table1.field5, 1,1) || '%%')) OR ((t4.field2 NOT LIKE '%%' || substr(table1.field5, 2,1) || '%%') AND (t4.field3 NOT LIKE '%%' || substr(table1.field5, 2,1) || '%%'))))");

db.execSQL("ATTACH DATABASE ? as newDB", new String[] { getDatabasePath(DATABASE_NAME_NEW).getPath() });
Changed to:
db.execSQL("ATTACH DATABASE '"+getDatabasePath(DATABASE_NAME_NEW).getPath()+"' as newDB");
And the error is gone.

db.execSQL("UPDATE table1 SET field13=1 WHERE field2 IN (SELECT t7.field2 FROM table7 AS t7 WHERE t7.field1='Text1' OR t7.field1='Text2' OR t7.field1 LIKE '%TEXT3%' OR t7.field1 LIKE '%TEXT4%' OR t7.field1 LIKE '%TEXT5%' OR t7.field1 LIKE '%TEXT6%' OR (t7.field1 LIKE '%TEXT7%' AND t7.field1 NOT LIKE '%TEXT8%') COLLATE NOCASE)");
    /* Update Record in Database*/
public void updateDBRow(String rowid,String website, String username, String password, String question,String answer, String notes){

    db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();

    cv.put(Col_WS,website);
    cv.put(Col_UN,username);
    cv.put(Col_PW,password);
    cv.put(Col_SQ,question);
    cv.put(Col_SA,answer);
    cv.put(Col_NOTES,notes);

    /*NOTE WHERE THE quotation MARKS ARE */
    db.update(TABLE_INFO,cv, Col_ID + " = ?",new String[] { rowid });
    db.close();
}