通过驱动管理器DriverManager的getConnection方法,可以创建到指定URL的连接
    Connection conn = DriverManager.getConnection(url, user, password);
看得出来,在JDBC中连接被抽象为Connection
表示:与特定数据库的连接(会话)
在连接上下文中执行 SQL 语句并返回结果

方法梗概

对于应用程序开发者来说,连接Connection主要用于执行对象的获取从而进一步执行SQL,这是应用程序与数据库交互的主要途径
然后提供了数据库事务相关信息的设置以及其他信息的设置与获取

执行对象

用于将 SQL 语句发送到数据库中
对象有三种
Statement
* 作用:用于执行不带参数的简单 SQL 语句
* 特点:每次执行 SQL 语句,数据库都要执行 SQL 语句的编译,仅执行一次查询并返回结果的情形建议使用这个,此时效率高于 PreparedStatement 
PreparedStatement
* 作用:用于执行带 或 不带参数的预编译 SQL 语句
* 特点:是预编译的, 在执行可变参数的一条 SQL 语句时,比 Statement 的效率高,安全性好,有效防止 SQL 注入等问题,对于多次重复执行的语句,效率会更高
CallableStatement
* 作用:用于执行对数据库存储过程 的调用

事务

Connection提供了对于事务相关操作的支持
事务有自动提交的特性可以设置,自动提交默认每条SQL将会单独一个事务,Connection提供了自动提交属性的查询方法
如果不是自动提交,那么将会延续到手动COMMIT或者ROLLBACK
还能够设置和获取事务的隔离性
另外还可以灵活的设置保存点,从而让一个事务分割成几部分,可以部分提交

连接属性

连接本身有一些属性信息,比如目录等
其中最重要的就是Connection的关闭,数据库的连接是有限的,Connection在使用完毕后需要进行关闭
另外还提供了连接状态的测试方法

小结

Connection最为基础的方法就是执行对象的创建以及事务相关以及连接属性相关的 
其他方法属于对于数据库本身能力的API支持。

重点方法简介

执行对象

静态执行对象创建createStatement
Statement createStatement()
          创建一个 Statement 对象来将 SQL 语句发送到数据库。
Statement createStatement(int resultSetType, int resultSetConcurrency)
          创建一个 Statement 对象,该对象将生成具有给定类型和并发性的 ResultSet 对象。
Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)
          创建一个 Statement 对象,该对象将生成具有给定类型、并发性和可保存性的 ResultSet 对象。
 
createStatement的核心是为了创建Statement,不带参数的 SQL 语句通常使用 Statement 对象执行;
如果多次执行相同的 SQL 语句,使用 PreparedStatement 对象可能更有效。
三个版本的createStatement核心是一样的,区别在于参数的设置,参数的设置是针对于结果集的
空参数的createStatement返回的Statement 对象,创建的结果集在默认情况下类型为 TYPE_FORWARD_ONLY,并带有 CONCUR_READ_ONLY 并发级别
已创建结果集的可保存性可调用 getHoldability() 确定
 
resultSetType - 以下 ResultSet 常量之一:
ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE
 
resultSetConcurrency - 以下 ResultSet 常量之一:
ResultSet.CONCUR_READ_ONLY 或 ResultSet.CONCUR_UPDATABLE
 
resultSetHoldability - 以下 ResultSet 常量之一:
ResultSet.HOLD_CURSORS_OVER_COMMIT 或 ResultSet.CLOSE_CURSORS_AT_COMMIT 
简言之,createStatement系列用于创建Statement--通常用来执行不带参数的SQL,并且附带的可以设置结果集的类型、并发性、可保存性
 
动态执行对象创建prepareStatement
PreparedStatement prepareStatement(String sql)
          创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
          创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键。
PreparedStatement prepareStatement(String sql, int[] columnIndexes)
          创建一个能返回由给定数组指定的自动生成键的默认 PreparedStatement 对象。
PreparedStatement prepareStatement(String sql, String[] columnNames)
          创建一个能返回由给定数组指定的自动生成键的默认 PreparedStatement 对象。 
PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
          创建一个 PreparedStatement 对象,该对象将生成具有给定类型和并发性的 ResultSet 对象。
PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)
          创建一个 PreparedStatement 对象,该对象将生成具有给定类型、并发性和可保存性的 ResultSet 对象。
 
 
prepareStatement系列方法创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
 
1. prepareStatement(String sql) 最为基础的创建方法
带有 IN 参数或不带有 IN 参数的 SQL 语句都可以被预编译并存储在 PreparedStatement 对象中。然后可以有效地使用此对象来多次执行该语句
结果集属性在默认情况下类型为 TYPE_FORWARD_ONLY,并带有 CONCUR_READ_ONLY 并发级别。
已创建结果集的可保存性可调用 getHoldability() 确定。
2. 返回键值数据
prepareStatement(String sql, int autoGeneratedKeys)
创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键
autoGeneratedKeys - 指示是否应该返回自动生成的键的标志,它是 Statement.RETURN_GENERATED_KEYS 或 Statement.NO_GENERATED_KEYS 之一
通过设置Statement.RETURN_GENERATED_KEYS要求返回主键
通过getGeneratedKeys方法,获取结果集,进而可以获取主键
此处插入一条记录,所以主键返回必然只有一个,当试图获取不存在的下标时,将会抛出异常,如下面所示,读取rs.getInt(2);时就报错了
另外还可以使用int数组指定列下标,或者String数组指定列名,指明用于返回的键
prepareStatement(String sql, int[] columnIndexes)
prepareStatement(String sql, String[] columnNames)
注意:
这几个方法并不是说所有的数据库都支持都一样,比如对于MYSQL来说,都是一回事
 
通过测试代码我们也可以看得出来,随便设置的数组,也都无所谓,因为mysql压根就没关注数组的内容(上面的代码为mysql的实现)
 
类似createStatement 也有可以设置结果集类型、并发性、可保存性的方法
PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)
 
resultSetType - 以下 ResultSet 常量之一:
ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE
 
resultSetConcurrency - 以下 ResultSet 常量之一:
ResultSet.CONCUR_READ_ONLY 或 ResultSet.CONCUR_UPDATABLE
 
resultSetHoldability - 以下 ResultSet 常量之一:
ResultSet.HOLD_CURSORS_OVER_COMMIT 或 ResultSet.CLOSE_CURSORS_AT_COMMIT 
 
默认情况下类型为 TYPE_FORWARD_ONLY,并带有 CONCUR_READ_ONLY 并发级别。
已创建结果集的可保存性可调用 getHoldability() 确定。
这一点还是那样子,如果没设置的,存在默认值
 
存储过程执行对象创建CallableStatement
CallableStatement prepareCall(String sql)
          创建一个 CallableStatement 对象来调用数据库存储过程。
 
CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency)
          创建一个 CallableStatement 对象,该对象将生成具有给定类型和并发性的 ResultSet 对象。
 
CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)
          创建一个 CallableStatement 对象,该对象将生成具有给定类型和并发性的 ResultSet 对象。 
 
核心为创建存储过程的执行对象,另外与createStatement和prepareStatement方法类似,可以设置结果集的类型、并发性、可保存性。

事务

支持事务的数据库一般都有自动提交,提交、回滚、保存点、事务隔离级别这几个基本属性。
Connection中提供了对他们的支持。
 
boolean getAutoCommit()
          获取此 Connection 对象的当前自动提交模式。 
 
void commit()
          使所有上一次提交/回滚后进行的更改成为持久更改,并释放此 Connection 对象当前持有的所有数据库锁。
 
void rollback()
          取消在当前事务中进行的所有更改,并释放此 Connection 对象当前持有的所有数据库锁。
 
void rollback(Savepoint savepoint)
          取消所有设置给定 Savepoint 对象之后进行的更改。
 
void setAutoCommit(boolean autoCommit)
          将此连接的自动提交模式设置为给定状态。          
 
void setTransactionIsolation(int level)
          试图将此 Connection 对象的事务隔离级别更改为给定的级别。
 
int getTransactionIsolation()
          获取此 Connection 对象的当前事务隔离级别。
 
Savepoint setSavepoint()
          在当前事务中创建一个未命名的保存点 (savepoint),并返回表示它的新 Savepoint 对象。
 
Savepoint setSavepoint(String name)
          在当前事务中创建一个具有给定名称的保存点,并返回表示它的新 Savepoint 对象。  
 
void releaseSavepoint(Savepoint savepoint)
          从当前事务中移除指定的 Savepoint 和后续 Savepoint 对象。
 

连接自身属性状态

Connection最重要的一个状态就是打开与关闭,通过getConnection方法如果连接成功,那么该连接被打开
在使用结束之后你需要手动进行关闭
void close()
          立即释放此 Connection 对象的数据库和 JDBC 资源,而不是等待它们被自动释放。
JDBC还提供了查询方法用于检测该连接是否已经被关闭。
boolean isClosed()
          查询此 Connection 对象是否已经被关闭。
 
另外还有检测连接是否有效的方法
boolean isValid(int timeout)
          如果连接尚未关闭并且仍然有效,则返回 true。   

总结

Connection主要用于创建SQL的执行对象,而连接通过驱动管理器DriverManager的getConnection方法进行获取。
Connection并不是所有的方法都如API描述的一模一样,要看具体的驱动程序的支持情况
比如前面提到的MYSQL对于prepareStatement(String sql, String[] columnNames)和prepareStatement(String sql, int[] columnIndexes)的情况
通过连接对执行对象的创建,决定了很多事情
比如执行语句的特质,是用来执行静态SQL还是预编译带参数的动态的SQL还是存储过程?
也可以对结果集的参数进行设置
事务的相关处理也是在连接中操作的。
通过连接还能够获得数据库的元数据信息
我们所有的查询都是在一个数据库连接中进行的,所以此次操作所需要的东西,比如sql设置、结果集属性设置再或者数据库相关的元数据信息等都可以通过Connection获得。
 

Connection 对象简介 方法解读 JDBC简介(四)的更多相关文章

  1. 执行对象Statement、PreparedStatement和CallableStatement详解 JDBC简介(五)

    执行对象是SQL的执行者,SQL是“安排好的任务”,执行对象就是“实际工作的人”. 执行对象有三种: Statement.PreparedStatement和CallableStatement,他们都 ...

  2. Unity 游戏框架搭建 2019 (三十九、四十一) 第四章 简介&方法的结构重复问题&泛型:结构复用利器

    第四章 简介 方法的结构重复问题 我们在上一篇正式整理完毕,从这一篇开始,我们要再次进入学习收集示例阶段了. 那么我们学什么呢?当然是学习设计工具,也就是在上篇中提到的关键知识点.这些关键知识点,大部 ...

  3. ADO.net Connection对象简介

    Connection对象 学习的是刘皓的文章  ADO.NET入门教程(四) 品味Connection对象 这篇文章开始水平一般起来了,主要介绍了要优雅的使用这个对象 1 用try...catch.. ...

  4. JDBC简介及JDBC编写步骤及常见API

    JDBC : Java Database Connectivity,Java数据库连接.SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC. JDBC就像一座桥 ...

  5. JDBC设计理念浅析 JDBC简介(一)

    概念 JDBC是J2EE的标准规范之一,J2EE就是为了规范JAVA解决企业级应用开发制定的一系列规范,JDBC也不例外. JDBC是用于Java编程语言和数据库之间的数据库无关连接的标准Java A ...

  6. DriverManager 驱动管理器类简介 JDBC简介(三)

    驱动程序管理器是负责管理驱动程序的,驱动注册以后,会保存在DriverManager中的已注册列表中 后续的处理就可以对这个列表进行操作 简言之,驱动管理器,就是字面含义,主要负责就是管理 驱动 概述 ...

  7. JDBC 异常简介 jDBC简介(六)

    SQL 异常简介 对于数据库的操作访问,必然也很可能抛出异常. JDBC中定义了SQLException,用于描述数据库相关操作中可能出现的异常情况. java.sql.SQLException    ...

  8. JDBC事务与保存点 JDBC简介(七)

    事务简介 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务是必须满足4个条件(ACID) 事务的原子性( A ...

  9. Data Source与数据库连接池简介 JDBC简介(八)

    DataSource是作为DriverManager的替代品而推出的,DataSource 对象是获取连接的首选方法. 起源 为何放弃DriverManager DriverManager负责管理驱动 ...

随机推荐

  1. python 迭代器,生成器

    在 python 中我们常用 for in 来遍历 list, set, dict, str 等. for in 的本质就干了两件事: 调用 __iter__() 获取迭代器; 调用 next() 直 ...

  2. 微信跳转之WAP跳转微信公众号关注页面链接weixin://dl/business/?ticket=

    本文整理了部分微信 URL Schemes,经过本人测试,所有url在微信 6.3.22 版本下都可正常工作.大家可以在 Safari 中打开链接进行尝试.(部分链接仅允许在微信内部浏览器中打开,已用 ...

  3. Rest API 操作List Items

    获取所有的List Itemsfunction getItems(url) { $.ajax({ url: url, type: "GET", headers: { "a ...

  4. ionic4 开发企业微信应用0

    作为一个后台开发人员,几年前参与过Ionic1开发过一微信公众号的经历,所以这次开发企业微信应用,就使用了ionic,正好ionic4 rc版本发布,虽然不是正式版,作为本项目的项目经理,还是决定使用 ...

  5. gridlayout代码注释

    <div class="wrapper"> //定义一节或者一部分区域,它的css样式对应的css中class选择器的wrapper <div class=&qu ...

  6. 业务配置开发平台qMISPlat 2.0 产品介绍

    qMISPlat是什么 qMISPlat(业务配置开发平台)是一套基于.net core 2.0.跨平台的,面向开发人员和具有一定技术水平的业务人员使用的业务配置开发平台.基于此平台您只需通过配置和少 ...

  7. MSSQL事务隔离级别详解(SET TRANSACTION ISOLATION LEVEL)

    控制到 Transact-SQL 的连接发出的 SQL Server 语句的锁定行为和行版本控制行为. TRANSACT-SQL 语法约定 语法   -- Syntax for SQL Server ...

  8. 在 ubuntu 中愉快的安装 Jenkins

    这篇文章详细的记录了在 ubuntu 中安装 Jenkins 的一步又一步,因为找了很多 Linux 下安装 Jenkins 的教程,不是很满意 所以决定自己写一篇以备后用(终于让我找到了Java 不 ...

  9. 【RL-TCPnet网络教程】第5章 PHY芯片和STM32的MAC基础知识

    第5章        PHY芯片和STM32的MAC基础知识 本章节为大家讲解STM32自带的MAC和PHY芯片的基础知识,为下一章底层驱动的讲解做一个铺垫. 5.1   初学者重要提示 5.2    ...

  10. Java 三种方式实现接口校验

    方法一:AOP 代码如下定义一个权限注解 package com.thinkgem.jeesite.common.annotation; import java.lang.annotation.Ele ...