2010-05-10 42 views
0

我有一个小的Android应用程序,目前我在android中触发一个sql语句来获取特定where子句的数据库中的行数。在Android中记录SQL语句;由应用程序启动

下面是我的示例代码:

public boolean exists(Balloon balloon) { 
    if(balloon != null) { 
     Cursor c = null; 
     String count_query = "Select count(*) from balloons where _id = ?"; 
     try { 
      c = getReadableDatabase().rawQuery(count_query, new String[] {balloon.getId()}); 
      if (c.getCount() > 0) 
       return true; 

     } catch(SQLException e) { 
      Log.e("Running Count Query", e.getMessage()); 
     } finally { 
      if(c!=null) { 
       try { 
        c.close(); 
       } catch (SQLException e) {} 
      } 
     } 
    } 
    return false; 
} 

此方法返回我的计数1,即使数据库表本身就是空的。我无法弄清楚;为什么会发生。在数据库中运行相同的查询让我的计数为0.

我想知道是否有可能在日志中记录或查看所有最终在参数替换后被数据库触发的sql查询;这样我就能明白出了什么问题。

干杯

+0

可以尝试更改C = getReadableDatabase()rawQuery(count_query,新的String [] {balloon.getId()})。分成多行,每行做一件事,然后检查每一行? – 2010-05-10 10:19:02

回答

3

该查询总是会返回一个记录(如将任何SELECT COUNT)。原因是,它返回的记录包含一个字段,用于指示具有该ID的“气球”表中有多少条记录。

换句话说,一个记录(c.getcount()==1)并不是说在气球中找到的记录数是1,而是由Sqlite生成的记录,其中包含带结果的字段。

要找出气球的数量,你应该c.movetofirst()然后numberOfBalloons = c.getInt(0)

+0

谢谢。这让我朝着正确的方向前进。 – Priyank 2010-05-10 17:17:27