执行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);