如何实现Java的JDBC编程(基本概念,驱动包安装)

Java的JDBC编程

1 概念

何为 JDBC编程

就是通过Java代码来操作数据库

咱们学数据库,无论是命令行 还是图形化界面,都不是开发中的主流使用方式

通过代码操作数据库,才是正真主流的方式

但无论是哪种方式,核心知识都是SQL

image-20220716200104711

像我们的一些主流数据库,为了方便程序猿实现客户端程序,会提供一些 API 接口,称为“数据库SDK”,我们可以借助这些API比较方便地访问数据库服务器

  • API是计算机中一个非常广泛使用的术语,也就是提供了一些类/方法/函数,可以让程序猿直接调用来完成一些功能
  • SDk也是计算机中一个非常广泛使用的术语,指软件开发工具包,提供了一些工具

由于API是数据库提供的,所以不同的数据库,提供的API站的可能都不一样

image-20220716201351891

我们希望有一个统一的标准,于是Java就提供了一套标准的接口体系,让这些数据厂商,提供得到API都往Java的这套接口体系中适配

程序员就只需要掌握Java的这一套API即可适应所有常见的主流数据库了

Java的这套操作数据库 的API,就称为 JDBC

各个数据库厂商,为了能够适配 JDBC
因此就需要写一些额外的程序来完成这个工作.厂商提供的这套额外的程序,称为"JDBC驱动包"使用Java操作各种数据库,就需要安装对应数据库提供的驱动包,才能真正进行使用

JDBC本质上就是Java对于各种数据库差异性的封装,目的就是为了简化程序猿的学习使用成本 !

2 安装驱动包

首先需要先有驱动包

从哪里去找驱动包?

  1. MySQL官网 (Oracle收购) 不太容易
  2. 中央仓库,驱动包也是一种"第三方库" 。第三方库有很多,就有大佬,把各种第三方库收集起来,放到一个统一的网站上。

下面介绍一个仓库

[/Maven Repository仓库](Maven Repository: Search/Browse/Explore (mvnrepository.com))

image-20220716213550326

找到这个

image-20220716213611083

在版本列表中选择5系列的版本(5.1.49,5.1.47这些都可以)要和 你的数据库服务器版本匹配,数据库是mysql8,就用8.0系列

是5就用5系列

image-20220716233222334

选择一个版本,点进去

image-20220716233452315

然后就开始下载了

image-20220716233617699

下载好之后,就得到了一个 .jar 后缀的文件,叫做jar包,本质上就是一个类似于rar的压缩包

( Java发布程序给别人使用的时候,也会经常打jar包,jar包里主要就是一些 .class 文件)

image-20220716234001769

然后用解压软件打开

image-20220716234110648

像这样的压缩包,不需要手动解压缩,直接放到项目中即可,JVM在运行的时候就能自动读取压缩包内部的内容

新建一个目录,然后把刚刚的 jar包拷贝到这个目录里

image-20220716234706007 image-20220716234803869

然后就会变成这样

image-20220716234833349

右键,找到 add as library

image-20220716234910887

直接点OK

image-20220716235108007

然后,这个jar包就能被idea识别了!
image-20220716235141207

3 实现JDBC编程

接下来,就可以进行代码的编写了

要操作数据库,就得连接上数据库服务器,要想连上数据库服务器,就得描述清楚服务器所在的位置

在JDBC里面,使用DataSource这类来描述数据库的位置

image-20220716235956902

这个操作,就是向上转型

用一个父类引用指向子类的实例

image-20220717000314168

这个操作,就是向下转型

当然,上面两步操作就等价于这一步

image-20220717000452240

虽然两种写法没啥区别.但是实际开发中可能还是更多的看到第一种写法!!

**第一种写法**里,得到的数据源是==DataSource类型==.

后续写其他代码,方法/类,如果使用到数据源,持有的类型也是DataSource类型。

DataSource是通用的类型,可以代指任何数据库。未来一旦需要更换数据库,代码改动是非常小的,只需要把实例化这一小块代码改了即可,其他代码都不用变。

第二种写法,得到的数据源是==MysqIDataSource类型==。

后续的其他代码,方法/类,如果用到数据源,持有的类型也就是MysqlDataSource

MysqIDataSource只是针对MySQL的类型.

未来一旦更换数据库,可能就需要把散落在代码各个地方的MysqIDataSource类型进行修改.

  • 这也是咱们所学习的"多态"的重大的意义
  • 多态本质其实就是对于"封装"的更进一步
  • "封装"是为了让程序猿不必了解太多的实现细节,就能直接使用,从而降低使用成本.
  • "多态"就是更进一步, 不光程序猿不必了解细节了,而且甚至于连这个对象是啥类型都可以不必关心了.更进一步的降低了使用成本~~

第一步我们要做的就是通过DataSource来确定服务器的位置~~

那么位置如何描述?

描述一个网络上的资源,常用手段,就是使用URL (唯一资源定位符/网址)

 DataSource dataSource = new MysqlDataSource();
   ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");

这一长串就是我们的URL

下面我们对它简单的解析一下,看看它其中都隐藏的那些信息??

image-20220717010338472

向上述URL,我们不必要去背!

背,是很容易背错的,写了一次之后,后续只要复制粘贴即可

//1. 使用 DataSource 描述 MySQL 服务器的位置
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("******");

image-20220717011255308

以上操作,就描述了数据库的位置

  • IP地址
  • 端口号
  • 数据库名
  • 用户名
  • 密码

第二步,就是和数据库服务器建立连接

在网络通信中,有两种风格,

一种是 “ 有连接 ”,相当于“ 打电话 ”,必须要电话拨通了(连接建立上了),两者才能通信

一种是 “ 无连接 ”,相当于“ 发微信 ”

数据库这里的通信方式采取的是有连接的方式

好处是,就是能够在通信之前,先"投石问路", 先看看通信的链路是否畅通

坏处是,就是连接需要进行管理.尤其是不用的连接要记得及时释放 (以前用座机的时候,经常有一种bug,电话没扣严实)

使用dataSource.getConnection来建立连接

image-20220717091858251

然后我们发现

image-20220717092018795

这是数据库编程中常见的异常,受查异常,(受查异常一定要手动处理,非受查异常不一定要手动处理)

  1. throws
  2. try catch

image-20220717092329245

啥时候会抛出异常?

和数据库连接失败的时候就会抛异常

啥时候会连接失败,原因有很多

DataSource这里填写的信息,任何有一点点纰漏,都会导致连接失败。一般耐心阅读失败的详细信息,都是可以很容易找到问题的

看到了这个对象就说明现在已经连接成功了

image-20220717092609362

如果密码或用户名输错了就会这样

image-20220717092720941

第三步,构造 SQL 语句,(JDBC 操作数据库,本质仍然是通过 SQL 来描述数据库操作)

        //例如,插入数据的操作
        //直接用String 格式的类还不行,还需要搭配一个特殊的类
        String sql = "insert into student values(1,'张三')";
        PreparedStatement statement = connection.prepareStatement(sql);

image-20220717094008307

第四步,执行SQL

        //4.执行SQL
        //insert,update,delete都是通过 executeUpdate 来执行的
        // select 则是通过 executeQuery 来执行的
        //executeUpdate的返回值是一个整数,表示这个操作影响到几行
        int n = statement.executeUpdate();

image-20220717094440895

第五步,断开连接,释放资源 (后创建的先释放)

        //5.断开连接,释放资源 (后创建的先释放)
        statement.close();
        connection.close();

image-20220717094730116

完整的代码

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class jdbcHello {
    public static void main(String[] args) throws SQLException {
        //1. 使用 DataSource 描述 MySQL 服务器的位置
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2. 和 数据库 建立连接 使用dataSource.getConnection来建立连接
        Connection connection = dataSource.getConnection();
        //System.out.println(connection);

        //3. 构造 SQL 语句,JDBC 操作数据库,本质仍然是通过 SQL 来描述数据库操作
        //例如,插入数据的操作
        //直接用String 格式的类还不行,还需要搭配一个特殊的类
        String sql = "insert into student values(1,'张三')";
        PreparedStatement statement = connection.prepareStatement(sql);

        //4.执行SQL
        //insert,update,delete都是通过 executeUpdate 来执行的
        // select 则是通过 executeQuery 来执行的
        //executeUpdate的返回值是一个整数,表示这个操作影响到几行
        int n = statement.executeUpdate();
        System.out.println("n = "+n);

        //5.断开连接,释放资源 (后创建的先释放)
        statement.close();
        connection.close();
    }
}

看一看运行的效果把~

image-20220717094859215

然后我们打开MySQL命令行客户端查看,发现操作成功

image-20220717095044549

如果再次执行程序,是会报错的!

image-20220717094936652

小结: JDBC中的关键概念

  1. DataSource描述了数据源. (数据在哪,服务器在哪…
  2. Connection表示一个连接. 需要先建立连接才能进行通信。一个数据库服务器可以同时处理多个连接.
  3. PreparedStatement描述了一个SQL语句,通过这个对象来执行SQL

看,发现操作成功

image-20220717095044549

如果再次执行程序,是会报错的!

[外链图片转存中…(img-N3fFa8vp-1658023416775)]

小结: JDBC中的关键概念

  1. DataSource描述了数据源. (数据在哪,服务器在哪…
  2. Connection表示一个连接. 需要先建立连接才能进行通信。一个数据库服务器可以同时处理多个连接.
  3. PreparedStatement描述了一个SQL语句,通过这个对象来执行SQL
  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值