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

时间:2014-06-12 15:10:25

标签: android sql database select

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

public String getHotness(String 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是我数据库中某人的姓名。我如何通过他的名字从这个人中选择并获取信息?

谢谢!你们是最棒的!

2 个答案:

答案 0 :(得分:0)

LIKE就是你要找的。 %表示在您的名称匹配之前的任何内容。 ?yourname表示之前只有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(); 
} 

答案 1 :(得分:0)

您可以使用选择的WHERE子句仅选择符合特定条件的记录。如果是SQLiteDatabase#query()方法,则需要使用第三个参数。

其他考虑因素:

  • 您应该使用参数而不是连接值来避免常见问题(例如SQL注入)。
  • 无需检查返回的Cursor是否为空,它永远不会(正如文档中所述)。
  • 此外,您应该在从方法返回之前关闭Cursor

示例:

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_NAME完全 theName值的行。如果您要按包含theName值的名称进行搜索,则需要使用LIKE运算符。

final String likeName = "%" + theName + "%";
final Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NAME + " LIKE ?", new String[]{likeName}, null, null, null);