Android 如何从SQL数据库中选择特定字符串?
我花了几个小时试图解决这个问题,但我得到的唯一答案是我不能从字符串中选择?是这样吗?否则我怎么做?这是我的密码: 公共字符串getHotness(字符串l){ //TODO自动生成的方法存根Android 如何从SQL数据库中选择特定字符串?,android,sql,database,select,Android,Sql,Database,Select,我花了几个小时试图解决这个问题,但我得到的唯一答案是我不能从字符串中选择?是这样吗?否则我怎么做?这是我的密码: 公共字符串getHotness(字符串l){ //TODO自动生成的方法存根 String[] columns = new String []{ KEY_ROWID, KEY_NAME, KEY_HOTNESS}; Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + l, nu
String[] columns = new String []{ KEY_ROWID, KEY_NAME, KEY_HOTNESS};
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + l, null, null, null, null);
int iHotness = c.getColumnIndex(KEY_HOTNESS);
if (c != null){
c.moveToFirst();
String hotness = c.getString(iHotness);
return hotness;
}
return null;
}
其中l是我数据库中一个人的名字。我如何通过他的名字从这个人那里选择和获取信息
谢谢!你们是最棒的!LIKE就是你们要找的东西。%n在你的名字匹配之前表示任何东西。?你的名字之前只表示1个字符。如果你确保名字完全匹配,你需要使用name='yourname'
Cursor c = null;
try {
c = ourDatabase.rawQuery("SELECT * from yourtable where name LIKE '%yourname%', null);
if (c != null && c.getCount() > 0 && c.moveToFirst()) {
do {
c.getString(....);
} while (c.moveToNext());
}
} catch (Exception e) { e.printStackTrace(); }
finally {
if (c != null) c.close();
}
您可以使用select的WHERE子句仅选择符合特定条件的记录。对于方法,您需要使用第三个参数 其他考虑:
- 您应该使用参数,而不是串联值,以避免常见问题(如SQL注入)
- 无需检查返回的
游标
是否为空,它永远不会为空(如文档中所述)
- 在从该方法返回之前,还应关闭
光标
final String theName = "The person name";
Cursor c = null;
try {
c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NAME + " = ?", new String[]{theName}, null, null, null);
if (c.moveToNext()) {
// Do your stuff
}
} finally {
if (c != null) {
c.close();
}
}`
请注意,前面的查询只会匹配KEY\u NAME
列为的行,而列正好是名称
值。如果要按包含名称
值的名称搜索,则需要改用LIKE
运算符
final String likeName = "%" + theName + "%";
final Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NAME + " LIKE ?", new String[]{likeName}, null, null, null);
无用的复杂。它是光标
,c
从来都不是空的,你不需要if
,也不需要do/while
。问题也从来没有说过它需要LIKE操作符。不,不是。检查我更新的答案为什么你应该验证它。是的。再次检查我的注释:c从来都不是空的,你不需要if,也不需要need do/while。我不会投反对票,因为它是正确的(不知何故)。等等,你说“你应该使用参数而不是连接值以避免常见问题(如SQL注入)”是什么意思?我的意思是:KEY\u ROWID+“=”+l
有安全漏洞,而这个KEY\u NAME+“=?”
没有(至少不在你的代码中)。你可以查看更多详细信息。为什么?我还没来呢?我已经在之前的评论中添加了一个链接。有关SQL参数的更多详细信息,请查看。