服务器后台与mysql_JDBC---后端服务器与数据库交互的桥梁

Java数据库连接技术:通过Java程序从数据库中把相应的数据提取到java程序中

1.JDBC概念

37f999ee1c6edc065422db4f983f56c9.png

2. JDBC的步骤

1) 导入数据驱动jar包

① 右键项目名称/新建一个文件夹folder,名字叫lib

② 把*.jar包copy到lib目录下

③ 右键*.jar/Build path/Add Build Path 把*.jar加入到项目构建路径中

4f091e06600136b946cc5271341ba14c.png

2) JDBC执行过程

e53ce44e9bd29e21929a66cefcc1f5dc.png

通过反射类加载classforname()把mysql提供的驱动类注册到java里面去

3) JDBC-CRUD操作

① insert、update、delete语句执行过程一样

② select语句需要处理ResultSet结果集

d2c8dd2a74092a3285f910cd86c00bfa.png

③ 资源的关闭流程

在try…cathc…finally中确保所有的资源都去关闭一次,关闭顺序,后进来的先关闭

146f84f41d3d841fc7972d56207f8034.png

3. ResultSet数据

元数据:描述数据的数据

Mysql默认数据:用来存储和描述用户创建的数据信息(元数据库)

对rs结果集进行描述的相应数

daeb5a37e65fab08f8e8b2050df0e01a.png

getColumnClassName():包路径

getCatalogName():数据库的名字

getColumnCount():列数

getColumnLabel():id

getColumnName():sid

getColumnType():int

getColumnTypeName():INTEGER

4. PreparedStatement对象

① sql注入

在传入到sql参数的值中恶意加入相应的sql不能识别的字符导致程序运行时出错

② Statement对象分析

此对象执行sql中的参数只能随着sql语句一起赋值,只能执行一个完整的sql语句。当sql中出现了异常字符此对象当做sql中的一个字符处理,影响sql语句的正常执行。

此对象不能防止sql注入,安全性相对低

此对象不会缓存执行计划,执行性能相对较低

③ PreparedStatement对象分析

此对象创建的同时构建sql语句,sql语句的参数通过占位符(?)的方式进行说明,并无需传入实际参数值,可通过对象的set方法对占位符参数进行赋值,赋值时只会把传入的值当做sql中的参数值处理,不会把直接插入到sql语句中,防止异常字符插入到原始sql语句中,破坏sql结构。

此对象能够防止sql注入,安全性相对较高

在创建对象时根据传入的sql语句进行预编译(创建当前sql的执行计划,sql有哪些条件,查询或修改的字段….),执行计划会被保存在此对象中,下一次如果有同样的sql执行,这无需重新编译(执行计划),直接运行。当前计划可以被多次高效执行。

c4b0a94a65a16d4b8345eb15af1db52a.png

5. JDBC工具类封装

6. 单例设计模式

只对外创建一个实例

a1888f2cece0ff11adf24a1fdea9702a.png

7. 属性文件的封装---数据库的优化

数据库的配置文件:databases.properties,不用修改源代码

通过系统全局配置文件配置系统中相应参数

通过java提供的Properties类进行属性文件的加载

00110c36ebaab05046e45663d48a951c.png

过程:

① 在src目录下(classes目录)创建一个属性文件config.properties

03ac9d867963435eededdf1b4e48964a.png

② 创建一个Config.java类,加载属性文件并对外提供属性值

③ 项目通过Config类调用其对外提供的属性获取属性值

DAO模式(中转器)--数据库数据封装为对象数据

1.减少代码量,解决重复的工作,减少代码冗余

2.方便后期维护

根本思想:将数据访问  数据封装  方法处理分开

目的:方便维护,减少代码冗余

-1.创建实体类( 负责数据封装)

将数据库数据封装为对象数据

-2.创建对应实体类的接口(xxxxDAO)

提供必需实现的方法

-3.实现对应类的接口方法(xxxxDAOImpl)

xxxxDAOImpl implements xxxxDAO

ca1e7933538c63ed1ba229b69bfe54d8.png

8. JDBC的crud操作的封装

需求:对表的修改操作非常频繁,如有几十张表的操作

是否可以把所有的修改操作封装成一个函数?

查询是否也可以封装一个方法:对任意表都可以查询

先想思路…

1) 修改操作的封装

① 分析

要的结果:int  对表影响的记录条数

int I = pstmt.executeupdate();

创建pstmt对象

Pstmt = Conn.prepareStatement(sql)  // sql中参数  可变长参数 Object

给sql参数赋值

Pstmt.setxxx(name,value)

② 实现

97c6457348dcc3de8bd86981729645df.png

2) 查询操作的封装

需求:能够对任意表的查询,返回List

① 分析

要的结果:List list

List.add(Object)

While(rs.next()){

// 获取每一行数据

// 封装成object

问题:如何把值复制给对象对应的属性  BeanUtils

}

Rs = pstmt.executequery();

得到rs对象和修改的封装一致

eee28d700489a62b9499638f1d628e58.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值