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