目录
一、JDBC概念
JDBC
就是使用
Java语言操作关系型数据库的一套API,全称(Java DataBase Connectivity) java数据库连接;
1.1Java操作数据库的流程
-
第一步:编写
Java
代码
-
第二步:
Java
代码将
SQL
发送到
MySQL
服务端
-
第三步:
MySQL
服务端接收到
SQL
语句并执行该
SQL
语句
-
第四步:将
SQL
语句执行的结果返回给
Java
代码
1.2编写代码步骤
- 创建工程,导入驱动jar包
- 注册驱动
- 获取连接
- 定义SQL语句
- 获取执行SQL对象
- 执行SQL
- 处理返回结果
- 释放资源
1.3具体操作
1.3.1 创建新的空的项目
1.3.2定义项目的名称,并指定位置
1.3.3 对项目进行设置,JDK版本,编译版本
1.3.4 创建模块,指定模块的名称及位置
1.3.5 导入驱动包
将mysql的驱动包放在模块下的lib(自己创建并命名的文件夹)目录下,并将该jar添加为库文件。
驱动包的下载:
-
1.打开 MySQL 官网:https://www.mysql.com/
mysql官网
- 2.点击 downloads,把页面滚动到最下面,点击 MySQL Community (GPL) Downloads
- 3.点击 Connector/J
- 4.点击 General Availability(GA) Releases,在 Select Operating System 下拉列表选择 Platform Independ
注意在添加库文件时有三个选项:
-
Global Library
: 全局有效
-
Project Library :
项目有效
-
Module Library
: 模块有效
根据自己的需求进行选择,这里我选择的是模块有效
1.3.6 在src下创建类
然后编写如下代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class test01 {
public static void main(String[] args) throws Exception {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
String url ="jdbc:mysql://127.0.0.1:3306/dd1";
String username ="root";
String password ="root3340";
Connection conn = DriverManager.getConnection(url,username,password);
//3.定义sql
String sql ="update account set money =2000 where id =1";
//4.获取执行sql的对象
Statement stmt = conn.createStatement();
//5.执行sql
int count= stmt.executeUpdate(sql);//返回值返回的是影响的行数
//6.处理返回结果
System.out.println(count);
//7.释放资源
conn.close();
stmt.close();
}
}
二、JDBC API详解
2.1 DriverManager(驱动管理类) 作用
2.1.1注册驱动
registerDriver方法用于注册驱动的
Class.forName(“com.mysql.jdbc.Driver”);
查看Driver类的源码:
注意:MySQL 5之后的驱动包,可以省略注册驱动的步骤;
自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类;
2.1.2 获取数据库连接
static Connection getConnection(String url,String user,String password)
参数:
- url:连接路径
- 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…
- 实例:jbdc:mysql://127.0.0.1:3306/dd1
- user:用户名
- password:密码
2.2 Connection(数据库连接对象)作用:
- 获取执行SQL的对象
- 管理事务
2.2.1 获取执行对象
- 普通执行SQL对象:
- Statement createStatement()
- 预编译SQL的执行SQL对象:防止SQL注入:
- PreparedStatement prepareStatement(sql)
- 执行存储过程的对象
- CallableStatement prepareCall(sql)
2.2.2 事务管理
Connection接口中定义了3个对应的方法
- 开启事务 void setAutoCommit(boolean autoCommit) 将此连接的自动提交模式设置为给定状态。参与autoCommit表示是否自动提交事务,true表示自动提交事务,false表示手动提交事务。而开启事务需要将该参数设为false。
- 提交事务 void commit() 使自上次提交/回滚以来所做的所有更改为永久更改,并释放此Connection对象当前持有的所有数据库锁。
- 回滚事务 void rollback() 撤销当前事务中所做的更改,并释放此Connection对象当前持有的所有数据库锁
2.3 Statement
概述:Statement对象的作用就是用来执行SQL语句,而针对不同类型的SQL语句使用的方法也不一样。
- 执行DDL、DML语句
- int executeUpdate(String sql) 执行给定的SQL语句,这可能是INSERT,UPDATE或DELETE语句,或者不返回任何内容,如SQL,DDL语句的SQL语句。
- 执行DQL语句
- ResultSet executeQuery(String sql) 执行给定的SQL语句,该语句返回单个ResultSet对象。
2.4 ResultSet (结果对象集)作用
封装SQL查询语句的结果。
执行DQL语句就会返回该对象,对应执行DQL语句的方法如下 :
ResultSet executeQuery(sql):执行DQL语句,返回ResultSet 对象ResultSet对象提供了操作查询结果数据的方法如下:
- boolean next()
- 将光标从当前位置向前移动一位
- 判断当前行是否为有效行;ture:有效行,当前行有数据;false:无效行,当前行没有数据
- xxx getxxx (获取数据)
- xxx:数据类型 如int getInt(参数);String getString(参数)参数:int类型的参数,列的编号,从1开始,String类型的参数:列的名称。
2.5 PreparedStatement
- 作用:预编译SQL语句并执行,防止SQL注入问题;
- SQL注入:SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器攻击的方式。
- 1.获取PreparedStudent对象
- String sql =”select *from user where username =”root” and password =”1234″;
- 通过Connection对象获取,并传入对应sql语句;
- PreparedStatement pstmt = conn.preparedstatement(sql);
- 2.设置参数值
- PreparedStatement对象:setxxx(参数1:位置编号从1开始,参数2:xxx的值)xxx:数据类型;
- 3.执行SQL语句:
- executeUpdate():执行DDL语句和DML语句;
- executeQuery():执行DQL语句;
//1:注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2:获取连接
String url ="jbdc:mysql:///dd1?useSSL=false";
String username1 ="root";
String password1 ="1234";
Connection conn = DriverManager.getConnection(url,username1,password1);
//定义接收用户输入和用户名和密码:
String name ="zhangsan";
String pwd ="ffff";
//3:定义sql
String sql ="select *from tb_user where username=? and password=?";
//4.获取PreparedStatement对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//设置?
pstmt.setString(1,name);
pstmt.setString(2,pwd);
//5.执行sql
ResultSet resultSet = pstmt.executeQuery();
//判断是否成功与否
if(resultSet.next()){
System.out.println("登录成功!");
}else{
System.out.println("登录失败");
}
//7.释放资源
conn.close();
pstmt.close();
resultSet.close();
三、数据库连接池实现
数据库连接池简介:
- 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
- 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;
- 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏
好处:
- 资源重用
- 提升系统响应速度
- 避免数据库连接遗漏
- 标准接口:DataSource;
- 接口提供的获取连接的功能:Connection getConnection();
- 常见的数据库连接池:DBCP、C3P0、Driud;
Driud使用
- 导入jar包
- 定义配置文件
- 加载配置文件
- 获取数据库连接池对象
- 获取连接
具体的步骤:
1.
现在通过代码实现,首先需要先将druid
的
jar
包放到项目下的
lib
下 并添加为库文件
2.编写的配置文件如下:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///db1?
useSSL=false&useServerPrepStmts=true
username=root
password=1234
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
3.使用的代码如下:
* Druid数据库连接池演示
*/
public class DruidDemo {
public static void main(String[] args) throws
Exception {
//1.导入jar包
//2.定义配置文件
//3. 加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));
//4. 获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//5. 获取数据库连接 Connection
Connection connection = dataSource.getConnection();
System.out.println(connection); //获取到了连接后就可以继续做其他操作了
); }}