2011-05-16 42 views
0

朋友,針對與查詢相關的數據庫問題編譯的sql語句緩存達到了最大大小?

我寫了下面的似乎是錯誤的sqlite插入語句。 插入行之前我檢查,如果記錄存在,然後插入不(ATM數據超過600條記錄)

用於編譯SQL語句緩存從cache.select 1 database.no空間,這條SQL語句已達最大尺寸atm atmid = 251請改變你的sql語句以使用「?」對於bindargs代替

public void addAtm(ATM atm) 
    { 

db.execSQL("INSERT INTO " + AtmsTable.NAME + 
     "(" +AtmsTable.COL_ID + "," 
     +AtmsTable.COL_BankID +"," 
     + AtmsTable.COL_BankNAME+"," 
     + AtmsTable.COL_BankPhone+"," 
     + AtmsTable.COL_BankAddress+"," 
     + AtmsTable.COL_BankCoordinates+"," 
     + AtmsTable.COL_BankCity+"," 
     + AtmsTable.COL_BankWebaddress+") Values (" 
     +atm.getAtmID()+"," 
     +atm.getBankID() 
     + ",'" + atm.getBankName().trim() 
     +"','" + atm.getPhone() 
     +"','" + atm.getAddress() 
     +"','" + atm.getCoordinates() 
     +"','" + atm.getCity() 
     +"','" + atm.getWebAddress()+ "');"); 

} 

public boolean atmExists(int atmId) 
    { 
     OpenIfNotOpened(); 
     Cursor cursor = db.rawQuery("select 1 from " + AtmsTable.NAME +" where " + AtmsTable.COL_ID + "=" + atmId,null); 
       boolean exists = (cursor.getCount() > 0); 
       cursor.close(); 
       return exists; 
    } 

和我收到以下錯誤消息

任何幫助,將不勝感激。

+0

正在使用你的交易? – Selvin 2011-05-16 15:29:17

回答

1

公共無效execSQL(SQL字符串)

自:API級別1執行單 SQL語句不是SELECT或 返回 數據的任何其他SQL語句。它無法返回任何 數據(例如受影響的 行的數量)。相反,鼓勵您在可能的情況下使用insert(String,String, ContentValues),update(String, ContentValues,String,String [])等。

只需使用:

ContentValues vals = new ContentValues(); 
vals.put(AtmsTable.COL_BankID, atm.getBankID()); 
vals.put(AtmsTable.COL_BankNAME, atm.getBankName().trim()); 
/... 
if(db.update(AtmsTable.NAME, vals, AtmsTable.COL_ID + "=?", new String[]{Integer.toString(atm.getAtmID())}) == 0){ 
    vals.put(AtmsTable.COL_ID, atm.getAtmID()); 
    db.insert(AtmsTable.NAME, null, vals); 
}