写点什么

【Java 从 0 到架构师】JDBC,Java 多态实现原理解析

作者:Java高工P7
  • 2021 年 11 月 10 日
  • 本文字数:1826 字

    阅读完需:约 6 分钟

如何通过 Java 操作数据库?


JDBC,全称是 Java Database Connectivity


  • 在 Java 中用来规范如何访问关系型数据库,由各大数据库厂商去实现它

  • 属于 JavaSE 的一部分



下载 MySQL 的 JDBC 实现(jar,驱动包)


==============================================================================================


8.0 版本的驱动包同时支持 MySQL 5.7,8.0


文档:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-versions.html


下载地址:https://dev.mysql.com/downloads/connector/j/



JDBC 使用


==========================================================================


示例代码:https://gitee.com/szluyu99/mj_java/blob/master/04_JDBC/src/com/mj/Main.java


  1. Driver(驱动程序)注册到 DriverManager(驱动程序管理者)

  2. 利用 DriverManager 创建 Connection(数据库连接)

  3. 利用 Connection 创建 Statement(语句)

  4. 利用 Statement 执行 SQL 语句

  5. 关闭资源(关闭 StatementConnection 等)




MySQL 的 url 格式:


jdbc:mysql://IP 地址:端口号/数据库名


示例:


jdbc:myqsl://localhost:3306/xmg





从 JDBC 4.0 开始,显式注册驱动程序是可选的


  • 只需要将供应商的 Jar 放在类路径中,然后 DriverManager 就可以自动检测并加载驱动程序


JDBC 版本:


  • JDBC 4.0 包含在 Java SE 6 中

  • JDBC 4.1 包含在 Java SE 7 中

  • JDBC 4.2 包含在 Java SE 8 中

  • JDBC 4.3 包含在 Java SE 9 中


Statement 的常用 API




《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码




ResultSet executeQuery(String sql):执行 DQL 语句


int executeUpdate(String sql):执行 DML、DDL 语句


  • 如果是 DML 语句,返回值代表影响的记录数量


如果数据库没有任何返回值,通常返回 0


ResultSet 的常用 API




boolean next():让游标指向下一行


  • 如果指向的这行有数据,就返回 true


否则,返回 false


XX getXX(int columnIndex)XX getXX(String columnLabel)


  • 获取当前行(游标指向的那行)某一列的数据

  • columnIndex 的数值从 1 开始


PreparedStatement




PreparedStatement 接口继承自 Statement 接口


建议使用 PreparedStatement 替代 Statement


Preparedstatement 的优点:


  • 可以防止 SQL 注入

  • 执行速度比 Statement 快

  • 支持批量处理


配置文件




一些经常动态修改的值,建议放入到配置文件中,不要写死在 Java 代码中


  • 因为 .java 编译后变成 .class,无法直接修改其内容

  • 已部署的项目想要修改配置信息,则需要修改 Java 代码再重新部署


Java 中常用的配置文件:


  • properties:比较单一,适合量小、简单的配置

  • xml:比较灵活,适合量大、复杂的配置


properties 文件:


  • key,value 的分隔符是 =:

  • 建议分隔符左右不要留空格

  • #! 开头是单行注释

  • 可以用反斜线 \ 连接多行内容


数据库连接池




数据库连接池,可以提高访问数据库的性能,负责创建、分配、管理和释放数据库连接


基本思想:


  • 在初始化时,创建一定数量的数据库连接对象存储在内存中

  • 当需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已创建的空闲连接对象

  • 使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用

  • 当连接的空闲时间已超过最大空闲时间时,将会释放掉该连接

  • 可以通过设置参数来控制初始连接数连接的上下限数以及每个连接的最大使用次数最大空闲时间

  • 可以通过其自身的管理机制来监视数据库连接的数量、使用情况


Java 中常见的开源的数据库连接池:


  • C3P0,Proxool,DBCP,BoneCP,Druid




Druid 产自阿里巴巴,项目地址:https://github.com/alibaba/druid/


jar 包下载:https://mvnrepository.com/artifact/com.alibaba/druid


Spring JDBC


==============================================================================


示例代码:https://gitee.com/szluyu99/mj_java/tree/master/06_crm_Spring-JDBC


Spring JDBC 框架可以帮助开发者节省大量开发工作,自动去处理一些低级细节,比如


  • 异常处理、打开和关闭资源(Connection、Statement,ResultSet)


需要的 jar 包:


  • spring-jdbc

  • spring-beans

  • spring-core

  • spring-tx

  • spring-jcl




Spring JDBC 核心类:JdbcTemplate


构造方法:


public JdbcTemplate(DataSource datasource)


执行 DDL、DML 语句:


int update(String sql, Object... args)


执行 DQL 语句:


<T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args)


<T> queryForObject(String sql, RowMapper<T> rowMapper, Object... args)


JUnit

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
【Java从0到架构师】JDBC,Java多态实现原理解析