JDBC
1.JDBC概述
JDBC(Java DataBase Connectivity Java数据库连接)为多种DBMS(MySQL,Oracle,SQLServer,....)定义一套统一接口(统一Java API)
,这套统一接口(统一Java API)规定了用Java语言如何连接数据库,如何向数据发送SQL语句..其他数据库操作
2.JDBC操作步骤
a.导入要连接的数据库相关驱动
导入MySQL驱动的jar包
b.注册驱动
告诉JVM使用的是哪个数据库驱动
c.与数据库建立连接
d.向数据库发送SQL语句并执行
e.获取SQL语句的执行结果
f.释放资源
3.SQL注入
利用createStatement向数据库管理系统发送SQL,可能出现SQL注入
SQL语句:SELECT * FROM `user 1.JDBC概述
JDBC(Java DataBase Connectivity Java数据库连接)为多种DBMS(MySQL,Oracle,SQLServer,....)定义一套统一接口(统一Java API)
,这套统一接口(统一Java API)规定了用Java语言如何连接数据库,如何向数据发送SQL语句..其他数据库操作
2.JDBC操作步骤
a.导入要连接的数据库相关驱动
导入MySQL驱动的jar包
b.注册驱动
告诉JVM使用的是哪个数据库驱动
c.与数据库建立连接
d.向数据库发送SQL语句并执行
e.获取SQL语句的执行结果
f.释放资源
3.SQL注入
利用createStatement向数据库管理系统发送SQL,可能出现SQL注入
SQL语句:SELECT * FROM `user` WHERE uname='abc' AND password='1'or'1=1'
因此我们一般不使用 createStatement` WHERE uname='abc' AND password='1'or'1=1'
PreparedStatement预编译SQL
JDBC工具类
为了简化JDBC操作,提高代码复用性,将JDBC操作中重复代码抽取到一个工具类中
工具类中主要包含:
1.注册驱动
2.获取连接
3.释放资源
增删改都用update,查询用query
只有query操作会返回结果集
update操作返回的是int值,即影响的行数
普通无配置文件工具类
集合properties文件工具类
创建db.properties文件:专门存储键值对
/**
* Properties 使用:我们主要使用它与 IO 流结合的特性
* void load(InputStream inStream)
* 从输入流中读取属性列表(键和元素对)。
* void load(Reader reader)
* 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)
* 我们一般用 properties 格式的文件专门存储键值对
*/
properties.load(new FileInputStream("src/db.properties"));//在单元测试中 IO
流文件的相对路径相对的是当前模块
用这种方法的话,有可能路径填写错误
所以我们直接用类加载器中的getResourceAsStream()方法,该方法默认从类的根路径读取文件
String | getProperty(String key) |
以上两种方式区别主要在于:
注册驱动方式不同:
普通的在源代码里就已经定义好各项参数的值,不方便以后修改
properties工具类将各项参数的值定义在db.properties文件中,再通过流读取
到文件,作为参数传递给properties构造方法,将键值对封装到properties属性
集中,之后通过getproperty()方法来获取键值对中的值
连接池技术
用池来管理 Connection,这样可以重复使用 Connection。有了池,所以我们就不用自己来创建 Connection,而是通过池来获取 Connection 对象。当使用完 Connection 后,调用 Connection 的 close() 方法也不会真的关闭 Connection,而是把 Connection“归还”给池。池就可以再利用这个 Connection 对象了。
DBCP连接池
使用DBCP连接池
利用DBCP优化JDBC工具类
不需要自己创建连接,而是从DBCP连接池中获取连接,节约资源
DButils工具包
DBUtils 是 java 编程中的数据库操作实用工具,小巧简单实用。
DBUtils 封装了对 JDBC 的操作,简化了 JDBC 操作,可以少写代码。
Dbutils 三个核心功能介绍
⚫ QueryRunner 中提供对 sql 语句操作的 API.
⚫ ResultSetHandler 接口,用于定义 select 操作后,怎样封装结果集.
⚫ DbUtils 类,它就是一个工具类,定义了关闭资源与事务处理的方法
未使用连接池工具类进行增删改
使用连接池工具类进行增删改(不用自己创建连接)
利用DBUtils进行查询操作
/*
* 1.底层会拼接预编译 SQL,将拼接好的 SQL 发送到数据库执行
* SELECT * FROM product WHERE pid=8
* 2.将查询结果集的第一行数据通过对应的 JavaBean 的 setter 方法封装到对象中
* 3.返回该对象
*/