如何在 android 的数据库中的 table 的特定行中搜索字符串匹配
How to search for string match in specific row of table in database in android
我正在构建一个应用程序并第一次处理数据库我试图将数据文本作为输入并在特定行中搜索它的匹配项。我没有做到这一点。
我已经选择了特定的行。我有六列,我根据 id 得到了特定的行,但是比较其他五列中的输入文本给出了有问题的输出。
使用我在下面的代码中给出的方法,它在将它与第一列或最后一列条目进行比较后给出结果,但不是全部。
public Cursor finddata(String name,int ida, int guess){
String Query = "SELECT NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME1='" +name+ "'";
cursor=db.rawQuery(Query,null);
check=1;
if(cursor==null){
String Query2 = "SELECT NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME2='" +name+ "'";
cursor=db.rawQuery(Query2,null);
check=2;
}
if(cursor==null){
String Query3 = "SELECT NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME3='" +name+ "'";
cursor=db.rawQuery(Query3,null);
check=3;
}
if(cursor==null){
String Query4 = "SELECT NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME4='" +name+ "'";
cursor=db.rawQuery(Query4,null);
check=4;
}
if(cursor==null){
String Query5 = "SELECT NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME5='" +name+ "'";
cursor=db.rawQuery(Query5,null);
check=5;
}
if(cursor==null){
String Query6 = "SELECT NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME6='" +name+ "'";
cursor=db.rawQuery(Query6,null);
}
return cursor;
}
我认为我在游标上应用的 if 条件有一些错误
"if(cursor==null)" 因为它只是通过比较第一条语句而不是 if 来给出答案,即使它在第一条语句中是否匹配。
如果有一些直接的查询语句可以做到这一点????
我在互联网上搜索了很多,但找不到解决方案。
如果可以的话,请不要让我直接回答已经回答的问题并回答这个问题。
此致
public Cursor finddata(String name,int ida, int guess){
String Query = "SELECT NAME1 FROM Capital_Names
WHERE ID = '" + ida + "'
AND
(
NAME1='" +name+ "' OR NAME2='" +name+ "' OR NAME3='" +name+ "' OR
NAME4='" +name+ "' OR NAME5='" +name+ "')"
;
return db.rawQuery(Query,null);
}
试试这个...
你做错的是你检查了 rawQuery()
编辑的 Cursor
对象 return 是否是 null
。
rawQuery()
returns 一个 Cursor
可能是空的(没有任何行)但它永远不会是 null
.
您可以通过检查其 moveToFirst()
方法来检查 Cursor
中是否有任何行。
也不要使用 sql 语句参数的连接。不安全。
使用占位符 ?
和 rawQuery()
的第二个参数来传递参数。
所以改为:
public Cursor finddata(String name, int ida, int guess){
String sql = "SELECT NAME1 FROM Capital_Names " +
"WHERE ID = ? AND ? IN (NAME1, NAME2, NAME3, NAME4, NAME5)";
return db.rawQuery(sql, new String[] {ida, name});
}
您的代码中似乎没有使用 finddata()
的参数 guess
,因此您可以将其删除。
另外,您确定只想 return 列 NAME1
吗?您可以将其替换为 "SELECT * FROM..."
到 return 所有列。
我正在构建一个应用程序并第一次处理数据库我试图将数据文本作为输入并在特定行中搜索它的匹配项。我没有做到这一点。
我已经选择了特定的行。我有六列,我根据 id 得到了特定的行,但是比较其他五列中的输入文本给出了有问题的输出。 使用我在下面的代码中给出的方法,它在将它与第一列或最后一列条目进行比较后给出结果,但不是全部。
public Cursor finddata(String name,int ida, int guess){
String Query = "SELECT NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME1='" +name+ "'";
cursor=db.rawQuery(Query,null);
check=1;
if(cursor==null){
String Query2 = "SELECT NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME2='" +name+ "'";
cursor=db.rawQuery(Query2,null);
check=2;
}
if(cursor==null){
String Query3 = "SELECT NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME3='" +name+ "'";
cursor=db.rawQuery(Query3,null);
check=3;
}
if(cursor==null){
String Query4 = "SELECT NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME4='" +name+ "'";
cursor=db.rawQuery(Query4,null);
check=4;
}
if(cursor==null){
String Query5 = "SELECT NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME5='" +name+ "'";
cursor=db.rawQuery(Query5,null);
check=5;
}
if(cursor==null){
String Query6 = "SELECT NAME1 FROM Capital_Names where ID = '" + ida + "' and NAME6='" +name+ "'";
cursor=db.rawQuery(Query6,null);
}
return cursor;
}
我认为我在游标上应用的 if 条件有一些错误 "if(cursor==null)" 因为它只是通过比较第一条语句而不是 if 来给出答案,即使它在第一条语句中是否匹配。
如果有一些直接的查询语句可以做到这一点????
我在互联网上搜索了很多,但找不到解决方案。 如果可以的话,请不要让我直接回答已经回答的问题并回答这个问题。 此致
public Cursor finddata(String name,int ida, int guess){
String Query = "SELECT NAME1 FROM Capital_Names
WHERE ID = '" + ida + "'
AND
(
NAME1='" +name+ "' OR NAME2='" +name+ "' OR NAME3='" +name+ "' OR
NAME4='" +name+ "' OR NAME5='" +name+ "')"
;
return db.rawQuery(Query,null);
}
试试这个...
你做错的是你检查了 rawQuery()
编辑的 Cursor
对象 return 是否是 null
。
rawQuery()
returns 一个 Cursor
可能是空的(没有任何行)但它永远不会是 null
.
您可以通过检查其 moveToFirst()
方法来检查 Cursor
中是否有任何行。
也不要使用 sql 语句参数的连接。不安全。
使用占位符 ?
和 rawQuery()
的第二个参数来传递参数。
所以改为:
public Cursor finddata(String name, int ida, int guess){
String sql = "SELECT NAME1 FROM Capital_Names " +
"WHERE ID = ? AND ? IN (NAME1, NAME2, NAME3, NAME4, NAME5)";
return db.rawQuery(sql, new String[] {ida, name});
}
您的代码中似乎没有使用 finddata()
的参数 guess
,因此您可以将其删除。
另外,您确定只想 return 列 NAME1
吗?您可以将其替换为 "SELECT * FROM..."
到 return 所有列。