数据库:
if (DatabaseUtils.queryNumEntries(foodDBHlpr.getWritableDatabase(),FoodDatabaseHelper.TABLE_NAME ) < 1) {
foodDBHlpr.insertFood("John", "Mashed potato");
foodDBHlpr.insertFood("Johnson", "Pineapple pie");
}
SQL查询
public Cursor getFoodsWithProvidedFood(String provided_food) {
return this.getWritableDatabase().query(
TABLE_NAME,
null,
COL_2 + " LIKE '%" +provided_food.replace("'", "''") + "%' ",
null,
null,
null,
null
);
搜索
mCsr = foodDBHlpr.getFoodsWithProvidedFood(alfabetsearch);
while (mCsr.moveToNext()) {
PreferredFood=mCsr.getString(mCsr.getColumnIndex(FoodDatabaseHelper.COL_3));
}
当我使用“Like”查询时,一切都正常,但是当我查找John时,它会显示John和Johnson的两个结果,因为它们是相似的。但当我搜索约翰时,它必须只显示约翰(而不是约翰逊)的结果。
到目前为止,我试过:
1. COL_2 + "="+"" +provided_food.replace("'", "''")+",
1. COL_2 + "=" +provided_food.replace("'", "''") + " ",
但它不起作用LogCat:
E/SQLiteLog: (1) no such column: John in "SELECT * FROM dataset WHERE Food=John"
--------- beginning of crash
2022-03-27 18:44:09.867 7571-7639/com.example.humanuz E/AndroidRuntime: FATAL EXCEPTION: Thread-3
Process: com.example.humanuz, PID: 7571
android.database.sqlite.SQLiteException: no such column: John (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM dataset WHERE Food=John
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1045)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:652)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1545)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1392)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1263)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1431)
at com.example.humanuz.FoodDatabaseHelper.getFoodsWithProvidedFood(FoodDatabaseHelper.java:60)
at com.example.humanuz.MainActivity.Search(MainActivity.java:3805)
请给我一个提示。
不应该将Java字符串连接到sql代码
这不安全,不建议使用
使用query()
的3d参数来构造sql语句的WHERE
cause with
要传递的参数的占位符,以及第四个参数,它应该是一个包含参数值的字符串数组:
public Cursor getFoodsWithProvidedFood(String provided_food) {
String selection = COL_2 + " LIKE '%' || ? || '%'";
String[] selectionArgs = new String[] {provided_food};
return this.getWritableDatabase().query(
TABLE_NAME,
null,
selection,
selectionArgs,
null,
null,
null
);
}
如果要使用
=
运算符,请将选择
字符串更改为:
String selection = COL_2 + " = ?";
这样,就不用担心参数值中的单引号,因为它们由方法
query()
处理。
这是因为SQL如何处理您的查询。在您的time子句中,SQL将John
作为表列而不是String引用。因此,SQL试图将John
作为表列查找,但失败了。这可以通过简单地在代码库中的值周围添加引号来解决,如下所示:
COL_2 + "'" +provided_food.replace("'", "''") + "'"
或者
COL_2 + "\"" +provided_food.replace("'", "''") + "\""
Like
查询之所以有效,是因为您在值周围放置了”
(单引号)。类似地,一旦在值周围加上一些引号(单引号或双引号),就可以了。
问题内容: 我正在使用嵌套集模型在iPhone上的本地SQLite数据库中存储较大的数据层次结构。我从他们的网站上阅读了MySQL技术文章,了解如何执行此操作,但是他们建议的查询(以及我需要的查询)之一似乎不适用于SQLite,并且我不确定如何解决它。 SQLite报告不是列,我认为这是因为其子查询实现不完整。有人对如何解决此限制有任何想法吗? 查询的目的是获取给定父节点的所有直接子代。 问题答案
你能帮我解决这个问题吗?我想使用此方法在我的数据库中查找特定的缺口(它是由Apache Derby制作的)。我使用了EntityManager并从NetBeans中的数据库中映射持久性-实体类。 我得到这个错误: Java . lang . illegalargumentexception:在EntityManager中创建查询时出现异常:< br >异常描述:解析[SELECT * FROM U
问题内容: 非常感谢你的帮助。我有一个和表。位置 我对位置模型执行以下查询。 然后,我要对其执行附加查询并根据以下内容对其进行过滤 该查询并 没有 工作。它返回一个空对象。 这是参数: location_params 1} permitted: true> ads_params 1} permitted: true> 不允许这样输入特定的列: 我有postgresql,我没有考虑过使用SQL,但是
我想让ElasticSearch在我的盒子上工作。我有以下映射: 所以我有一个“运动鞋”索引,它有一个“运动鞋”类型,一个“品牌”属性,它有一个“ID”和一个“标题”。 检查运动鞋是否存在,运行curl-xget“http://localhost:9200/sneakers/sneaker/1?prettley”,我得到: 现在,runningcurl-xget'http://localhost:
问题内容: 我有一个非常简单的查询,像这样: 我的默认设置是或某些用户ID,但是由于某种原因,该查询总是返回0行,我也尝试过,但还是没有运气,这可能是什么错误? EDTI 因此,在运行更多查询后,我发现我的问题是字段的默认值,因此我修改了查询,现在可以正常使用: 问题答案: NULL值需要特殊处理:http : //dev.mysql.com/doc/refman/5.1/en/working-w
问题内容: 我有一个单元格,其中包含用双管道分隔的值。我正在尝试使用以下内容搜索此单元格的内容,(其中10是要搜索的数字)%10、10%,%10%和10 我的查询似乎只返回10。没有其他变化。有人可以告诉我为什么它不起作用吗? 提前谢谢了。(您在下面看到的SQL查询是从准备好的PDO查询语句中导出的内容) 问题答案: 我认为您应该使用LIKE而不是=: