Достигнут ли максимальный размер для скомпилированного кэша операторов SQL для проблемы базы данных, связанной с запросом - PullRequest
0 голосов
/ 16 мая 2011

друзья

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

Достигнут максимальный размер для скомпилированного кэша операторов SQL для базы данных. Нет места для этого оператора SQL в cache.select 1 из atm, где atmid = 251. Пожалуйста, измените свой SQL-оператор на "?" для биндаргов вместо

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;
    }

и я получаю следующее сообщение об ошибке

любая помощь будет оценена.

1 Ответ

1 голос
/ 16 мая 2011

public void execSQL (String sql)

С: API уровня 1 Выполнить один Оператор SQL, который НЕ является SELECT или любой другой оператор SQL, который возвращает данные. У него нет средств вернуть данные (например, количество пострадавших строки). Вместо этого вам рекомендуется использовать вставку (String, String, ContentValues), обновление (String, ContentValues, String, String []), et al, когда это возможно.

просто используйте:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...