有关如何使用Rawquery传递参数的说明

时间:2014-11-13 20:49:40

标签: android sqlite

我在onCreate中创建的SQLite数据库中有三个表。 我没有数据记录只需要查询表格进行计算并在屏幕上显示。 这是我需要做的sql,以获得我需要的3个变量。 sql只返回一个不是列表的记录。

 SELECT
        table1.nome,
        table1.valorinicial,
        table2.valorkm
    FROM
        table3
    INNER JOIN bandeira ON table1. ID = table3.bandeira_id
    INNER JOIN tarifacorrida ON table2. ID = table1.tarifacorrida_id
    WHERE
        ? BETWEEN table3.datainicio
    AND table3.datafim
    OR table3.datainicio <= ?
    AND table3.datafim IS NULL
    AND ? BETWEEN table3.horainicio
    AND table3.horafim
    AND ? = TRUE;

Rawquery研究并认为它是最好的解决方案,但不了解如何运行sql,因为我将这些参数传递给sql并获取我需要的三个变量,有人可以向我详细解释,以便我能理解并应用这里吗?

  public ExampleVO getExample(){
        SQLiteDatabase db = new DB(ctx).getReadableDatabase();
        Cursor rs = db.rawQuery(sql, null);

        ExampleVO vo = null;

        if (rs.moveToFirst()){
            vo = new ExampleVO();
            vo.setValor(rs.getString(rs.getColumnIndex("ColumnName")));


        }

        return vo;
    }

1 个答案:

答案 0 :(得分:0)

我认为你可以使用String.format用参数填充sql,然后你不需要rawQuery的参数(第二个参数将为null,就像目前一样)

如果你想使用参数(带有?符号的sql),那么args参数需要是一个String数组,例如:

Cursor cc = db.rawQuery("select col1 from table where col2=? and col3=?",new String[] { "value for col2", "value for col3" });

使用String.format( EDITED :这是不正确的方式,请参阅下面的评论。所以唯一的第一种情况是正确的):

String sql = String.format("select col1 from table where col2=%s and col3=%s","value for col2", "value for col3");
Cursor cc = db.rawQuery(sql, null);