当前位置: 首页 > 面试题库 >

数据库的已编译SQL语句高速缓存达到的最大大小

陆高峰
2023-03-14
问题内容

我的代码是

ContentValues values; 
values = new ContentValues();
        values.put(SQLHelper.EMPLOYEE_LPN, jsObj.getString("lpn"));
db.update(SQLHelper.EMPLOYEE_TABLE, values,
                "EMPLOYEE_LPN ='" + jsObj.getString("lpn") + "'",
                null);

在Log Cat中显示警告

08-31 15:19:45.297: WARN/Database(2868): Reached MAX size for compiled-sql statement cache for database /data/data/org.sipdroid.sipua/databases/test.db; i.e., 
NO space for this sql statement in cache: 
SELECT EMPLOYEE_NAME FROM eyemployee WHERE EMPLOYEE_LPN ='1169162'. 
Please change your sql statements to use '?' for bindargs, instead of using actual values

怎么解决呢?


问题答案:

在这里查看示例8-3和8-4 。

示例8-3 使用更新方法

/**
 * Update a job in the database.
 * @param job_id         The job id of the existing job
 * @param employer_id    The employer offering the job
 * @param title          The job title
 * @param description    The job description
 */
public void editJob(long job_id, long employer_id, String title, String description) {
    ContentValues map = new ContentValues();
    map.put("employer_id", employer_id);
    map.put("title", title);
    map.put("description", description);
    String[] whereArgs = new String[]{Long.toString(job_id)};
    try{
        getWritableDatabase().update("jobs", map, "_id=?", whereArgs);
    } catch (SQLException e) {
        Log.e("Error writing new job", e.toString());
    }
}

以下是示例8-3中的一些代码亮点:

例8-4显示了如何使用execSQL方法。
示例8-4 使用execSQL方法

/**
 * Update a job in the database.
 * @param job_id         The job id of the existing job
 * @param employer_id    The employer offering the job
 * @param title          The job title
 * @param description    The job description
 */
public void editJob(long job_id, long employer_id, String title, String description) {
    String sql = 
        "UPDATE jobs " +
        "SET employer_id = ?, "+
        " title = ?,  "+
        " description = ? "+
        "WHERE _id = ? ";
    Object[] bindArgs = new Object[]{employer_id, title, description, job_id};
    try{
        getWritableDatabase().execSQL(sql, bindArgs);
    } catch (SQLException e) {
        Log.e("Error writing new job", e.toString());
    }
}

该消息要求您使参数使用sql变量而不是sql文字。

解析每个sql查询,生成计划,并将其存储在sql语句缓存中。

从缓存中获取具有相同文本的查询。

  --One query
SELECT * FROM Customers WHERE Id = @1   (@1 = 3)
SELECT * FROM Customers WHERE Id = @1   (@1 = 4)
SELECT * FROM Customers WHERE Id = @1   (@1 = 5)

在缓存中找不到具有不同文本(包括文字)的查询,并已(无用地)将查询添加到了该查询中。

  --Three Queries.
SELECT * FROM Customers WHERE Id = 3
SELECT * FROM Customers WHERE Id = 4
SELECT * FROM Customers WHERE Id = 5


 类似资料:
  • 我找到了关于如何计算neo4j数据库大小的以下信息:https://neo4j.com/developer/guide-sizing-and-hardware-calculator/#_disk_storage

  • 问题内容: 嗨,我正在使用Apache HTTP Client 4.0基于HTTPS协议在服务器上上传一些文件。上载的应用程序每天24x7运行。今天突然间,它开始抛出此异常- 谁能帮帮我吗?我完全不知道发生了什么事? 这是上传文件的源代码- 问题答案: 我的猜测:端口用尽了,这个问题与您的代码不直接相关,而与服务器的当前状态有关。与其他计算机的连接过多,这会导致问题。 要找什么: 服务器的使用率是

  • 本文向大家介绍SQL设置SQL Server最大连接数及查询语句,包括了SQL设置SQL Server最大连接数及查询语句的使用技巧和注意事项,需要的朋友参考一下 一、设置最大连接数 下面的T-SQL 语句可以配置SQL Server 允许的并发用户连接的最大数目。 第一句用以表示显示sp_configure 系统存储过程高级选项,使用user connections 时,要求show advan

  • 问题内容: 我试图使用s或函数读取稍大的数据集,但我一直遇到s。数据框的最大大小是多少?我的理解是,只要数据适合内存,数据帧就应该可以,这对我来说不是问题。还有什么可能导致内存错误? 就上下文而言,我试图在《2007年消费者金融调查》中阅读ASCII格式(使用)和Stata格式(使用)。该文件的dta大小约为200MB,而ASCII的大小约为1.2GB,在Stata中打开该文件将告诉我,对于22,

  • CRUD CREATE TABLE CREATE TABLE `user` ( `id` INT AUTO_INCREMENT, `name` VARCHAR (20), PRIMARY KEY (`id`) ); VARCHAR记得指定长度。 UPDATE UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 INSERT INSERT INTO 表名称 VA

  • 我正在使用hikari cp和spring boot应用程序,它有超过1000个并发用户。我已经设置了最大池大小- 当我使用 它显示的最大值为300,等于池大小。它永远不会增加超过最大池。这是故意的吗?我认为池大小意味着保持连接,以便在将来需要数据库请求时可以重用连接,但在需要时可以进行更多连接。 另外,当我删除max pool配置时,我会立即得到- HikariPool-0-连接不可用,请求在3