2010-05-10 25 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