当前课程知识点:Web后端开发技术 > 第9章 某高校毕业生信息发布系统开发 > 9.1 技术准备 > 9.1.4_技术准备- JDBC工具类
同学你好
今天我们学习这个知识点
因为在我们的项目当中会大量的
与数据库操作与数据库进行交互
因此我们定义了一个DBUtil
这样的一个工具类
来封装一些简单的数据库操作
以使我们的代码更加简洁和复用
那么在这个Util当中
我首先定义几个静态的常量
比如说和数据库的连接
用户名
密码
它的url
当然了实际情况这些常量并不应该
写死在我们的代码当中
应该搁到我们的一个配置文件当中
然后在这个代码当中去读取我们的
配置文件
这样的话我们修改的时候
只需修改我们的配置文件
而不用再修改代码就可以了
但是这里为了逻辑上比较清晰
让大家好理解
我们就暂且放在我们代码里了
那么首先我们就要注册我们的
数据库的驱动
那么这个驱动我是放在一个静态代码块
也就是说一旦我DBUtil
被调用第1次的时候
它就会静态代码块就会被运行
那么这个驱动就会注册了
那么它就会常驻内存
好
下一个方法是我们的获取连接的方法
那么这个方法通过我们的
driverManager获取一个连接
根据我们的url
用户名以及密码
我们就可以拿到这个连接
然后在其他地方用的时候就可以直接
调用connection方法
这样的话我们可以把它的异常进行
一个try catch的处理
那么在我们主要写代码的地方
直接调用getConn这个
方法就可以了
非常的简洁
那么下一个大家去想
我们的增加操作
删除操作
还有修改操作
最终实际上执行的都是
executeUpdate方法
那么所以说我这里我自定义一个
executeUpdate的方法
它传入的参数是sql
和我们sql它可能会有的一些
参数
这个参数类型我就搁成object
因为它有可能是整型的
有可能是字符串类型的等等
这样的话我都给他搁到我这个
Object数组当中传进来
然后设置进去就可以了
那么它的实现我简单的带大家去
写一下
首先我们要获取一个连接
那么这个连接现在我就可以通过
get
我自己的
getConnection方法就可以了
然后executeUpdate
它实际上是会返回一个数值
这个数值表示它影响的函数
比如说我添加的时候影响一行
我更新的时候有可能影响三行
那么这时候我定一个变量
变量就是我这个操作完了以后会
影响的行数
我初始化给他初始化成负1
那么紧接着我就要定义我的
preparedStatement对象
好
然后我这个对象可以通过我的
conn.preparedStatement来获取
然后把我的sql传进去
好
那么我sql里面有可能是
带那种问号参数的
那么下一步我先给他按CTRL+1
处理异常
下一步我就要把这个参数设置到
我sql语句里面
那么这个参数有可能我不传
所以说我要判断一下
如果我的params是空值
或者我params它即使不是空值
但是它的长度是等于0的
也就是我
实际上没传我就可以直接去执行
sql语句就可以了
executeUpdate方法
大家可以看到它返回的是一个整型
表示我影响的数据
我就给他放回到我赋给我
return number这个值
就可以了
那么否则
否则我就要去设置参数
for int i=0
小于我们
params.length
i++
就pstmt.我用set
因为我不知道它的类型
直接用setObject占了就可以了
那么注意我们参数类型是从1开始的
所以说我这里得是i加上1
那么我当前那个参数是ms
第i个参数就可以了
然后我是不是
还需要调用这样的一句话
帮我参数执行完了以后
去执行sql语句就可以了
那么大家去想一想
我这一堆东西能不能稍微
给它简化一点
实际上可以用一个if
比如说这两个参数都没有取到的情况下
我直接就给它设置参数
设置完参数直接执行
execute update也是可以的
那么具体怎么去写
因为这样写比较好理解
但是代码稍微多几行
但是关系并不是特别大
首先先方便大家理解是第一位
然后我把 return number给返回
当然在返回之前
我肯定要关闭prepare statement对象
在下面
我有一个这样的关闭方法
但是我现在还没有实现
我先调用他一下
等待会儿再去实现
把pstmt给传进去就可以了
那么总之我肯定要把
prepare statement给关掉
那么我这里又搁了一个重载的方法
重载的方法是只有sql语句
没有参数的
方便大家去使用
那么大家去想重载的方法
我是不是实际上就是调用的
我上面这个方法
excuteupdate方法
我传一个sql进去
然后我的参数是null就可以了
因为在这里我已经对
null值进行了处理
那么在有些时候我需要在web拿到
pstmt对象
我给他返回
那么这时候我就可以
直接调用我的conn方法
然后设置我的pstmt对象
然后因为我这里同样
也是牵涉到设置参数
所以说我把这一段拷过来
Ctrl C Ctrl V
只不过大家注意
我们这里面不去做任何的执行
也就是说它是没有参数
我就什么都不做了
这就回到这
如果有参数
我就给他设置进去
当然不去执行
好
然后我把pstmt对象
给他返回就可以了
就这个样子非常简单
那么下面有几个关闭的方法
首先我是传进来三个
因为我可能会关resultSet
pstmt还有conn 那么这时候我可以
判断一下我们的resultset
它不等于空值
好
然后我们才会进行关rs.
close
要处理异常control加1
surround
with try catch
同样的逻辑我们需要判断
如果我们的pstmt不等于空
好
我们pstmt.
close
Surround with
try catch
同样的逻辑
我们要判断我们的conn不等于
空
我们conn.
close
同样try catch ctrl+1
surround with
try catch
好了
这时候我就把这三个对象都关掉了
那么大家想
close prepared statement
我想关他是不是我这样调就行了
直接调close方法
我的rs传null
我的对应的prepare statement
就是我当前这个对象
好
我的conn
如果大家去传这样的话
大家觉得可能行
但是这样在这里拿不到conn对象
大家说这么去传
这样写实际上有些问题的
因为我这里的conn不等于0
我preparedStatement
它在创建的时候
比如说我在创建的时候
实际上它是有它的conn来创建的
所以说我应该是啥
拿到他的conn进行关闭
所以说我这块怎么去写这块应该是
通过我的pstmt.getConnection
也就是说创建pstmt的connection
然后给他进行关闭才行
当然这里头也会发生try catch
给它surround一下就可以了
那么这个是close conn
我们就可以直接调用close方法
rs没有
pstmt没有
然后把我当前的conn给传进去
就可以了
好
这是我的工具类
为了验证我这个工具类对不对
我这里写了一个main方法
然后我直接调用我的DBUtil
executeUpdate
然后往我之前给大家讲的
student数据库里
name和age
插入两条值
这两条值我new一个Object数组
分别是jjq3和3
好
我们来运行一下这个代码
看一下效果
好
现在代码运行完了
我们来看一下
数据库里有没有这个值
大家可以看到已经有我们jjq3和3
这个值了
那么当然了
大家也可以把这个方法再改成其他的
方法
比如说我们是想update
Update一个
Student
比如说set年龄等于某一个值
Where
我们的name是等于某一个值的
好
现在我想把年龄给改成
比如说35
对哪个用户开始改
对我们jjq3这个用户进行更改
那么大家可以知道
现在这个值是3
我要改成35
运行一下这个方法
得把之前那条给注释掉
要不就会又插入一条
jjq3
现在应该已经插入了
没关系
又插入一条
然后两个都改成35了
Ok
我们再试一个方法
比如说我们的删除方法实际上都是一样的
delete from student
where name等于多少
设置一个值进去
现在我只想把jjq3删掉 肯定是删了2条
那么我们同时还能返回一个
具体影响条数
你可以打印出来看一眼
这里我们就不进行打印了
好
我们代码已经执行完了
我们看一下记录有没有被删除
好
刷新一下
大家可以看到我的这两条记录已经都
被删除了
所以说有了这个工具类
我们在执行对应的sql语句的话
这个代码就会显得非常的简洁了
这个知识点就讲到这里
谢谢
-1.0 导学
--1.0.1 导学
-1.1 Web应用开发概述
--1.1.3 测试
-1.2 准备Java Web应用开发环境
--1.2.2 测试
-1.3 任务实现:Hello World Web项目
--1.3.2 测试
-1.4 小结
--1.4.1 小结
-本课程所有代码
--课程参考代码
-2.0 导学
--2.0.1 导学
-2.1 Servlet概述
--2.1.3 测试
-2.2 创建Servlet
--2,2,3 作业
-2.3 Servlet应用
--2.3.4 测试
-2.4 任务实现:某高校毕业生信息发布系统-注册与登录(Servlet版)
--2.4.3 测试
-2.5 ServletConfig接口
-2.6 ServletContext接口
-2.7 HttpServletRequest接口
--2.7.5 测验
-2.8 HttpServletResponse接口
--2.8.3 测试
-2.9 任务实现:某高校毕业生信息发布系统-简历添加
--2.9.1 任务实现:某高校毕业生信息发布系统-简历添加
-2.10 小结
-动画演示:Java Web应用服务器处理客户端请求的过程
-3.0 导学
--3.0.1 导学
-3.1 Cookie技术
--3.1.3 测试
-3.2 Session技术
--3.2.2 Session技术-Session技术应用购物车
--3.2.3 测试
-3.3 URL重写与隐藏表单域
--3.3.2 测试
-3.4 任务实现:某高校毕业生信息发布系统-简历修改
--3.4.1 任务实现:某高校毕业生信息发布系统-简历修改
-3.5 小结
--3.5.1 小结
-4.0 导学
-4.1 jsp概述
--4.1.2 测试
-4.2 脚本元素
--4.2.2 测试
-4.3 指令元素
--4.3.2 测试
-4.4 动作元素
--4.4.3 测试
-4.5 内置对象
--4.5.3 测试
-4.6 JavaBean
--4.6.3 测试
-4.7 任务实现:某高校毕业生信息发布系统-首页(JSP版)
--4.7.1 任务实现:某高校毕业生信息发布系统-首页(JSP版)
-4.8 小结
--4.8.1 小结
-5.0 导学
--5.0.2 测试
-5.1 el语法
--5.1.2 测试
-5.2 el隐含对象
--5.2.2 测试
-5.3 任务实现:某高校毕业生信息发布系统-学生详细信息展示
--5.3.1 任务实现:某高校毕业生信息发布系统-学生详细信息展示
--5.3.2 测试
-5.4 小结
--5.4.1 小结
-6.0 导学
--6.0.2 测试
-6.1 核心标签库
--6.1.5 测试
-6.2 任务实现:某高校毕业生信息发布系统-首页(JSTL版)
--6.2.1 任务实现:某高校毕业生信息发布系统-首页(JSTL版)
--6.2.2 测试
-6.3 小结
--6.3.1 小结
-7.0 导学
--7.0_导学
-7.1 过滤器
--7.1.3 测试
-7.2 监听器
--7.2.1.1与ServletContext相关的监听器
--7.2.4 测试
-7.3 任务实现:某高校毕业生信息发布系统-单态登录
--7.3.1 任务实现:某高校毕业生信息发布系统-单态登录
--7.3.2 测试
-7.4 小结
--7.4.1小结
-8.0 导学
--8.0_导学
-8.1 JDBC API
--8.1.2 测试
-8.2 JDBC API访问MySQL基本步骤
--8.2.2 测试
-8.3 任务实现:某高校毕业生信息发布系统-注册与登录
--8.3.1 任务实现:某高校毕业生信息发布系统-注册与登录(JDBC版)
--8.3.2 测试
-8.4 小结
--8.4.1小结
-9.0导学
--9.0导学
-9.1 技术准备
--9.1.5 测试.
-9.2 系统设计
-9.3 系统实现
-9.4 小结
--9.4.1小结




