(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
(0)

相关推荐

  • 06 | 基础规范:如何理解 JDBC 关系型数据库访问规范?

    从今天开始,我们将进入 Spring Boot 另一个核心技术体系的讨论,即数据访问技术体系.无论是互联网应用还是传统软件,对于任何一个系统而言,数据的存储和访问都是不可缺少的. 数据访问层的构建可能 ...

  • JDBC这个问题,问的小伙伴一脸懵逼

    回复"面试"获取全套面试资料 背景 前两天一个小伙伴面试的时候,被问JDBC底层是如何连接数据库的? 他顿时一脸懵逼,因为大部分人只知道JDBC的几个步骤,至于底层到底是怎么连接数 ...

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

    DataSource是作为DriverManager的替代品而推出的,DataSource 对象是获取连接的首选方法. 原文地址: Data Source与数据库连接池简介 JDBC简介(八) 起源 ...

  • Java中的多态详解

    一.多态的概念 多态分为类的多态和方法的多态,类的多态就是一个类型可以有不同的表现形态,什么样的类型才会具备多态呢?只有被多个子类继承或者实现的父类才具备多态的特征,因为在运行期间可以根据具体的子类表 ...

  • Java高并发9-CAS操作与Unsafe类详解

    一.复习 计算机内存模型,synchronized和volatile关键字简介 二.两者对比 sychronized和volatile都解决了内存可见性问题 不同点: (1)前者是独占锁,并且存在者上 ...

  • 生活中常用的醉酒解酒法

        中华行医方  大医精诚心 药酒 酒,英雄好汉之好也. 生活中有些人会常常发生醉酒,那么如何醒酒,使醉酒者尽快恢复过来呢?最好的办法就是多喝水.实际上,醉酒后应该多喝水,多喝水有利于醒酒,这是许 ...

  • 如何用Node中的Express应用框架的技术选型?本文详解

    前言 现在的 Node 对于前端而言可以涵盖各个方面,包括命令行接口.插件.依赖库.脚手架以及 Web 服务等.本文是一篇对于 Node 使用的浅谈文章,会简单讲解一些个人使用 Node 的经验,分享 ...

  • 八字中的七杀详解

    七杀指男女命里的偏官无制,简称为"杀". 杀为刀,通常与羊刃一起并列为恶神,人命里逢之见之,为凶. 杀,当遇到环境好时,杀通常指一个人的威风八面,春风得意:为凶时,性格暴烈,恶贯满 ...

  • 数码相机各常用设置详解,(以尼康Z6为例)

    数码相机各常用设置详解,(以尼康Z6为例)

  • 供配电系统常用电气设备详解,值得收藏!

    供配电系统常用电气设备详解,值得收藏!

  • C/C++ 中 volatile 关键字详解 | 菜鸟教程

    C/C++ 中 volatile 关键字详解 | 菜鸟教程

  • 超全整理|Python 操作 Excel 库常用操作详解

    来源:早起Python 作者:陈熹.刘早起 大家好,我是早起. 在之前的文章中我们曾详细的讲解了如何使用openpyxl 操作Excel,其实在Python中还有其他可以直接操作 Excel 文件的库 ...