JDBC自学笔记

34 篇文章 1 订阅
3 篇文章 0 订阅

教程在这里->https://www.bilibili.com/video/BV1eJ411c7rf?p=1

代码在这里->这里

资料,详细笔记,jar包等等在这里:

链接:https://pan.baidu.com/s/14gZhUeHLTomCMd6QELdqbA 
提取码:3iqf 

疯狂表白康康老师!!!!

自己记的笔记很零散,主要是敲代码为主。

 

目录:

技术体系

JDBC概述

JDBC编写步骤

使用PreparedStatement实现CRUD操作

操作访问数据库

插入:

通用增删改

查询:

查询固定一个表

查询任意表中一个数据通用操作:

查询任意表中多个数据通用操作:

使用PreparedStatement好处

使用blob类型数据

数据库事务

查看数据库隔离级别

设置数据隔离级别

创建DAO层,并且相关接口实现类

测试dao层

数据库连接池

C3P0 (P47)

DBCP (P49)

Druid (p50)

Apach-DBUtils实现CRUD

如何替换jar包


 

 

这个部分的学习代码我放到了github中的learn的jdbclearn中

技术体系

 

HTML:显示

XML:一般用在配置文件

Servelt:java代码。获取请求,处理请求,响应

JSP:动态页面展示

Ajax:异步请求

JSON:实质上是字符串

JDBC概述

JDBC是独立于特定数据库管理系统,通用的SQL数据库存取和操作的共同接口(一组API)

 

JDBC编写步骤

 

 

IDEA中导入jar包,在项目文件夹下创建lib文件夹,导入jar,然后右键add as lib

idea如何导入jar包

详情见代码:(共有五种方式在connection文件中)

 

使用PreparedStatement实现CRUD操作

操作访问数据库

 

 

这个sql注入例子就是把一个and的关系修改为了or的关系,并且最后一个1=1永远成立。

所以Statemen具有很严重的弊端,我们不详细展开,使用PrepareStatement可以避免这种情况,所以我们具体讲解这个。

 

插入:

 

通用增删改

 

注意:当我们的表名使用关键字(不建议)时,我们需要添加单引号,例如,否则报错

 

注意:如果JDBC插入中文但是显示为问好,那么需要修改配置文件

url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8

 

查询:

ORM

 

 

因为blob类型最大可以到4G所以我们使用文件类型来存储

查询固定一个表

 

当然为了获取不确定个数的值,并且返回到对象中,我们需要使用到元数据,和反射来解决其中的问题

元数据:用来获取到我们需要的数值和对应的类型

反射:用来动态的赋值

 

 

 

注意:创建类的属性名需要和数据库表中的对应属性名相同

如果不同会出现以下问题:

 

当然可以解决这个问题:

1.在sql语句中起别名

 

2.不要使用getColumnName,而是使用getColumnLabel

 

 

如果没起别名那么getColumnLabel对应的就是原名称

 

为什么使用通配符可以防止sql注入问题?

在于:预编译,也就是这个sql语句已经执行过了,其中的逻辑(与或非)已经确定,我们只是需要把不确定的地方在后面进行填充。

 

使用executeUpdate返回的是int类型数据,我们可以使用这个来判断是否成功操作。

 

查询任意表中一个数据通用操作:

 

 

 

 

使用案例:

 

查询任意表中多个数据通用操作:

 

 

 

使用PreparedStatement好处

 

使用blob类型数据

 

 

 

 

数据库事务

 

数据一旦提交无法回滚

 

 

 

 

 

查看数据库隔离级别

 

 

 

设置数据隔离级别

 

避免脏读:

 

创建DAO层,并且相关接口实现类

基础baseDAO层,表示所有DAO都要使用的通用方法,其他内容都继承这个基础DAO实现相关操作,Impl

 

测试dao层

idea中创建测试

 

 

数据库连接池

 

java中的内存泄漏:表示java中的对象不能被回收的问题。

 

 

 

 

C3P0 (P47)

 

 

 

 

当然我们需要把数据库连接池的建立放到外面,因为我们只需要创建一个连接池即可。

 

DBCP (P49)

 

 

配置文件

 

真正的使用:

 

但是同样的问题,我们数据库连接池只需要创建一次就可以了,但是这个配置需要我们的pros.load(is),不能提到方法外,所以我们使用静态代码块,随着类的加载而加载,并且·只执行一次。

当有多步操作,并且只需要执行一次的时候我们可以考虑到静态代码块!

 

Druid (p50)

 

 

我们需要使用的是创建连接使用的用户名是username不是name

 

 

Apach-DBUtils实现CRUD

 

 

这个接口的出现是因为我们查询返回的时候会有很多重的情况,所以我们创建接口来承接我们各种不同的返回的情况,例如如果我们需要的是返回单个数据,那么我们可以使用BeanHandler

 

 

 

 

 

ScalarHandler用于查特殊值

 

 

如何替换jar包

 

点击工程右键:

 

remove

 

 

idea版:

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值