【问题标题】:rawQuery(query, selectionArgs)rawQuery(查询,selectionArgs)
【发布时间】:2012-05-22 19:28:27
【问题描述】:

我想使用选择查询从表中检索数据。我发现,rawQuery(query, selectionArgs) 类的 rawQuery(query, selectionArgs) 方法可以检索数据。但是我不知道queryselectionArgs应该如何传递给rawQuery方法?

【问题讨论】:

标签: android sqlite


【解决方案1】:
rawQuery("SELECT id, name FROM people WHERE name = ? AND id = ?", new String[] {"David", "2"});

你传递一个字符串数组,它的元素数量与你的 "?" 相同

【讨论】:

  • rawQuery("SELECT id, name FROM people WHERE ?= ?", new String[] {"column_name", "David"});,这是一个有效的查询吗?
  • @theapache64 这不是一个有效的查询。这 '?'仅适用于值。
【解决方案2】:

也许这对你有帮助

Cursor c = db.rawQuery("query",null);
int id[] = new int[c.getCount()];
int i = 0;
if (c.getCount() > 0) 
{               
    c.moveToFirst();
    do {
        id[i] = c.getInt(c.getColumnIndex("field_name"));
        i++;
    } while (c.moveToNext());
    c.close();
}

【讨论】:

    【解决方案3】:

    rawQuery 的一个示例 - db.rawQuery("select * from table where column = ?",new String[]{"data"});

    【讨论】:

    【解决方案4】:

    请参阅下面的代码,它可能会对您有所帮助。

    String q = "SELECT * FROM customer";
    Cursor mCursor = mDb.rawQuery(q, null);
    

    String q = "SELECT * FROM customer WHERE _id = " + customerDbId  ;
    Cursor mCursor = mDb.rawQuery(q, null);
    

    【讨论】:

    • 为什么投票赞成?这没有说明如何正确使用rawQuery 提供的功能。其目的是避免连接字符串等。此外,应该接受 Rawkode 的回答。
    • 这不是 rawQuery 应该使用的方式,你应该使用 ?作为占位符和填充它们的第二个参数。
    • 无论您应该“如何”使用 rawQuery(),在除 Java 之外的所有其他语言中,这都是更明智、更简短、更易于理解和更标准的方式。所以这是首选。
    • @aMiGo 该字符串无论如何都会连接到下面的图层。
    • 如果你连接一个字符串值,你会遇到字符 ' (字符串中需要 2 个)和字符 ; (可能会产生副作用)。假设 CustomerDbId 是一个字符串,内容为 -- '123';从客户那里删除——然后你会丢失所有数据!
    【解决方案5】:

    如果你的 SQL 查询是这样的

    SELECT id,name,roll FROM student WHERE name='Amit' AND roll='7'
    

    那么 rawQuery 将是

    String query="SELECT id, name, roll FROM student WHERE name = ? AND roll = ?";
    String[] selectionArgs = {"Amit","7"} 
    db.rawQuery(query, selectionArgs);
    

    【讨论】:

      【解决方案6】:

      为了完整性和正确的资源管理:

              ICursor cursor = null;
              try
              {
      
                  cursor = db.RawQuery("SELECT * FROM " + RECORDS_TABLE + " WHERE " + RECORD_ID + "=?", new String[] { id + "" });
      
                  if (cursor.Count > 0)
                  {
                      cursor.MoveToFirst();
                  }
                  return GetRecordFromCursor(cursor); // Copy cursor props to custom obj
              }
              finally // IMPORTANT !!! Ensure cursor is not left hanging around ...
              {
                  if(cursor != null)
                      cursor.Close();
              }
      

      【讨论】:

        【解决方案7】:
        String mQuery = "SELECT Name,Family From tblName";
        Cursor mCur = db.rawQuery(mQuery, new String[]{});
        mCur.moveToFirst();
        while ( !mCur.isAfterLast()) {
                String name= mCur.getString(mCur.getColumnIndex("Name"));
                String family= mCur.getString(mCur.getColumnIndex("Family"));
                mCur.moveToNext();
        }
        

        姓名和家庭是你的结果

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多