2014-11-13 2 views
-1

У меня есть три таблицы в базе данных SQLite, созданной в onCreate. У меня нет записей данных, только нужно запрашивать таблицы для расчета и отображения на экране. Это sql, который мне нужно сделать, чтобы получить 3 переменные, которые мне нужны. Sql возвращает только одну запись, а не список.Объяснение того, как использовать параметры передачи Rawquery

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

'? = TRUE' не имеет смысла. Каковы эти параметры? –

ответ

0

Я думаю, вы могли бы просто заполнить SQL с параметрами, используя string.Format, и тогда вам не нужны аргументы для rawQuery (второй аргумент будет нулевым, поскольку в настоящее время он является)

Если вы хотите использовать аргументы (? SQL с символами), то арг параметр должен быть массив строк, например:

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); 
+0

Пример полностью неправильный ... и 'select col1 из таблицы, где col2 = значение для col2 и col3 = значение для col3', которое будет производиться по формату, недействительно SQL – Selvin

+0

@ Хорошая точка Selvin. Аргументы должны быть закодированы для строковых литералов, чтобы быть «совершенно правыми» – Mixaz

+0

все равно этого недостаточно: http://xkcd.com/327/ – Selvin

Смежные вопросы