我试图在我的Android应用中进行SQLite查询,但由于某种原因,它无法正确获取参数。如果我对值进行硬编码,那么查询就可以了,所以我知道整个查询是正确的,数据就在那里。
...
public String[][] traerEncuestaPostventa(int idBien,
int idEncuesta)
{
String[][] arrayDatos = null;
String[] arrayArgumentos = {String.valueOf(idBien), String.valueOf(idEncuesta), String.valueOf(idBien)};
Cursor cursor = null;
cursor = querySQL("SELECT " +
"encuestadetalle.id_encuestadetalle," +
"IFNULL(encuestapostventa.id_encuestapostventa, 0) as id_encuestapostventa," +
"encuestadetalle.zona_inmueble," +
"encuestadetalle.tarea," +
"IFNULL(encuestaobservacion.id_encuestaobservacion, 0) as id_encuestaobservacion," +
"IFNULL(encuestaobservacion.observacion, '') as observacion," +
"encuestadetalle.id_encuesta," +
"IFNULL(encuestapostventa.recepcion, 0) as recepcion" +
" FROM encuestadetalle" +
" LEFT JOIN (SELECT * FROM encuestapostventa WHERE id_bien = ?) AS encuestapostventa" +
" ON encuestadetalle.id_encuestadetalle = encuestapostventa.id_encuestadetalle" +
" LEFT JOIN encuestaobservacion" +
" ON encuestapostventa.id_encuestapostventa = encuestaobservacion.id_encuestapostventa" +
" WHERE encuestadetalle.id_encuesta = ?" +
" AND (IFNULL(encuestapostventa.id_bien, 0) IN (?, 0))" +
" ORDER BY encuestadetalle.zona_inmueble, encuestadetalle.tarea", arrayArgumentos);
if(cursor.getCount() > 0)
{
int i = 0;
arrayDatos = new String[cursor.getCount()][5];
while(cursor.moveToNext())
{
//Here I handle the data;
i = i + 1;
}
}
cursor.close();
CloseDB();
return(arrayDatos);
}
...
public Cursor querySQL(String sql, String[] selectionArgs)
{
Cursor oRet = null;
// Opens the database object in "write" mode.
db = oDB.getReadableDatabase();
oRet = db.rawQuery(sql, selectionArgs);
return(oRet);
}
...
现在,如果我像这样替换查询,它可以工作:
cursor = querySQL("SELECT " +
"encuestadetalle.id_encuestadetalle," +
"IFNULL(encuestapostventa.id_encuestapostventa, 0) as id_encuestapostventa," +
"encuestadetalle.zona_inmueble," +
"encuestadetalle.tarea," +
"IFNULL(encuestaobservacion.id_encuestaobservacion, 0) as id_encuestaobservacion," +
"IFNULL(encuestaobservacion.observacion, '') as observacion," +
"encuestadetalle.id_encuesta," +
"IFNULL(encuestapostventa.recepcion, 0) as recepcion" +
" FROM encuestadetalle" +
" LEFT JOIN (SELECT * FROM encuestapostventa WHERE id_bien = 5813) AS encuestapostventa" +
" ON encuestadetalle.id_encuestadetalle = encuestapostventa.id_encuestadetalle" +
" LEFT JOIN encuestaobservacion" +
" ON encuestapostventa.id_encuestapostventa = encuestaobservacion.id_encuestapostventa" +
" WHERE encuestadetalle.id_encuesta = 3" +
" AND (IFNULL(encuestapostventa.id_bien, 0) IN (5813, 0))" +
" ORDER BY encuestadetalle.zona_inmueble, encuestadetalle.tarea", null);
我也尝试替换arrayArgumentos
中的元素,但它也没有用:
String[] arrayArgumentos = {String.valueOf(5813), String.valueOf(3), String.valueOf(5813)};
我猜它与我的数组是String []并且参数本身是整数这一事实有关。我该如何解决这个问题?
答案 0 :(得分:1)
试试这个:
String[] arrayArgumentos = {String.valueOf(idBien)};
Cursor cursor = null;
String sql="SELECT " +
"encuestadetalle.id_encuestadetalle," +
"IFNULL(encuestapostventa.id_encuestapostventa, 0) as id_encuestapostventa," +
"encuestadetalle.zona_inmueble," +
"encuestadetalle.tarea," +
"IFNULL(encuestaobservacion.id_encuestaobservacion, 0) as id_encuestaobservacion," +
"IFNULL(encuestaobservacion.observacion, '') as observacion," +
"encuestadetalle.id_encuesta," +
"IFNULL(encuestapostventa.recepcion, 0) as recepcion" +
" FROM encuestadetalle" +
" LEFT JOIN (SELECT * FROM encuestapostventa WHERE id_bien ="+String.valueOf(idBien)+ ") AS encuestapostventa" +
" ON encuestadetalle.id_encuestadetalle = encuestapostventa.id_encuestadetalle" +
" LEFT JOIN encuestaobservacion" +
" ON encuestapostventa.id_encuestapostventa = encuestaobservacion.id_encuestapostventa" +
" WHERE encuestadetalle.id_encuesta ="+String.valueOf(idEncuesta)+"" +
" AND (IFNULL(encuestapostventa.id_bien, 0) IN (?, 0))" +
" ORDER BY encuestadetalle.zona_inmueble, encuestadetalle.tarea"
cursor = querySQL(sql, arrayArgumentos);
Log.d("For DEBUG", "Sql String -->"+sql)
尝试将一些参数直接放在查询上。
然后打印您的查询以使用Log语句检查发送到数据库的内容。 问题可能出在论点上。还要记住,当等于SQL中的String时,你应该使用''。希望这会有所帮助。
答案 1 :(得分:0)
给出参数的正确格式为
rawQuery("SELECT id, name FROM people WHERE name = ? AND id = ?", new String[] {"David", "2"});
检查是否使用类似
的硬编码值...." ORDER BY encuestadetalle.zona_inmueble, encuestadetalle.tarea", new String[] {"5813", "3","5813"});