Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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 如何从SQL数据库中选择特定字符串?_Android_Sql_Database_Select - Fatal编程技术网

Android 如何从SQL数据库中选择特定字符串?

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

我花了几个小时试图解决这个问题,但我得到的唯一答案是我不能从字符串中选择?是这样吗?否则我怎么做?这是我的密码:

公共字符串getHotness(字符串l){ //TODO自动生成的方法存根

    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参数的更多详细信息,请查看。