SQLite 运行时限制(Run-time Limits)

简介:

摘自:http://www.sqlite.org/c3ref/limit.html

int sqlite3_limit(sqlite3*, int id, intnewVal);

    该接口允许在连接的过程中(by connection basis),对连接(on a connection)的变量结构(various constructs)进行限制。第一个参数指定了被限制的设置或者查询的数据库的句柄。第二个参数指定了被限制的类别(categories),该结构定义了一系列可被限制尺寸大小的结构变量(The second parameter is one of the limit categories that define aclass of constructs to be size limited)。第三个参数是对该结构的新的限制。如下是定义的限制类别:

#define SQLITE_LIMIT_LENGTH                    0

#define SQLITE_LIMIT_SQL_LENGTH                1

#define SQLITE_LIMIT_COLUMN                    2

#define SQLITE_LIMIT_EXPR_DEPTH                3

#define SQLITE_LIMIT_COMPOUND_SELECT           4

#define SQLITE_LIMIT_VDBE_OP                   5

#define SQLITE_LIMIT_FUNCTION_ARG              6

#define SQLITE_LIMIT_ATTACHED                  7

#defineSQLITE_LIMIT_LIKE_PATTERN_LENGTH       8

#define SQLITE_LIMIT_VARIABLE_NUMBER           9

#define SQLITE_LIMIT_TRIGGER_DEPTH            10

#define SQLITE_LIMIT_WORKER_THREADS           11

详细请参考:http://www.sqlite.org/c3ref/c_limit_attached.html

 

如果一个给定的限制值是一个负值,限制不会生效。对于每一个限制的类别,在编译的过程中,已经通过C的宏定义(变量名称为SQLITE_MAX_NAME,当然限制名称为SQLITE_LIMIT_NAME),指定了该值的上限(a hard upper bound.如果指定的值超出了上限,就会将该值指定为上限(truncated to the hard upper bound Categories.

 

 不管限制值有没有改变,sqlite3_limit的返回值都是上一次的限制值。因此,如果我们想知道当前设 置的限制值是多少,就可以通过设置该函数的第三个参数,指定为-1,就可以查询该结构体的限制值是 多少。

例如:

  int permitexecutelength = sqlite3_limit(pdb, 1 , -1);
  说明:返回当前允许执行的SQL语句的长度,保存在permitexecutelength变量中。
该设计既可以用于管理客户内部的数据库,也可以控制一些不可靠的访问数据来源。一个明显的例子就是网页浏览器,她自身拥有存储历史记录,并且将从网上下载的JavaScript脚本和本地的数据库进行分离(separate databases controlled by JavaScript applications downloaded off the Internet).内部的数据库可以给一个很大的默认限制值。来自外部的访问数据库的源为了避免拒绝服务攻击,一般会给一个更加小的默认限制值。开发者可以调用sqlite3_set_authorizer()接口,来控制不可靠的SQL语句。可以使用max_page_count PRAGMA宏,来限制不可靠的脚本生成的数据库的大小。


    本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1950463,如需转载请自行联系原作者



相关文章
|
30天前
|
API 数据库 C语言
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
169 0
|
3月前
|
存储 数据库连接 数据库
Android数据存储:解释SQLite数据库在Android中的使用。
Android数据存储:解释SQLite数据库在Android中的使用。
42 0
|
2月前
|
存储 监控 安全
内网屏幕监控软件的数据存储与管理:使用SQLite数据库保存监控记录和配置信息
在当今数字化时代,安全和监控在企业和组织中变得至关重要。内网屏幕监控软件作为一种关键工具,帮助组织监视员工的活动并确保信息安全。这种软件不仅需要高效地记录和管理监控数据,还需要能够方便地进行配置和调整。本文将讨论如何使用SQLite数据库来保存监控记录和配置信息,并介绍如何通过自动化机制将监控到的数据提交到指定网站。
164 2
|
12天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
17天前
|
关系型数据库 MySQL 数据库连接
Python+SQLite数据库实现服务端高并发写入
Python中使用SQLite内存模式实现高并发写入:创建内存数据库连接,建立表格,通过多线程并发写入数据。虽然能避免数据竞争,但由于SQLite内存模式采用锁机制,可能在高并发时引发性能瓶颈。若需更高性能,可选择MySQL或PostgreSQL。
23 0
|
1月前
|
关系型数据库 数据库 C++
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
|
1月前
|
存储 SQL 数据库
django如何连接sqlite数据库?
django如何连接sqlite数据库?
46 0
|
2月前
|
SQL 数据库管理
sqlite语句order by两个字段同时排序处理
sqlite语句order by两个字段同时排序处理
21 0
|
2月前
|
SQL 关系型数据库 MySQL
Python中的数据库操作:SQLite与MySQL的连接
Python中的数据库操作:SQLite与MySQL的连接
123 0
|
2月前
|
SQL 存储 数据库
艺术型轻量级数据库 --Sqlite
艺术型轻量级数据库 --Sqlite

热门文章

最新文章