作者:洫蜘蛛
● 准备工作:设计实例需求的界面布局。
1、启动类的界面布局需求组件:文本框1、编辑框1、按钮1、按钮2、按钮3、按钮4、按钮5、文本框2。
编辑框1用于输入数据库的文件名,按钮1-3用于打开或创建数据库,按钮4关闭数据库,按钮5用于演示数据库读写等,文本框2用于输出提示信息。
组件的属性设置:
文本框1:属性"文本"设置为"数据库文件名:"。
编辑框1:属性"文本"设置为"test",也可以设置为其他名称。
按钮1:属性"文本"设置为"打开现有数据库"。
按钮2:属性"文本"设置为"打开或创建数据库"。
按钮3:属性"文本"设置为"创建内存数据库"。
按钮4:属性"文本"设置为"关闭数据库"。
按钮5:属性"文本"设置为"执行"。
最终界面布局如下图所示:
2、添加"启动类"成员变量"数据库",数据类型为"Sqlite数据库",勾选参考(此类不能自动创建对象),如下图所示:
3、接收"启动类"的按钮被单击事件并通过来源对象区分被单击的按钮,如下图所示:
代码中的备注部分可写可不写。
● 属性方法:
● 打开数据库、打开或创建数据库、创建内存数据库
此三个方法用于创建Sqlite数据库对象,他们之间的区别:
打开数据库:打开储存在磁盘(储存卡)内的数据库文件,未指定特定参数时该文件必须存在。
打开或创建数据库:打开储存在磁盘(储存卡)内的数据库文件,如果该文件不存在则会自动创建文件。
创建内存数据库:从内存中创建数据库,不占用磁盘(储存卡)空间,数据全部储存于内存中。
以"打开数据库"为例(后附另外两种方式的代码图)。
帮助内容:
本方法有三个参数,返回值类型为Sqlite数据库。
其中第二个参数指定打开标志,参考常量类Sqlite标志:
演示说明:
1,在按钮1被单击事件中,声明一个具有参考属性、类型为文件名类的局部变量:文件路径。
2,创建临时文件作为数据库的储存文件。
3,申明一个类型为文本缓冲区的局部变量:错误信息。
4,调用该方法并判断返回结果。
如下图所示:
下面是打开或创建数据库、创建内存数据库的代码图:
运行效果展示图:
如果文件不存在或打开数据库出错,文本框2将输出失败提示和具体错误信息文本。
● 关闭数据库
该方法用于关闭某个已打开的数据库。
本例前置代码:打开数据库。
帮助内容:
本方法有一个参数,无返回值。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮4被单击事件中,通过数据库的已打开属性判断是否已打开。
2,如果数据库已打开则调用该方法关闭数据库:
如下图所示:
运行效果展示图:
● 执行SQL
该方法用于执行无数据返回的SQL语句,例如:ALERT、CREATE、DROP、REINDEX等。
此处以执行CREATE语句在数据库中创建一个表为例(其他SQL语句请查阅相关文档)。
帮助内容:
本方法有三个参数,返回值类型为逻辑型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,声明一个类型为文本缓冲区的局部变量:错误信息。
2,动态调用该方法执行SQL语句:CREATE TABLE Mydata(name TEXT)。
如下图所示:
运行效果展示图:
● 查询SQL
该方法用于执行从数据库中查询数据的Select类语句。
该方法返回的是包含数据的记录集类对象,读取数据请参考例程:Sqlite记录集。
帮助内容:
本方法有三个参数,返回值类型为记录集类。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,声明一个类型为记录集类的局部变量:记录集。
2,动态调用该方法执行SQL语句:SELECT * FROM Mydata。
如下图所示:
运行效果展示图:
● 编译SQL
该方法用于编译SQL语句,支持携带参数标记符(?)。
该方法返回的是编译后的已编译语句类对象,并不会实际执行,执行编译后的SQL语句请参考:已编译语句类。
帮助内容:
本方法有三个参数,返回值类型为已编译语句类。
以动态格式调用该方法,可省略第一个参数。
本方法返回的是包含所有数据的已编译语句类对象。
本方法只编译不执行,绑定参数和执行编译的语句请参阅已编译语句类例程。
演示说明:
1,在按钮5被单击事件中,声明一个类型为已编译语句类的局部变量:准备语句。
2,动态调用该方法编译SQL语句:SELECT * FROM Mydata。
如下图所示:
运行效果展示图:
● 插入记录、插入记录2
此两个方法用于向数据库中插入一条记录,他们之间的区别:
插入记录2比插入记录多一个参数,支持应对冲突。
以"插入记录2"为例。
帮助内容:
本方法有五个参数,返回值类型为长整数。
以动态格式调用该方法,可省略第一个参数。
其中第五个参数指定如何解决数据冲突,参考常量类冲突应对类:
演示说明:
1,在按钮5被单击事件中,声明一个类型为键值容器类的局部变量:记录键值。
2,将欲插入的数据加入到记录键值。
3,声明一个类型为长整数的局部变量:记录ID。
4,动态调用该方法将数据插入到数据库中。
如下图所示:
运行效果展示图:
● 修改记录、修改记录2
此两个方法用于修改数据库中记录的值,他们之间的区别:
修改记录2比修改记录多一个参数,支持应对冲突。
本例前置代码:打开数据库、执行SQL、插入记录、关闭数据库。
以"修改记录2"为例。
帮助内容:
本方法有五个参数,返回值类型为整数。
以动态格式调用该方法,可省略第一个参数。
其中第六个参数指定如何解决数据冲突,参考常量类冲突应对类:
演示说明:
1,在按钮5被单击事件中,声明一个类型为文本型数组的局部变量:绑定参数,成员数:1。
2,绑定参数的第一个成员赋值"1",表示修改所有记录。
3,声明一个类型为整数的局部变量:影响行数。
4,动态调用该方法。
如下图所示:
运行效果展示图:
● 删除记录
此方法用于删除数据库中的记录。
本例前置代码:打开数据库、执行SQL、插入记录、修改记录、关闭数据库。
帮助内容:
本方法有四个参数,返回值类型为整数。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,绑定参数的第一个成员赋值"1",表示删除所有记录。
2,在按钮5被单击事件中,动态调用该方法。
如下图所示:
运行效果展示图:
● 开始事务、撤销事务、提交事务
此三个方法需要配对使用,用于数据库的事务处理。
本例前置代码:打开数据库、执行SQL、插入记录、修改记录、删除记录、关闭数据库。
帮助内容:
开始事务:开启一项事务。
撤销事务:放弃整项事务。
提交事务:将事务中所有对数据库的操作作为一个整体提交并写入数据库。
演示说明:
1,在按钮5被单击事件的开始处,动态调用开始事务。
2,在按钮5被单击事件中的插入、修改、删除操作失败的地方动态调用撤销事务。
3,在按钮5被单击事件中的插入、修改、删除操作全部成功之后的地方动态调用提交事务。
4,至此,只有当所有操作都成功,才会全部写入数据库。
如下图所示:
运行效果展示图:
只有当提交事务之后,所有操作才会实际写入数据库。
● 删除数据库文件
此方法用于删除数据库文件,包括日志文件以及其他辅助文件。
本例前置代码:打开或创建数据库。
帮助内容:
本方法有一个参数,返回值类型为逻辑型。
演示说明:
1,在按钮5被单击事件中动态调用该方法。。
如下图所示:
运行效果展示图:
● 启用并发查询
此方法用于设置启用或禁用多线程并发查询,未设置时默认禁用。
本例前置代码:打开数据库。
帮助内容:
本方法有两个参数,返回值类型为逻辑型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,动态调用该方法。
如下图所示:
运行效果展示图:
● 启用写前日志
此方法用于设置启用或禁用写前日志,注意:内存数据库不支持此功能。
本例前置代码:打开数据库。
帮助内容:
本方法有三个参数,返回值类型为逻辑型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,声明一个类型为文本缓冲区的局部变量:错误信息。
2,动态调用该方法。
如下图所示:
运行效果展示图:
● 寻找可编辑表
此方法用于从指定的多个表名称中寻找第一个可编辑的表。
帮助内容:
本方法有两个参数,返回值类型为逻辑型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,声明一个类型为文本型的局部变量:表名称。
2,动态调用该方法。
如下图所示:
运行效果展示图:
● 校验完整性
此方法用于校验数据库以及所有附属数据库是否完整(此操作耗时可能会较长)。
本例前置代码:打开数据库。
帮助内容:
本方法有一个参数,返回值类型为逻辑型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,动态调用该方法。
如下图所示:
运行效果展示图:
● 已打开 (只读)
此属性用于判断数据库是否已打开。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 版本号 (只读)
此属性用于判断数据库引擎版本号。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 只读 (只读)
此属性用于判断数据库是否为只读权限。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 处于事务中 (只读)
此属性用于判断数据库是否处于事务中。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 最大尺寸 (只读)
此属性用于判断数据库可增长的最大尺寸(单位:字节)。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 页面尺寸 (只读)
此属性用于判断数据库单页尺寸(单位:字节)。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 文件路径 (只读)
此属性用于获取数据库的文件路径。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 已被本线程锁定 (只读)
此属性用于判断数据库是否已被调用线程锁定。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 已启用写前日志 (只读)
此属性用于判断数据库是否已启用写前日志。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 准备工作 (Sqlite记录集)
本例讲解如何从记录集类对象中读出数据以及该对象的一些其他应用。
在此之前,我们需要先准备一些用于读取的数据内容。
1,在启动类中添加一个新方法:建立测试数据,返回值类型:记录集类。
如下图所示:
2,在按钮5被单击事件中声明一个类型为记录集类局部变量:记录集。
调用之前添加的方法并获得记录集类对象。
如下图所示:
运行效果展示图:
● 关闭
该方法用于关闭某个已打开的记录集。
前置代码:准备工作。
帮助内容:
本方法有一个参数,返回值类型:逻辑型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,动态调用该方法。
如下图所示:
运行效果展示图:
● 到上一行、到下一行、移动至首行、移动至尾行
这几个方法的用法一致,区别:
到上一行、到下一行:分别是将游标从当前位置向前或向后移动一行。
移动至首行、移动至尾行:分别是将游标直接移动到第一行或最后一行。
前置代码:准备工作。
以移动至尾行为例,帮助内容:
本方法有一个参数,返回值类型:逻辑型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,动态调用该方法。
如下图所示:
运行效果展示图:
● 到指定行、移动游标
这两个方法的用法一致,区别:
到指定行:直接设置当前游标位置到新位置。
移动游标:以当前游标位置为起点移动指定行数,正值表示向后(正向)移动、负值表示向前(反向)移动。
前置代码:准备工作。
以到指定行为例,帮助内容:
本方法有两个参数,返回值类型:逻辑型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,动态调用该方法。
如下图所示:
运行效果展示图:
● 取所有列名称
该方法用于取出记录集中所有列的名称。
前置代码:准备工作。
帮助内容:
本方法有一个参数,返回值类型:文本型数组。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,声明两个局部变量:
1.1,文本型数组:列名数组。
1.2,整数:列名索引。
2,动态调用该方法并循环读出全部列名。
如下图所示:
运行效果展示图:
● 取列名称
该方法用于取出记录集中指定列的名称。
前置代码:准备工作。
帮助内容:
本方法有两个参数,返回值类型:文本型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,声明一个类型为文本型的局部变量:列名称。
2,动态调用该方法。
如下图所示:
运行效果展示图:
● 取列索引
该方法用于取出记录集中指定字段名称所在列的索引。
前置代码:准备工作。
帮助内容:
本方法有两个参数,返回值类型:整数。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,声明一个类型为整数的局部变量:列索引。
2,动态调用该方法。
如下图所示:
运行效果展示图:
● 取列值类型、取字段值类型
这两个方法用法一致,用于取出记录集中当前行指定列的数据值类型,区别:
取列值类型:根据指定列的索引获取值类型。
取字段值类型:根据指定列的名称获取值类型。
注意:是数据的值类型,不是字段类型,Sqlite数据库的字段是没有具体类型的。
前置代码:准备工作。
以取列值类型为例,帮助内容:
本方法有两个参数,返回值类型:字段值类型。
以动态格式调用该方法,可省略第一个参数。
返回值参考常量类字段值类型,如下图所示:
演示说明:
1,在按钮5被单击事件中,声明一个类型为字段值类型的局部变量:值类型。
2,记录集的游标移动至首行以保证当前行有效。
3,动态调用该方法。
如下图所示:
运行效果展示图:
● 取列小数值、取列短整数值、取列整数值、取列长整数值、取列文本值、取列字节集值
这些方法用法一致,用于从记录集的当前行取出指定列索引的数据,区别是数据类型不同。
前置代码:准备工作。
以取列文本值为例,帮助内容:
本方法有两个参数,返回值类型:文本型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,声明一个类型为文本型的局部变量:文本内容。
2,记录集的游标移动至首行以保证当前行有效。
3,动态调用该方法。
如下图所示:
运行效果展示图:
● 取字段小数值、取字段短整数值、取字段整数值、取字段长整数值、取字段文本值、取字段字节集值
这几个方法用法一致,用于从记录集的当前行取出指定列名称的数据,区别是数据类型不同。
前置代码:准备工作。
以取字段文本值为例,帮助内容:
本方法有两个参数,返回值类型:文本型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,声明一个类型为文本型的局部变量:文本内容。
2,记录集的游标移动至首行以保证当前行有效。
3,动态调用该方法。
如下图所示:
运行效果展示图:
● 是否为空值
该方法用于判断记录集当前行的指定列是否为空值(null)。
前置代码:准备工作。
帮助内容:
本方法有两个参数,返回值类型:逻辑型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中移动记录集的游标至首行以保证当前行有效。
2,动态调用该方法。
如下图所示:
运行效果展示图:
● 已关闭 (只读)
此属性用于判断游标是否已关闭。
前置代码:准备工作。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 行数 (只读)
此属性用于获取记录集的行数(记录数目)。
前置代码:准备工作。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 列数 (只读)
此属性用于获取记录集的列数(字段数目)。
前置代码:准备工作。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 当前行 (只读)
此属性用于获取记录集当前所在行(游标位置,-1表示在首记录之前。)。
前置代码:准备工作。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 在尾行 (只读)
此属性用于判断记录集当前行是否最后一行。
前置代码:准备工作。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 在尾行后 (只读)
此属性用于判断记录集当前行是否在最后一行之后。
前置代码:准备工作。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 在首行 (只读)
此属性用于判断记录集当前行是否第一行。
前置代码:准备工作。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 在首行前 (只读)
此属性用于判断记录集当前行是否在第一行之前。
前置代码:准备工作。
帮助内容:
动态调用可直接读取该属性。
演示说明:
1,在按钮5被单击事件中读取该属性。
如下图所示:
运行效果展示图:
● 执行插入
此方法用于执行插入(Insert)类型的SQL语句。
帮助内容:
有两个参数,返回值类型:长整数。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中,执行SQL"CREATE TABLE Mydata(name TEXT)"创建例程需要的目的表。
2,声明变量:
2.1,准备语句:已编译语句类、参考。
2.2,记录ID:长整数。
2.3,错误信息:文本缓冲区。
3,编译欲执行的SQL语句,获得已编译语句类对象。
4,动态调用该方法。
如下图所示:
运行效果展示图:
● 执行修改删除
此方法用于执行修改(Update)和删除(Delete)类型的SQL语句。
下面以执行修改(Update)语句为例,帮助内容:
有两个参数,返回值类型:整数。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中:
1.1,执行SQL"CREATE TABLE Mydata(name TEXT)"创建例程需要的目的表。
1.2,插入例程需要的记录数据。
2,声明变量:
2.1,准备语句:已编译语句类、参考。
2.2,影响行数:整数。
2.3,错误信息:文本缓冲区。
3,编译欲执行的SQL语句,获得已编译语句类对象。
4,动态调用该方法。
如下图所示:
运行效果展示图:
● 执行创建销毁
此方法用于执行创建(Create)和销毁(Drop)等无数据返回类型的SQL语句。
下面以执行创建(Create)语句为例,帮助内容:
有两个参数,返回值类型:逻辑型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中声明变量:
1.1,准备语句:已编译语句类、参考。
1.2,错误信息:文本缓冲区。
2,编译欲执行的SQL语句,获得已编译语句类对象。
3,动态调用该方法。
如下图所示:
运行效果展示图:
● 查询长整数值、查询文本值
这两个方法用于执行简单的查询(Select)类型SQL语句,返回的是查询到的第一条记录、第一个字段的数据值。
下面以查询长整数值为例,帮助内容:
有两个参数,返回值类型:长整数。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中:
1.1,执行SQL"CREATE TABLE Mydata(number INTEGER)"创建例程需要的目的表。
1.2,插入例程需要的记录数据。
2,声明变量:
2.1,准备语句:已编译语句类、参考。
2.2,记录数值:长整数。
2.3,错误信息:文本缓冲区。
3,编译欲执行的SQL语句,获得已编译语句类对象。
4,动态调用该方法。
如下图所示:
运行效果展示图:
● 绑定所有参数
此方法用于绑定SQL语句中以"?"标记的全部参数值。
下面以绑定插入语句中的参数作为示例。
帮助内容:
有两个参数,无返回值。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中执行SQL"CREATE TABLE Mydata(name TEXT, city TEXT)"创建例程需要的目的表。
2,声明变量:
2.1,准备语句:已编译语句类、参考。
2.2,绑定参数:文本型 [2]。
2.3,记录ID:长整数。
2.4,错误信息:文本缓冲区。
3,编译欲执行的SQL语句,获得已编译语句类对象。
4,设置绑定参数各成员值并动态调用该方法进行绑定。
5,执行已编译并已绑定参数值的SQL语句。
如下图所示:
运行效果展示图:
● 绑定文本、绑定字节集、绑定小数、绑定长整数、绑定空值
这几个方法用于绑定SQL语句中以"?"标记的指定参数值。
下面以绑定插入语句中的参数作为示例。
帮助内容:
这几个方法的定义大体相同,区别是第三个参数的数据类型不同,以绑定文本为例:
有两个参数,无返回值。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中创建例程需要的目的表。
创建表的SQL语句:"CREATE TABLE Mydata(name TEXT, photo BLOB, money REAL, stamp INTEGER, girl TEXT)"
2,声明变量:
2.1,准备语句:已编译语句类、参考。
2.2,记录ID:长整数。
2.3,错误信息:文本缓冲区。
3,编译欲执行的SQL语句,获得已编译语句类对象。
4,动态调用对应数据类型的方法绑定各个参数值。
5,执行已编译并已绑定参数值的SQL语句。
如下图所示:
运行效果展示图:
● 删除所有绑定
此方法用于清除之前对SQL语句进行绑定的所有参数值。
清除绑定后如果继续执行该SQL语句则需要重新进行绑定。
注:清除绑定参数后不应继续执行该SQL。
前置代码:打开数据库、关闭数据库、[ 绑定文本、绑定字节集、绑定小数、绑定长整数、绑定空值 ]。
帮助内容:
有一个参数,无返回值。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在之前绑定参数的代码之后,动态调用该方法清除绑定。
如下图所示:
● 关闭、释放引用
这两个方法效果一致,释放对已编译语句类对象的引用。
当最后一次引用也被释放之后自动关闭该对象,不可再用。
注:释放引用后不应继续使用该对象。
前置代码:打开数据库、关闭数据库、[ 绑定文本、绑定字节集、绑定小数、绑定长整数、绑定空值 ]。
两个方法帮助内容差不多,以关闭为例:
有一个参数,无返回值。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在之前编译SQL的代码之后,动态调用该方法。
如下图所示:
● 请求引用
此方法用于请求引用指定已编译语句类对象,效果类似增加引用计数。
帮助内容:
有一个参数,返回值类型:逻辑型。
以动态格式调用该方法,可省略第一个参数。
演示说明:
1,在按钮5被单击事件中执行SQL"CREATE TABLE Mydata(name TEXT)"创建例程需要的目的表。
2,声明变量:
2.1,准备语句:已编译语句类、参考。
2.2,记录ID:长整数。
2.3,错误信息:文本缓冲区。
3,编译欲执行的SQL语句,获得已编译语句类对象。
4,动态调用该方法。
5,执行已编译的SQL语句。
注意:请求引用和释放引用应该配对出现,每次成功的引用,当不再使用后都应该有一次释放。
如下图所示:
运行效果展示图: