(2) Java SQL框架(java.sql.*)中常用接口详解
Driver接口:定义了一个驱动程序接口,每一个数据库的JDBC driver都应该实现这个接口,用于访问对应的数据库。比如MySQL的driver为com.mysql.jdbc.Driver。Java SQL框架允许多个数据库驱动程序。
DriverManager类:管理一组JDBC driver。DriverManager通过jdbcUrl,在classpath中加载相应数据库的JDBC driver。当加载Driver类时,它会创建一个实例并将其本身注册到DriverManager中。这样,我们就可以通过DriverManager获取到所有driver实例,并且可以通过jdbcUrl获取到Driver及Connection实例。
Connection接口:与特定数据库的连接(会话),用于创建及执行SQL语句(statements)并在连接的上下文中返回结果。注意:配置Connection时,JDBC应用程序应使用相应的Connection方法,例如setAutoCommit或setTransactionIsolation。当有可用的JDBC方法时,应用程序不应直接调用SQL命令来更改连接的配置。默认情况下,Connection对象处于自动提交(auto-commit)模式,这意味着它在执行每个语句后自动提交更改。如果已禁用自动提交模式,则必须显式调用方法commit才能提交更改;否则,将无法保存数据库更改。同一事务中所有的操作,都必须使用同一个Connection对象。
Statement接口:表示SQL语句的接口。需要用一个Connection对象来创建Statement对象。执行Statement对象,它们生成ResultSet对象,这是一个表示数据库结果集的数据表。Connection可以创建以下3种Statement:
(1)Statement:用于执行不带参数的简单SQL语句。其中,有3种execute方法:
execute:执行任意SQL。如果执行返回的第一个对象是ResultSet对象,则返回true。通过调用statement.getResultSet来检索从查询返回的ResultSet对象。
executeQuery:执行一个能返回一个ResultSet对象的SQL。一般是查询语句。
executeUpdate:返回一个整数,表示受SQL语句影响的行数。用于执行INSERT,UPDATE,DELETE等语句。
(2)PreparedStatement:(Extends Statement)用于预编译可能包含输入参数的SQL语句,并把预编译后的sql语句存在对象中,那么这样每次传入参数执行SQL操作会变得更加高效。
(3)CallableStatement:(Extends PreparedStatement)执行可能包含输入和输出参数的存储过程。
DataSource接口:作为DriverManager工具的替代方案,DataSource对象应该是获取连接的首选方法。通常我们使用连接池的方式实现DataSource。如hikari,c3p0,dbcp2,tomcat等。由于数据库连接是一种昂贵的资源,所以应该使用数据库连接池负责分配、管理和释放数据库连接。连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
下面是一个是使用hikari数据库连接池获取Connection的例子:
String jdbcUrl = "jdbc:mysql://localhost:3306/test_db";
String username = "xxx";
String password = "xxx"; HikariConfig config = new HikariConfig();
config.setJdbcUrl(jdbcUrl);
config.setUsername(username);
config.setPassword(password); try (HikariDataSource datasource = new HikariDataSource(config);
Connection conn = datasource.getConnection();
Statement stmt = conn.createStatement()) { conn.setAutoCommit(false);
try {
stmt.execute("INSERT INTO test(id, account) VALUES (1, 100)");
stmt.execute("INSERT INTO test(id, account) VALUES (2, 200)");
stmt.execute("INSERT INTO test(id, account) VALUES (3, 300)");
} catch (SQLException e) {
e.printStackTrace();
conn.rollback(); // rollback
throw e;
}
conn.commit(); // commit } catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("Error occurred!");
}
jdbc:mysql://localhost:3306/test_db
(2) Java SQL框架(java.sql.*)中常用接口详解的更多相关文章
- JDBC常用接口详解
JDBC中常用接口详解 ***DriverManager 第一.注册驱动 第一种方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver()) ...
- “全栈2019”Java第八十四章:接口中嵌套接口详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java自动化测试框架-12 - TestNG之xml文件详解篇 (详细教程)
1.简介 现在这篇,我们来学习TestNG.xml文件,前面我们已经知道,TestNG就是运行这个文件来执行测试用例的.通过本篇,你可以进一步了解到:这个文件是配置测试用例,测试套件.简单来说,利用这 ...
- ansible中常用模块详解
ansible中常用的模块详解: file模块 ansible内置的可以查看模块用法的命令如下: [root@docker5 ~]# ansible-doc -s file - name: Sets ...
- python中常用模块详解二
log模块的讲解 Python 使用logging模块记录日志涉及四个主要类,使用官方文档中的概括最为合适: logger提供了应用程序可以直接使用的接口API: handler将(logger创建的 ...
- Java中的接口详解
接口 是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量.构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8) ...
- java集合框架-List集合ArrayList和LinkedList详解
List 集合源码剖析 ✅ ArrayList 底层是基于数组,(数组在内存中分配连续的内存空间)是对数组的升级,长度是动态的. 数组默认长度是10,当添加数据超越当前数组长度时,就会进行扩容,扩容长 ...
- 前端必备HTTP技能之HTTP请求头响应头中常用字段详解(转)
作为一名前端开发人员,肯定少不了要和网络打交道,因为要从服务器端拉取数据,从服务端获取数据最常用的方式还是通过HTTP请求.给服务器发请求的时候有请求头,接受服务器响应的时候有响应头,客户端和服务器端 ...
- python中常用模块详解一
1.time 模块 import time s = time.localtime() # 把时间转化成格式化的时间,通过. 取得里面的年月日等 struct_time 格式 time.struct_t ...
随机推荐
- [hdoj6483][莫队+线段树/ST]
A Sequence Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- 如何利用Wireshark解密SSL和TLS流量
如何利用Wireshark解密SSL和TLS流量https://support.citrix.com/article/CTX135121 1.有server端的private key,直接在wires ...
- learning scala stripMargin
(1)Scala中创建多行字符串使用Scala的Multiline String. 在Scala中,利用三个双引号包围多行字符串就可以实现. 代码实例如: val foo = "" ...
- 享学课堂java架构vip课程
1.wps文档地址 https://docs.qq.com/doc/DRVNLUndvTmFSdEhO 2.百度网盘地址 https://pan.baidu.com/s/1uxaTzJZHKrsw_H ...
- lucene正向索引(续)——域(Field)的元数据信息在.fnm里,在倒排表里,利用跳跃表,有利于大大提高搜索速度。
4.1.2. 域(Field)的元数据信息(.fnm) 一个段(Segment)包含多个域,每个域都有一些元数据信息,保存在.fnm文件中,.fnm文件的格式如下: FNMVersion 是fnm文件 ...
- 2018-2019-2 20165114《网络对抗技术》 Exp 8 Web基础
Exp 8 Web基础 目录 一.实验内容 二.基础问题回答 (1)什么是表单 (2)浏览器可以解析运行什么语言. (3)WebServer支持哪些动态语言 三.实践过程记录 3.1Web前端HTML ...
- case设计及验证:入口+页面+展示
测试个性CB问题, 功能整体结构为:入口+页面+展示 总结: 1. 产品文档为主,其次是服务端接口返回.数据结构及字段值确认.结合实际场景检查是否有遗漏或不合理. 2. 以字段为维度,每个字段的检查点 ...
- apache配置https重定向
apache配置https重定向 一.总结 一句话总结: 网上找不到答案的原因是因为没有精准的描述问题,没有把问题描述清楚:尽量把关键词描述清楚 1.apache将80端口重定向443的具体步骤(在 ...
- Linux中touch命令使用(创建文件)
touch命令有两个功能: 1.用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来: 2.用来创建新的空文件. 语法 touch(选项)(参数) 选项 -a:或 ...
- 【React自制全家桶】一、Webstrom+React+Ant Design+echarts搭建react项目
前言 一.React是Facebook推出的一个前端框架,之前被用于著名的社交媒体Instagram中,后来由于取得了不错的反响,于是Facebook决定将其开源.出身名门的React也不负众望,成功 ...