Connection 对象与Statement 对象

时间:2021-06-03 11:56:35
/**
 * Connection 对象
 * 主要作用: 打开与数据源的连接
 * 用法:使用 connection 对象的 集合, 方法 和 属性可以做以下操作--》

 * ① 通过 connection String, connection Timeout, Mode 对连接属性进行配置
 * ② 设置 CursorLocation 属性——》调用支持批更新的“客户端游标提供者”
 * ③ DefaultDatabase 属性 ——》 设置连接的默认数据库
 * ④ lsolationLevel 属性 ——》 为在连接上打开的事务设置隔离级别
 * ⑤ Provider 属性 ——》 指定 OLE DB 提供者
 * ⑥ Open 方法 ——》 建立到数据源的物理连接
 * ⑦ Close 方法 ——》 断开连接
 * ⑧ Execute 方法 ——》 执行对连接的命令,并使用 CommandTimeout 属性 对执行 进行配置
 * ⑨ BeginTrans, CommitTrans 和 RoolbackTrans方法,Attributes属性 ——》 
 * 管理打开的连接上的事务(如果提供者支持则包括嵌套的事务)
 * ⑩ Errors 集合 ——》 检查数据源 返回的错误
 * ⑩①Version属性 ——》 读取使用中的 ADO 执行版本
 * ⑩②OpenSchema方法 ——》 获取数据库模式信息
 * 注意:如果  不使用 Command 对象进行查询:
 * 需向 Connection 对象的 Execute 方法传送查询字符串,  
 * 但是当需要使  命令文本  具有持久性并重新执行,或使用 查询参数的时候
 * 则必须使用 Command 对象
 * 如果  要执行命令:
 * 可以使用 Command 对象的 Name 属性 给命令  指定一个名称,将 Command
 * 对象的 ActiveConnection 属性  设置为该连接
 * 然后  像发出 Connecton对象的方法一样发出使用命令名称的语句,
 * 后面可带任何参数(如果有返回行则后面带 Recordset 对象),
 * 设置 Recordset 属性,以便自定义所产生的记录集
 * 
 * Statement 对象
 * 作用: 用于将 SQL 语句发送到数据库中
 * Statement 对象有三种:
 * Statement:
 * 作用:用于执行不带参数简单 SQL 语句
 * 特点:每次执行 SQL 语句,数据库都要执行 SQL 语句的编译,最好用于仅执行一次查询并返回结果的情形,
 * 效率高于 PreparedStatement
 * PreparedStatement:
 * 作用:用于执行带 或 不带 IN参数 的预编译 SQL 语句
 * 特点:① 是预编译的, 在执行可变参数的一条 SQL 语句时,比 Statement 的效率高,
 * 因为 DBMS 预编译一条 SQL,当然会比多次编译一条 SQL 的效率要高
 * ② 安全性好,有效防止 SQL 注入等问题
 * ③ 对于多次重复执行的语句,效率会更高一点,并且这种情况下也比较适合使用 batch
 * ④ 代码的可读性和可维护性好
 * CallableStatement:
 * 作用:用于执行对数据库存储过程 的调用
 * 特点:提供了对输出和输入参数的支持
 * 此接口具有对 PreparedStatment 接口提供的输入输出参数的支持
 * 用法:
 * 建立了  到特定数据库的连接 后, 就可用该连接发送 SQL 语句,
 * Statement 对象 用 Conection 的 createStatement 方法创建 ,如下 :
 *
<span style="white-space:pre"></span>Connection con = DriverManager.getConnection("url", "user", "password");
<span style="white-space:pre"></span>Statement stmt = con.createStatement();


 *
 * 为了执行 Statement 对象,被发送到数据库的 SQL 语句将被做为参数提供给 Statement 的方法:
 *
<span style="white-space:pre"></span>ResultSet rs = stmt.executeQuery("SELECT a,b,c FROMTable2");


 * 
 * 使用 Statement 对象执行 SQL 语句
 * Statement 接口提供了三种执行 SQL 语句的方法:executeQuery, executeUpdate, execute
 * 此处使用哪个方法由 SQL 语句所产生的内容决定
 *
 * executeQuery 方法 --》用于产生单个结果集的语句
 * 如: SELECT 语句
 * 
 * executeUpdate 方法 --》 用于执行 INSERT, UPDATE,DELETE, SQLDDL(数据定义语言)语句
 * 如:CREATE TABLE, DROP TABLE
 * install, update,delete 语句 ——》 修改表中0 行或多行中是一列或多列
 * executeUpdate 的返回值 为整数,指示受影响的行数(更新计数)
 * create table 或 drop table 等不操作行的语句, executeUpdate 的返回值总为 0
 * 
 * execute 方法 ——》 用于执行返回多个结果集,多个更新计数或二者组合的语句(不常用)
 * 
 * 执行语句的所有方法都将关闭所调用的   Statement 对象的当前打开结果集(如果存在)
 * 即   在重新执行 Statement 对象前, 需要完成对当前 ResultSet 对象的处理
 * 
 * 继承了 Statement 接口中所有方法的 PreparedStatement 接口都有自己的
 * executeQuery, executeUpdate, execute 方法
 * 
 * Statement 对象 本身不包含 SQL 语句,因此,必须给 Statement.execute 方法提供 SQL 语句作为参数
 * PreparedStatement 对象并不将 SQL 语句作为参数提供给这些方法,因为它们已经包含了预编译 SQL 语句
 * CallableStatement 对象继承这些方法的 PreparedStatement 形式