【Java】JDBC详解

JDBC

JDBC概念

概念:Java Database Connectivity Java数据库连接 ,Java语言操作数据库

JDBC本质:是官方定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口编程,真正执行的代码是驱动jar包中的实现类。

使用步骤

image-20201129235901149

导入jar包详细步骤

  • 将需要导入的Jar包复制添加进Project下的libs文件夹中
  • 选中jar包文件,添加为libs
    • 选择Add As Libraries

对象详解

image-20201130000142554

image-20201130001641319

image-20201130001944783

image-20201130002826698

image-20201130002645714

实际运用

image-20201130003820493

image-20201130003908208

判断是否有数据,看结果集下一行是否存在。

image-20201130221507014

结果集ResultSet

image-20201130221604599

写工具类获取路径URL和String值

image-20201130232513386

工具类

image-20201130232622444

工具类实现

image-20201201191930905

image-20201201192025199

image-20201201192135749

image-20201201192230797

image-20201201192254501

重复的部分框架结构

练习

image-20201201192938604

需求分析改进

image-20201201193923458

练习实现代码

image-20201201193603849

image-20201201193704094

image-20201201193745250

注意问题

SQL注入问题

在使用一些SQL语句的时候,会因为一些语句注入不符合开发者原意,绕过SQL验证的机制,产生安全隐患的问题。

需要使用到PreparedStatement,预编译的SQL语句。

步骤如下:
image-20201201200229541

image-20201201200604375

JDBC处理事务

简单逻辑的事务管理

image-20201201202937036

image-20201201203011641

image-20201201203115376

但是这些代码在执行的时候,如果出现错误,可能导致事务并没有完全执行。体现在实际的场景中的时候,可能是张三的余额减掉了而李四的钱却没有加上,导致出现安全事故。

这个时候需要做出更加安全有效的措施。

执行的操作是需要加上**【事务回滚】**,在抓取异常的部分【catch】中,抓取所有可能发生的异常,用Exception e接受异常,在异常抓取块中,进行事务回滚的判断【若执行对象不为null,则进行事务回滚】,并同时抓取事务回滚可能产生的异常【SQLException e1】,异常中简单处理,输出e1.printStackTrace();

改进之后的代码【部分】

image-20201201203956988

  • 出现异常,抓取事务

image-20201201204049244

  • 抓取异常,异常处理

image-20201201204155956

事务管理

image-20201201220440329

数据库连接池

image-20201201222208963

为了简化代码,方便开发,我们需要引入数据库连接池和**【Spring JDBC Template】**。

根据之前的逻辑进行开发的话,申请的对象频繁使用后释放,会造成运算资源等的浪费,也会造成代码的繁冗(但是优点是不会造成内存的长期占用),导致开发难度加大。

在这种情况下,我们引进数据库连接池的概念。

数据库连接池就是相当于一个容器,将可能会用到的数据库连接对象存放在这个容器中,称之为数据库连接池。

使用完连接对象之后,将对象归还到数据库连接池中,不会被释放掉。同时申请使用对象的时候也简化了很多。使用数据库连接池优点是:

  • 访问速度变快
  • 节约系统资源
  • 连接利用率提高

查看标准开发文档中的数据,DataSource【位于javax.sql中】的详细介绍。

image-20201201222423820

知识点

image-20201201222937587

数据库连接池的实现

image-20201201223220890

C3P0—数据库连接池的实现

image-20201201225103675

注意事项

  • 配置文件名字为指定的值时,会自动加载配置文件
  • 不要忘记导入数据库驱动jar包
  • 通过创建核心对象——数据库连接对象来使用(区别于后面的Druid数据库连接池)

Druid—数据库连接池的实现

使用步骤

image-20201201231029252

注意事项

  • 使用的时候不需要指定配置文件名,需要自己手动加载使用
  • 配置文件是properties形式的文件
    • 在src文件下new一个file,命名为XXX.properties
    • 在source格式下添加名值对的方式注意事项:
      • 名用大写比较规范
      • 【=】符号两边别打空格
      • 名值对写完后别加分号
  • 使用时候需要创建数据库连接池对象,通过工厂DruidDataSourceFactory】来获取

部分实现代码

image-20201201230857102

其中,InputStream是用来接收配置文件的输入字符。

创建Druid连接池的工具类

为了方便Druid的数据库连接池的使用,创建工具类对象。

实现代码

image-20201201231940413

image-20201201232024809

image-20201201232124975

释放资源的时候需要进行重载,但是发现代码块中有重复的部分。可以在参数少的方法中直接返回多个参数的方法,并将没有的参数赋值为空,if判断不满足,跳过即可。

这样的编码大大精简了代码的长度。

image-20201201232336741

具体的体现就是将这个方法中的rs传值null,返回给上面少参数的方法当成返回值。但要注意编码的顺序

image-20201201232539451

表现为这段代码,直接调用三参数的方法,将第一个参数赋值为空,结果作为返回值即可。

最后一个阶段,获取连接池方法。

image-20201201232755117

Druid工具类调用

实现代码

image-20201201233305489

image-20201201233356713

Spring JdbcTemplate

概念 Spring JDBCSpring框架对于JDBC实现的一个封装。

使用步骤

image-20201201235226984

使用前准备

导入jar包:

IOC需要的jar包:

commons-logging-1.1.3.jar
      spring-aop-4.0.0.RELEASE.jar //注解会使用到的包
      spring-beans-4.0.0.RELEASE.jar
      spring-context-4.0.0.RELEASE.jar
      spring-core-4.0.0.RELEASE.jar
      spring-expression-4.0.0.RELEASE.jar

MySQL驱动包、c3p0jar包:

c3p0-0.9.1.2.jar
      mysql-connector-java-5.1.37-bin.jar

JdbcTemplate需要的jar包:

spring-jdbc-4.0.0.RELEASE.jar
      spring-orm-4.0.0.RELEASE.jar
      spring-tx-4.0.0.RELEASE.jar

注:上面的可能因为版本差异,有所区别,教学视频中以下为准。

实际上应用时导入的jar包有:

image-20201201234049968

实现代码

image-20201201234914942

实际上使用JDBC temple时,只需要调用template之后就可以了,其余的操作(归还连接对象,释放对象,异常处理等)不需要我们再手动完成,封装的包会自己完成这些操作,大大简化了使用的步骤。

练习内容

image-20201201235501159

实现步骤

用单元测试代码,实时测试是否执行成功这些语句。

实现代码

image-20201202000047931

image-20201202000940496

image-20201202001132326

image-20201202001508189

上面这段是正确的代码,如果传入两个返回结果,将会报错。因为一次只能传入条记录,查询的结果集长度只能为1,将列名作为key,将值作为value。【键值对】

image-20201202001753642

上面的代码返回了两个字段集合,将会报错

如果要查询多条记录并返回,应该返回的是List集合,代码如下。

image-20201202002033234

这次的返回时候,是将作为List的单个值,返回一个的集合List。

下面的代码是原来的老方法,并没有直接调用Spring框架中提供的方法,代码冗余度高

image-20201202002559578

image-20201202002646881

下面的代码调用了Spring框架中的封装的方法,代码比较简答,但是在进行传参的时候,需要将源码复制过来,修改其中的封装的方法中的private 返回值类型 全部改成对应的实现类,如将 int 改成 Integer ,double 改成 Double;之后更改Getter和Setter方法,重新返回的toString方法。

image-20201202003343179

最后一个阶段,返回查询总记录数。

image-20201202003534490

Spring JdbcTemplate中使用的方法

image-20201202003737295

根据B站视频学习总结过来,如有纰漏,敬请指出。

视频地址:java高级课程 JDBC【黑马】idea

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页