gpt4 book ai didi

java - Android SQLite 不喜欢语法

转载 作者:行者123 更新时间:2023-12-01 16:42:50 25 4
gpt4 key购买 nike

我想从数据库中选择与已存在的名称不匹配的名称。使用此代码,抛出错误:No such table

public String getRandomAnswer(String correctName){
String randomAnswer;
mDbHelper.initializeDataBase();
try {
mDb = mDbHelper.getWritableDatabase();
String sql = "SELECT Name FROM Cities WHERE Name NOT LIKE " + correctName + " ORDER BY Random() LIMIT 1 ";
Cursor c = mDb.rawQuery(sql, null);
if (c != null) {
if (c.moveToFirst()) {
randomAnswer = c.getString(c.getColumnIndex("Name"));
return randomAnswer;
}
c.close();
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
mDbHelper.close();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
mDb.close();
}
}
return null;
}

但是如果我直接输入单词String sql = "SELECT Name FROM Cities WHERE Name NOT LIKE 'someOtherName' ORDER BY Random() LIMIT 1 ";比它有效,但它不是我想要的。

最佳答案

考虑 SQL 参数化而不是字符串连接,因为您需要将变量括在单引号中。否则,引擎假定您引用列或表标识符。方法rawQuery支持参数。此外,不带通配符的 LIKE 应使用相等性 =。但如果需要通配符,请附加到参数。

// PREPARED STATEMENT WITH QMARKS, ?
String sql = "SELECT Name FROM Cities WHERE Name NOT LIKE ? ORDER BY Random() LIMIT 1 ";

// QUERY EXECUTION WITH BINDED VALUE AND WILDCARDS
Cursor c = mDb.rawQuery(sql, new String[]{ "%"+correctName+"%" });

关于java - Android SQLite 不喜欢语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61829893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com