Java开发笔记(一百四十六)JDBC的应用原理

关系数据库使得海量信息的管理成为现实,但各家数据库提供的编程接口不尽相同,就连SQL语法也有所差异,像Oracle、MySQL、SQL Server都拥有自己的开发规则,倘若Java针对每个数据库单独做一套方法,这些数据库操作方法将变得又庞大又冗余。为了解决不同数据库各自为政的问题,Java设计了统一的JDBC规范,只要程序员按照JDBC的方法操作,那么不管什么数据库都能在JDBC框架下正常处理。
JDBC全称”Java DataBase Connectivity”,意思是Java语言的数据库连接管理。JDBC由JDK内部的数据库管理工具类组成,它提供了标准的数据库操作方法,帮助程序员使用统一的方式开展数据库编程,从而提高了数据库编程的开发效率。然而因为JDBC屏蔽了相关的内部细节,所以在操作具体数据库之前,需要额外引入对应的数据库连接器,也就是导入该数据库的jar包。
以MySQL为例,它的Java版本连接器可前往官网下载,下载页面是https://dev.mysql.com/downloads/connector/j/,在该页面的下方选择操作系统”Platform Independent”之后,会显示两种压缩包(tar.gz格式与zip格式),在其中一种的右边单击Download按钮开始下载。下载完毕将文件解压,找到里面的Java连接器如mysql-connector-java-8.0.16.jar,把jar文件添加到Java工程的依赖库,之后即可在Java代码中操作MySQL数据库了。
对于每个数据库来说,JDBC都要求提供下列四个要素:
1、数据库的驱动:要连接哪种数据库,Oracle还是MySQL,这得通过驱动名称来区分。MySQL的驱动类型是com.mysql.cj.jdbc.Driver。
2、数据库的连接地址:如同http地址那样,数据库也有入口的访问地址,该地址包含协议、IP、端口、数据库实例等信息。就MySQL而言,它的连接地址格式形如”jdbc:mysql://IP地址:端口号/数据库实例名称”,注意新版的MySQL还需在地址后面补充时区信息,否则运行会报错。下面是一个完整的MySQL连接地址例子:

3、数据库的用户名:登录数据库时候的用户名称,不同用户拥有不同的权限。
4、数据库的密码:与用户名对应的密码,登录之时会校验用户名与密码是否正确。
只有正确提供上述四个要素,方能通过JDBC连接指定的数据库。完整的连接过程分成两个步骤:加载数据库驱动、根据用户名和密码连接数据库,分别介绍如下:
1、加载数据库驱动
由于数据库的驱动以字符串展现,因此必须借助于反射技术加载驱动,加载数据库驱动的代码示例如下:

正常情况下,程序只要在运行时加载一次驱动,加载动作本身包含了初始化操作,后续就不必重复加载驱动了。

2、根据用户名和密码连接数据库
连接数据库的本质是获取该数据库的可用连接,调用DriverManager管理类的getConnection方法,输入连接地址、用户名、密码三个参数,校验通过即可获得当前的数据库连接,也就是Connection对象。获取数据库连接的代码例子如下所示:

上面代码之所以将Connection对象的赋值动作放到try的圆括号内部,是因为Connection类实现了AutoCloseable接口,意味着只要把它放入try语句,那么无论是否发生异常,系统都会自动调用close方法关闭数据库连接。除了close方法,Connection还提供了下面几个方法:

isClosed:获取数据库的连接状态,返回true表示连接已关闭,返回false表示连接未关闭。
getCatalog:获取该连接的数据库实例名称。
getAutoCommit: 获取数据库的自动提交标志。如果该标志设置为true,则每次执行一条SQL语句,系统都会自动提交该语句的修改内容。
setAutoCommit:设置自动提交的标志,默认为true表示自动提交。
commit:提交数据库的修改。
rollback:回滚数据库的修改。注意要先关闭自动提交,才能通过rollback方法回滚事务。否则报错”Can’t call rollback when autocommit=true”。
createStatement:创建数据库操作的执行报告。
prepareStatement:创建数据库操作的预备报告。
接下来把以上两个连接步骤串起来,形成以下的数据库连接代码:

运行上面的连接代码,观察到下面的输出日志,由日志可见成功连上了MySQL数据库。

Original: https://www.cnblogs.com/pinlantu/p/11461120.html
Author: pinlantu
Title: Java开发笔记(一百四十六)JDBC的应用原理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574385/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java 注解

    Java的注解是个很神奇的东西,它既可以帮你生成代码,又可以结合反射来在运行时获得注解标识的对象,进行逻辑处理,它能帮助我们完成很多很多不可能完成的任务,这回我们就来一起来了解下它…

    Java 2023年5月29日
    091
  • java 日期解决方案

    在很长的一段时间里,Java 的日期时间解决方案一直是一个备受争议的设计,它的问题很多,有的是概念容易让人混淆(比如:Date 和 Calendar 什么情况下该用哪个),有的是接…

    Java 2023年5月29日
    078
  • 解决Nginx同网段ip_hash负载均衡无效果

    问题 Nginx ip_hash在局域网中所有机器访问的都是同一台机器没有Hash。造成原因如被Hash的Ip为192.168.1.100;实则上Nginx进行Hash算法时取的是…

    Java 2023年6月5日
    082
  • (转)libreoffice + jodconverter + Springboot 整合使用将Word转PDF

    转:https://www.codeleading.com/article/64074162845/ https://jingyan.baidu.com/article/91f5d…

    Java 2023年5月29日
    073
  • 【设计模式】Java设计模式-装饰者模式

    Java设计模式 – 装饰者模式 😄 不断学习才是王道🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆原创作品,更多关注我CSDN: 一个有梦有戏的…

    Java 2023年6月16日
    0110
  • nginx单页应用配置

    location ~* html { rewrite .* /index.html break; } location /login { rewrite .* /index.htm…

    Java 2023年5月30日
    069
  • Spring IOC 理解

    参考博文:https://www.cnblogs.com/xdp-gacl/p/4249939.html Original: https://www.cnblogs.com/xll…

    Java 2023年6月13日
    079
  • SpringCloud之Seata

    1.Seata是什么? 1.1 概念:Seata 是一款开源的分布式事务解决方案,提供高性能和简单易用的分布式事务服务。1.2 术语(1)TC: 事务协调者维护全局和分支事务的状态…

    Java 2023年6月13日
    057
  • OneAPM大讲堂 | Java 异常日志记录最佳实践

    【编者按】本文作者是 Casey Dunham。Casey 是一位具有 10 多年经验的专业软件开发人员,以其独特的方式应对应用安全 问题而闻名。本文系国内ITOM 管理平台One…

    Java 2023年5月29日
    0163
  • Doug Lea文章阅读记录-JUC系列

    3.3 QueuesThe heart of the framework is maintenance of queues of blocked threads, which ar…

    Java 2023年6月13日
    081
  • C# 反射 判断类型是否是列表

    1 /// 2 /// 判断类型是否为可操作的列表类型 3 /// 4 /// 5 /// 6 public static bool IsList(this Type type) …

    Java 2023年5月30日
    0119
  • MYSQL 免安装

    本文使用mysql 8.0.22进行演示 一、MYSQL 下载 官网下载:地址:https://dev.mysql.com/downloads/mysql/ 阿里云盘:链接:htt…

    Java 2023年6月5日
    0144
  • Java中动态指定长度打印

    C语言中的printf,sprintf打印实现 以前使用C语言的时候知道可以使用如下方法动态指定长度打印: 点击查看代码 printf("[%-*s]", 10…

    Java 2023年6月9日
    0128
  • Java实现3DES加密

    生成秘钥简单粗暴 import java.io.UnsupportedEncodingException; import java.security.KeyPair; import…

    Java 2023年6月5日
    0100
  • react与redux学习资料的整理

    重点内容 React学习1.新手入门可以访问react的官方网站,如果英语不是特别好的同学可以访问中文版的,具体链接http://reactjs.cn/react/index.ht…

    Java 2023年6月9日
    071
  • 大批量数据的插入优化的小细节

    今天在测试将elasticsearch中的20万条数据迁移到MySQL中时,总感觉速度比较慢,尝试了好多方法,比如网上都说的: public void batchSave(List…

    Java 2023年6月7日
    081
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球