执行SQL(statement) DDL和DML语句¶
可以把SQL语句设置到statement类对象中,通过statement类对象接口来执行SQL命令。
DDL:Data Define language(数据定义语言)
create table创建表、alter table修改表、drop table删除表、truncate table清空表
隐形提交当前事务,不能rollback
DML:Data Manipulation Language(数据操作语言)
insert、update、delete、select操作
需要手动控制事务提交,可以rollback
创建statement对象¶
调用Connection对象的createStatement()方法创建Statement对象,如示例2-8所示,
示例2-8 如何创建一条Statement语句
Statement *stmt = conn->createStatement();
执行SQL命令¶
创建了Statement对象之后,通过调用Statement对象上的execute()、executeUpdate()、executeArrayUpdate()或executeQuery()方法来执行SQL命令。这些方法用于以下目的:
- execute():执行所有非特定的语句类型
- executeUpdate():执行DML和DDL语句
- executeArrayUpdate():执行多个DML语句
- executeQuery():执行查询
重用statement对象¶
可以重用Statement对象多次执行SQL语句。要使用statement对象执行不同的SQL,应该通过Statement对象的setSQL()方法指定不同的SQL语句。
现在可以根据需要多次执行INSERT语句。如果以后想执行另一条SQL语句,只需重置语句对象,如示例2-9所示。
通过使用setSQL()方法,ACCI statement对象及其相关资源不会被不必要地分配或释放。要检索当前statement对象的内容,请使用getSQL()方法。
示例2-9 如何使用setSQL()方法重置SQL语句
stmt->setSQL("SELECT * FROM shopping_basket WHERE quantity >= :1");
销毁statement对象¶
应该使用terminateStatement()方法显式地终止和释放Statement对象,如示例2-10所示。
示例2-10 如何使用terminateStatement()方法终止一个语句
Connection::conn->terminateStatement(Statement *stmt);