达到最大大小编译SQL语句缓存来查询相关的数据库问题? [英] Reached max size for compiled sql statement cache for database problem related to query?

查看:90
本文介绍了达到最大大小编译SQL语句缓存来查询相关的数据库问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

朋友,

我写了下面这似乎是错误的sqlite的INSERT语句。
在插入行之前我检查,如果记录存在,然后插入不(ATM数据超过600条记录)

达到最大尺寸为编译SQL语句缓存从ATM中cache.select 1 database.no空间,这条SQL语句,其中atmid = 251,请改变你的SQL说明书用?对于bindargs,而不是

 公共无效addAtm(ATM自动取款机)
    {db.execSQL(插入+ 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 +)值(
        + atm.getAtmID()+,
        + atm.getBankID()
        +,'+ atm.getBankName()。修剪()
        +,+ atm.getPhone()
        +,+ atm.getAddress()
        +,+ atm.getCoordinates()
        +,+ atm.getCity()
        +','+ atm.getWebAddress()+'););}

 公共布尔atmExists(INT atmId)
    {
        OpenIfNotOpened();
         光标的光标= db.rawQuery(+ AtmsTable.NAME +,其中+ AtmsTable.COL_ID +=+ atmId,空从选择1);
               布尔存在=(cursor.getCount()大于0);
               cursor.close();
               返回的存在;
    }

和我收到以下错误消息

任何帮助将是AP preciated。


解决方案

  

公共无效execSQL(SQL字符串)


  
  

自:API级别1执行单
  SQL语句不是SELECT或
  返回其他任何SQL语句
  数据。它没有装置返回任何
  数据(如受影响数
  行)。相反,我们鼓励你
  使用insert(字符串,字符串,
  ContentValues​​),更新(字符串,
  ContentValues​​,字符串,字符串[]),等。
  人,如果可能的话。


只需使用:

  ContentValues​​丘壑=新ContentValues​​();
vals.put(AtmsTable.COL_BankID,atm.getBankID());
vals.put(AtmsTable.COL_BankNAME,atm.getBankName()修剪());
/ ...
如果(db.update(AtmsTable.NAME,丘壑,AtmsTable.COL_ID +=?,新的String [] {Integer.toString(atm.getAtmID())})== 0){
  vals.put(AtmsTable.COL_ID,atm.getAtmID());
  db.insert(AtmsTable.NAME,空,丘壑);
}

friends,

i have written following sqlite insert statement which seems to be wrong. before inserting row i am checking if record exists then dont insert(ATM data is more than 600 records)

Reached max size for compiled sql statement cache for database.no space for this sql statement in cache.select 1 from atm where atmid=251 please change your sql statment to use "?" for bindargs, instead of

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()+ "');");

}

and

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

and i am getting following error message

any help would be appreciated.

解决方案

public void execSQL (String sql)

Since: API Level 1 Execute a single SQL statement that is NOT a SELECT or any other SQL statement that returns data. It has no means to return any data (such as the number of affected rows). Instead, you're encouraged to use insert(String, String, ContentValues), update(String, ContentValues, String, String[]), et al, when possible.

just use:

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

这篇关于达到最大大小编译SQL语句缓存来查询相关的数据库问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆