博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java数据库访问的接口规范:JDBC简介
阅读量:4090 次
发布时间:2019-05-25

本文共 2302 字,大约阅读时间需要 7 分钟。

 由发表在

JDBC是什么?

相对于数据库而言,Web应用是数据库的客户端,我们需要为客户端与数据库之间建立连接,双方才能交互。

我们已经学习了SQL,这是操纵数据库的语言。我们现在开发Web应用使用的语言,那怎么让Web应用于数据库进行交互呢?这就需要使用JDBC了。

JDBC是Java Database Connectivity的缩写,是标准的Java API,是一套客户端程序与数据库交互的规范。JDBC提供了一套通过操纵数据库的完整接口。

JDBC驱动

JDBC API的实现,是由JDBC驱动程序实现的,不同的数据库对应有不同的驱动程序。需要使用某个具体的JDBC驱动,我们需要将其对应的Jar包引入到项目中。

当我们调用JDBC API时,JDBC将我们的请求交给JDBC驱动,最终由驱动完成与数据库的交互。此外,而数据库驱动会帮助我们打开数据库连接,关闭数据库连接,以及控制事务。

JDBC目标是做到“一次编写,到处运行”,当你使用JDBC API 访问数据库后,无论是更换数据库还是更换操作系统,都不需要修改代码。所以使用JDBC,我们可以使用相同的API访问不同的数据库服务(比如MySQL和Oracle等),这样就编写不依赖于具体数据库的程序。更高层的数据访问框架也是以JDBC为基础构建的。

数据库连接池

在博客应用中,一次Web请求一般对应于一次对博客数据的增删改查,每一次建立数据库连接才能完成。创建数据库连接是一件耗时的事情,而且占用系统资源。对于访问量比较大的应用,频繁打开喝关闭数据库连接就会严重影响性能。而且数据库连接的数量如果不控制起来,系统资源可能无限制地被占用,最终可能导致内存泄漏,服务器崩溃。

为了解决这个问题,我们一般采用数据库连接池技术。其基本思想就是为数据库连接建立一个缓冲池,预先放入一定数量的连接,当需要使用时直接从缓冲池中取出即可使用,使用完了重新放回缓冲池。我们还可以通过设定连接池最大连接数来防止超过系统负载的数据库连接数量,这样能极大地提高系统的性能和稳定性。

现在已经有很多数据库连接池的实现,常用的有和。后面的内容中我们将会用到commons-dbcp,现在我们只需要了解其原理就行。

JDBC API的重要接口与类

JDBC API提供了以下接与和类:

  • DriverManager: 该类用来管理数据库驱动程序,当需要建立一个连接时,DriverManager将使用第一个满足要求的Driver来建立连接。

  • Driver: 该接口负责处理所有与数据库的交互。

  • Connection : 该接口表示一次数据库连接。所有的数据库操作都是在一次数据库连接中进行的,连接关闭后,将不能再进行数据库操作。

  • Statement : 我们可以通过该接口执行SQL语句,并得到返回结果。

  • ResultSet: 通过Statement执行查询语句后,我们将得到类型为ResultSet的返回结果。该结果是一个迭代器,存储了所有查询返回的数据。

  • SQLException: 这个类处理的数据库应用程序中发生的任何错误。

基于JDBC API进行数据库访问,可以分解为以下三个步骤:

  • 与数据库建立连接
  • 发送SQL语句
  • 处理返回结果

这些类的描述看起来很枯燥,我们按照这三个步骤,通过典型的JDBC数据库访问代码来进一步理解这些类。

Connection con = null;Statement stmt =null;try {    // 1、加载MYSQL驱动,这是`Driver`的实现,MySQL的JDBC驱动类是com.mysql.jdbc.Driver    Class.forName("com.mysql.jdbc.Driver").newInstance();     // 2、连接到MYSQL,通过`DriverManger`来操作`Driver`,获取数据库连接    con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tianmayingblog", "root", "");     // 3、创建用以执行SQL语言的声明    Statement stmt = con.createStatement();    // 4、执行SQL,获取结果    ResultSet rs = stmt.executeQuery("select * from `user`");    // 5、遍历并解析结果    while (rs.next()) {        long id = rs.getLong("id");        // ...    }} catch (Exception e) {    // 如果有异常,进行异常处理    System.out.print("MYSQL ERROR:" + e.getMessage());} finally {    // 6、关闭连接与声明    try {        if (stmt != null) {            stmt.close();        }        if (con != null) {            con.close();        }    } catch (SQLException ignored) {    }}

以上代码注释中的6个步骤就是一个相对完整的访问过程,在接下来的开发实例中我们会进一步深入理解。

更多文章请访问

你可能感兴趣的文章
200页!分享珍藏很久的Python学习知识手册(附链接)
查看>>
程序员之神
查看>>
4 岁小女孩给 Linux 内核贡献提交
查看>>
推荐几个私藏很久的技术公众号给大家
查看>>
20 个 2020 年软件开发趋势预测
查看>>
王垠受邀面试阿里 P9,被 P10 面跪后网上怒发文,惨打 325 的 P10 赵海平回应了!...
查看>>
Python 趣味打怪:147 段简单代码助你从入门到大师
查看>>
卧槽!小姐姐用动画图解 Git 命令,这也太秀了吧?!
查看>>
厉害了!Python 编辑器界的神器 Jupyter ,推出官方可视化 Debug 工具!
查看>>
卧槽!Java 虚拟机竟然还有这些性能调优技巧...
查看>>
JavaScript 诞生的这 20 年来,都发生了什么...
查看>>
听说玩这些游戏能提升编程能力?
查看>>
7 年工作经验,面试官竟然还让我写算法题???
查看>>
被 Zoom 逼疯的歪果仁,造出了视频会议机器人,同事已笑疯丨开源
查看>>
上古语言从入门到精通:COBOL 教程登上 GitHub 热榜
查看>>
哈哈哈哈,「00 后黑话破解器」火爆 GitHub,这波操作我给满分!
查看>>
再见,Eclipse...
查看>>
超全汇总!B 站上有哪些值得学习的 AI 课程...
查看>>
如果你还不了解 RTC,那我强烈建议你看看这个!
查看>>
神器面世:让你快速在 iOS 设备上安装 Windows、Linux 等操作系统!
查看>>