jdbc入门
jdbc就是使用java语言操作关系型数据库的一套api
各个不同的关系型数据库实现jdbc接口 因此java程序员可以通过同一套代码实现操作不同的数据库
而各个关系型数据库的实现类就是常说的驱动
使用
-
注册驱动
1 | Class.forName("com.mysql.jdbc.Driver"); |
-
获取连接
1 | Connection conn = DriverManager.getConnection(url, username, password); |
Java代码需要发送SQL给MySQL服务端,就需要先建立连接
-
定义SQL语句
1 | String sql = “update…” ; |
-
获取执行SQL对象
执行SQL语句需要SQL执行对象,而这个执行对象就是Statement对象
1 | Statement stmt = conn.createStatement(); |
-
执行SQL
1 | stmt.executeUpdate(sql); |
-
处理返回结果
-
释放资源
事物实现
具体代码实现如下:
1 | /** |
statement
Statement对象的作用就是用来执行SQL语句。而针对不同类型的SQL语句使用的方法也不一样。
-
执行DDL、DML语句
excuteUpdate(sql)
返回受影响的函数
-
执行DQL语句
excuteQuery(sql)
返回对象ResultSet Result数据的获取
1 | / 6.1 光标向下移动一行,并且判断当前行是否有数据 |
PreparedStatemen的作用
PreparedStatement作用:
预编译SQL语句并执行:预防SQL注入问题
-
获取 PreparedStatement 对象
1 | // SQL语句中的参数值,使用?占位符替代 |
-
设置参数值
上面的sql语句中参数使用 ? 进行占位,在之前之前肯定要设置这些 ? 的值。
PreparedStatement对象:setXxx(参数1,参数2):给 ? 赋值
Xxx:数据类型 ; 如 setInt (参数1,参数2)
-
参数:
参数1: ?的位置编号,从1 开始
-
参数2: ?的值
-
执行SQL语句
executeUpdate(); 执行DDL语句和DML语句
executeQuery(); 执行DQL语句
==注意:==
调用这两个方法时不需要传递SQL语句,因为获取SQL语句执行对象时已经对SQL语句进行预编译了。
数据库连接池
就是链接复用技术
在使用数据库的时候频繁的断开创建链接会导致功能性的损耗,
而连接池就是在一块开始的时候创建多个连接,不断开,在有线路需要访问数据库的时候直接连接上
不同连接池技术在于底层复用逻辑不同
Driud使用
导入jar包 druid-1.1.12.jar
定义配置文件
加载配置文件
获取数据库连接池对象
获取连接
编写配置文件如下:
1 | driverClassName=com.mysql.jdbc.Driver |
使用druid的代码如下:
使用druid的代码如下:
1 | /** |
是以java来使用关系型数据库的一套api
各厂商来实现这套api,以确保规则一样
而在编程中的表现就是驱动
- 注册驱动
1 | com.mysql.cj.jdbc.Driver |
- 获取链接
1 | String url="jdbc:mysql://127.0.0.1:3306/test" |
- 定义sql语句
1 | String sql=""; |
- 获取执行对象
1 | Statement stmt = conn.createStatement(); |
- 执行sql
1 | stmt.executeUpdate(sql); |
jdbc api详解
DriverManager(驱动管理类)
作用:注册驱动,获取数据库链接
url
1 | #指链接路径,语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1,参数键值对2 |
配置useSSL=false参数,禁止用安全链接方式,解决警告提示
Connection
作用:获取执行sql的对象,管理事务
获取执行对象
- 普通执行sql对象
1 | statement createStatement() |
- 预编译sql的执行sql对象:防止sql注入
1 | PreparedStatement PreparedStatement(sql); |
- 执行存储过程的对象
1 | CallableStatement prepareCall(sql); |
执行事务管理
意思是和数据库的事务管理是一样的
- 开启事务
1 | setAutoCommit(boolean),ture为自动,falsh为手动,也即为开启事务 |
- 提交事务
1 | commit(); |
- 回滚事务
1 | rollback(); |
==通过try catch来判断是commit还是rollback==
statement
- 执行sql语句
1 | int executeUpdate(sql):执行dml,ddl语句 |
Preparedstatement
开启预编译文件
作用:1.预编译sql防止sql的注入问题
原理:对敏感字符转义
sql注入:sql注入是通过操作输入来修改事先定义好的sql语句,以达到执行代码对服务器攻击的方法
获取PreparedStatement 对象
1 | //sql中的参数值用?占位符代替 |
设置参数
1 | pstmt.setXXX(参数1,参数2):给?赋值 |
执行sql
1 | executeUpdate(); executeQuery(); 不需要再传递sql |
ResultSet
作用:1.封装了DQL 查询语句的结果
设置对象 ResultSet res;
1 | //将指向一行的光标 向下移一行并且返回是否有数据 |
数据库连接池
简介
是个容器,中间有多个数据库的链接,当有人时就分配给他。
当一个链接的空闲时间超过最大空闲时间之后会被释放
好处:资源重用,提升系统响应速度,避免数据库链接泄露
实现
官方接口:
获取链接
1 | DataSource |
常见的数据库连接池
DBCP
C3P0
Druid(阿里巴巴)