Java操作数据库(JDBC)
一:JDBC概述
简单来说就是JDBC是一种接口规范,各个厂商要实现这个接口的实现类,我们用各个厂商写好的实现类来连接他们的数据库
二:连接数据库
1:先下载连接数据库的jar包
Maven Repository: Search/Browse/Explore
在这个链接中搜索mysql,下载第二个,版本号要对应
2:导入jar包
3:连接数据库
所有类型的数据库都是以下步骤
1:加载驱动
2:获取连接对象(连接哪个厂商的数据库,以及连接哪个数据库)
3:获取SQL语句的对象
4:编写SQL语句
5:利用SQL语句的对象执行编写的SQL语句
代码如下:
三:JDBC实现数据库的增删改查
1:对数据进行增加
2:对数据进行删除
3:对数据进行修改
4:对数据进行查找
四:SQL注入漏洞
Statement对象
通过改变SQL注入的语句的逻辑来实现登录
例如:
String username="12345";
String password="1234'or'1=1";
String sql="select * from users where username="+"'"+username+"'"+"and password="+"'"+password+"'";
System.out.println(sql);
改变sql语句的逻辑实现登录
五:利用preparedStatement对象来拼接字符串执行SQL语句
利用preparedStatement对象解决了SQL注入的改变逻辑的问题
代码如下:
我们传入的参数都加上''通过转义字符来转的,这样就避免的改变sql语句的逻辑实现登录
六:Statement对象和preparedStatement对象的区别
1:preparedStatement是Statement的子类
2:Statement每次执行SQL语句时都要对SQL语句进行校验和编译,preparedStatement创建对象的时候就以及对SQL语句进行校验和编译,执行的时候就不需要在进行校验和编译了,所以preparedStatement对象只需要校验和编译一次,一个是执行的时候把SQL语句传进去,一个是创建对象的时候就把SQL语句传进去了
3:Statement可以改变SQL语句的逻辑,preparedStatement不能改变SQL语句的逻辑
七:使用DAO来封装操作数据库的步骤
业务逻辑:
entity:是和表对应的,一个entity对象代表表中一行数据
Mapper:表的解释器,把查询表中的每一行数据都封装到entity对象当中(有几行封装几个entity对象)
DAD:是操作数据库增删改查
参数1:要传入sql语句,以及对应的
参数2:要传入表的解析器
参数3:要传入sql语句的参数
遍历结果集利用Mapper解析器把结果解析并封装到entity对象当中
最后用list集合把entity对象封装到里面,这样一张表的数据就封装完成了
代码实现
1:我们先把连接数据库的步骤和关闭资源的步骤封装成一个工具类,这样我们用的时候直接取就可以了
2:把表的数据字段封装到Entity类当中
3:Mapper:表的解释器,把查询表中的每一行数据都封装到entity对象当中(有几行封装几个entity对象)
写一个接口统一规划,里面的内容让实现类来写
他的实现类
这样做的好处函数统一规范化,里面内容由各个的实现类来编写
4:我们写操作数据库的类(增删改查)
增删改:
查:
代码解释:
1:利用工具类获取连接对象并获取PreparedStatement对象并传入sql语句
第一个参数是sql语句
2:把sql语句的参数添加进去使sql语句完整
第三参数是sql语句的参数,由于我们不知道sql语句要传入几个参数以及他的类型是什么所以我们用到了object类型的可变参数
3:执行sql语句并返回结果集
4:遍历结果集,把每一行的数据都封装到Entity对象当中,并增加到集合当中
第二个参数是解析器,负责把结果集的数据封装到Entity对象当中并返回Entity对象(entity:是和表对应的,一个entity对象代表表中一行数据)
5:关闭资源,并返回集合