Java学习笔记一MySQL数据库与JDBC编程

妖狐艹你老母 2023-07-14 08:04 90阅读 0赞

JDBC基础

ODBC(Open Database Connectivity)开放数据库连接。ODBC和JDBC(Java Database Connectivity)很像,严格来说,应该是JDBC模仿了ODBC的设计。ODBC也允许应用程序通过一组通用的API访问不同的数据库管理系统,从而使得基于ODBC的应用程序可以在不同的数据库之间切换。同样,ODBC也需要各数据库厂商提供相应的驱动程序,而ODBC则负责管理这些驱动程序。
JDBC驱动通常有如下4种类型:

  • 第1种JDBC驱动:称为JDBC-ODBC桥,这种驱动是最早实现的JDBC驱动程序,主要目的是为了快速推广JDBC。这种驱动将JDBC API映射到ODBC API。这种方式在Java 8中已经被删除了。早期为了让Java程序操作Access这种伪数据库,可能需要使用JDBC-ODBC桥,但JDBC-ODBC桥不适合在并发访问数据库的情况下使用,其固有的性能和扩展能力非常有限。基本上Java应用也很少使用Access这种伪数据库。
  • 第2种JDBC驱动:直接将JDBC API映射成数据库特定的客户端API。这种驱动包含特定数据库的本地代码,用于访问特定数据库的客户端。
  • 第3种JDBC驱动:支持三层结构的JDBC访问方式,主要用于Applet阶段,通过Applet访问数据库。
  • 第4种JDBC驱动:是纯Java的,直接与数据库实例交互。这种驱动是智能的,它知道数据库使用的底层协议。这种驱动是目前最流行的JDBC驱动。
    通常建议选择第4种JDBC驱动,这种驱动避开了本地代码,减少了应用开发的复杂性,也减少了产生冲突和出错的可能。如果对性能有严格的要求,则可以考虑使用第2种JDBC驱动,但使用这种驱动,则势必增加编码和维护的困难。

在这里插入图片描述

JDBC - Mysql 8.0连接测试

在安装Mysql过程中会提示安装Connector/j,其中包含适应Mysql版本的JDBC连接驱动
在这里插入图片描述
将其导入到项目中(如果没有此驱动,可去mysql官网下载),并删除之前的驱动
为了方便管理,在项目下新建一个目录,将驱动jar包复制到该目录下来,在libs右键选择Add as Library…,将包引入工程。
在这里插入图片描述
运行还是有问题:
在这里插入图片描述
在这里插入图片描述
之前版本的驱动类的 全限定名为 com.mysql.jdbc.Driver, 较新版本的驱动类的包结构发生了改变,全限定名变为 com.mysql.cj.jdbc.Driver , 更改即可
在这里插入图片描述

解决时区问题:解决此问题只需要在原 url 后附加 serverTimezone=UTC
在这里插入图片描述

  1. private static String url = "jdbc:mysql://localhost:3306/你的库?useSSL=false&serverTimezone=UTC";

成功
在这里插入图片描述
MySQL 5的示例
在这里插入图片描述
在这里插入图片描述

详解JDBC API中的对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ResultSet的getString方法几乎可以获取除Blob之外的任意类型列的值,因为所有的数据类型都可以自动转换成字符串类型。
在这里插入图片描述

测试:
在这里插入图片描述

  1. import java.sql.*;
  2. public class ConnMySql {
  3. public static void main(String[] args) throws Exception {
  4. Class.forName("com.mysql.cj.jdbc.Driver");
  5. try(
  6. Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/crashcourse?useSSL=true&serverTimezone=UTC", "root", "19950320zzr");
  7. Statement stmt = conn.createStatement();
  8. ResultSet rs = stmt.executeQuery("select * from vendors"))
  9. {
  10. while(rs.next()){
  11. System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"
  12. +rs.getString(3)+"\t"+rs.getString(4)+"\t"
  13. +rs.getString(5)+"\t"+rs.getString(6)+"\t"
  14. +rs.getString(7));
  15. }
  16. } catch (SQLException e){
  17. e.printStackTrace();
  18. }
  19. }
  20. }

在这里插入图片描述
可以使用absolute、previous、afterLast等方法自由移动记录指针的ResultSet被称为可滚动的结果集。从Java 5.0后,默认打开的ResultSet就是可滚动的结果集。可更新的结果集需要满足:所有数据都应该来自一个表,选出的数据集必须包含主键列。
在JDK 1.4以前,默认打开的都是不可滚动的,必须在创建Statement或PreparedStatement时传入额外的参数。
resultSetType控制ResultSet的类型。

  • ResultSet.TYPE_FORWARD_ONLY:该常量控制指针只能向前移动。JDK 1.4以前的默认值
  • ResultSet.TYPE_SCROLL_INSENSITIVE:该常量控制记录指针可以自由移动,但底层数据的改变不会影响ResultSet的内容
  • ResultSet.TYPE_SCROLL_SENSITIVE:该常量控制记录指针可以自由移动,但底层数据的改变会影响ResultSet的内容
    resultSetConcurrency控制Result的并发类型。
  • ResultSet.CONCUR_READ_ONLY:该常量指示ResultSet是只读的并发模式,默认
  • ResultSet.CONCUR_UPDATEBLE:该常量指示ResultSet是可更新的并发模式,默认

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
处理Blob类型数据
Blob通常用于存储大文件。如果要将图片插入数据库,显然不能通过普通SQL完成,需要使用PreparedStatement,该对象的setBinarySteam(int parameterIndex, InputStream x)可以为指定参数传入二进制输入流,从而可以实现将Blob数据保存到数据库的功能。可以调用ReulstSet的getBlob(int columnIndex)方法,返回一个Blob对象。Blob对象提供getBinarySteam方法获取该Blob数据的输入流,也可以使用Blob对象提供的getBytes方法直接取出该Blob对象封装的二进制数据。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CallableStatement调用存储过程,通过Connection的prepareCall方法来创建CallableStatement对象。通过CallableStatement的setXxx方法传入参数值,使用registerOutParameter方法注册存储过程返回值。执行后,通过getXxx方法来获取指定传出参数的值。

  1. //存储过程
  2. delimiter //
  3. create procedure add_pro(a int, b int, out sum int)
  4. beign
  5. set sum = a+ b;
  6. end;
  7. //
  8. CallableStatement cstmt = conn.prepareCall("{call add_pro(?, ?, ?)");
  9. cstmt.setInt(1,4);
  10. cstmt.setInt(2,5);
  11. //注册第三个参数是int类型
  12. cstmt.registerOutParameter(3, Types.INTEGER);
  13. //执行存储过程
  14. cstmt.execute();
  15. //获取传出值
  16. System.out.println(cstmt.getInt(3));

数据库连接池

数据库连接池是Connection对象得工厂,JDBC的数据库连接使用javax.sql.DataSource来表示,DataSource只是一个接口,该接口通常由商用服务器(如WebLogic、WebSphere)等提供实现,也有一些开源组织提供实现(如DBCP和C3P0等)。DataSource通常被称为数据源,它包含连接池和连接池管理两个部分。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

MySQL必知必会读书笔记

发表评论

表情:
评论列表 (有 0 条评论,90人围观)

还没有评论,来说两句吧...

相关阅读