一、概念
Java Database Connectivity,Java数据库连接
本质: 是官方(Sun公司)定义了一套操作所有关系型数据库的规则 ,即接口。各个数据库厂商区实现这套接口,提高数据库驱动jar包,我们可以使用这套接口编程,真正执行的代码是驱动Jar包中的实现类
二、入门步骤:
- 导入驱动jar包 mysql-connector-java
链接:
驱动jar包8.0.16
提取码:n9ux - 获取数据库连接对象 Connertion
- 定义sql
- 获取执行sql语句的对象 Ststement
- 执行sql,接受返回的结果
- 处理结果
- 释放资源
create database jdbctest;
use jdbctest;
create table user(
uid int primary key auto_increment,
username varchar(20),
password varchar(20),
name varchar(20)
);
insert into user values (null,'aaa','111','张三');
insert into user values (null,'bbb','222','李四');
insert into user values (null,'ccc','333','王五');
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.junit.Test;
import com.mysql.jdbc.Driver;
public class jdbcdemo1 {
@Test
//JDBC入门程序
public void demo1() {
//加载驱动
try {
Class.forrName("com.mysql.jdbc.Driver");
//获得连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest", "root", "12345");
String sql = "select*from user";
java.sql.Statement stm = conn.createStatement();
//执行sql
ResultSet resultSet = stm.executeQuery(sql);
while(resultSet.next()) {
int uid = resultSet.getInt("uid");
String username = resultSet.getString("username");
String password = resultSet.getString("password");
String name = resultSet.getString("name");
System.out.println(uid + " " + username + " " + password + " " + name);
}
//释放资源
resultSet.close();
stm.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
步骤:
1. 注册驱动
Class.forName("com.mysql.jdbc.Driver");
2. 获得链接
Connection getConnection(String url,String username,String password);
url写法:jdbc:mysql://localhost:3306/jdbcname
jdbc:协议
mysql:子协议
localhost:主机名
3306:端口号
默认连本机:url简写jdbc:mysql:///jdbcname
3. Connection :连接对象
作用:创建执行sql的语句对象
Statement createStatement()
:执行sql语句,有sql注入漏洞的风险
PreparedStatement prepareStatement(String sql)
:预编译sql语句,解决sql注入的漏洞
CallableStatement prepareCall(String sql)
:执行sql中存储的问题
进行事务的管理
setAutoCommit(boolean autoCommit)
:设置事务是否自动提交
commit()
: 事务提交
rollback()
:事务回滚
4.Statement:执行SQL
主要作用:执行SQL语句
boolean execute(String sql)
:执行SQL,执行select语句返回true,否则返回false
ResultSet executeQuery(String sql)
:执行SQL中的select语句
int executeUpdate(String sql)
:执行SQL中的insert/update/delete语句
执行批处理操作
addBatch(String sql)
:添加到批处理
executeBatch()
:执行批处理
clearBatch()
:清空批处理
ResultSet:结果集
结果集:就是查询语句(select)语句查询的结果的封装
主要作用:结果集获取查到的结果的
next()
,针对不同的类型的数据可以使用getXXX()获取数据
三、JDBC的资源释放
jdbc程序运行完后,要释放程序在运行过程中,创建的那些与数据库进行的交互的现象,这些对象通常是ResultSet、Satement、Connection对象
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.junit.Test;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Statement;
public class jdbcdemo1 {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
@Test
//JDBC入门程序
public void demo1() {
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest", "root", "12345");
String sql = "select*from user";
stmt = (Statement) conn.createStatement();
ResultSet resultSet = stmt.executeQuery(sql);
while(resultSet.next()) {
int uid = rs.getInt("uid");
String username = rs.getString("username");
String password = rs.getString("password");
String name = rs.getString("name");
System.out.println(uid + " " + username + " " + password + " " + name);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
//释放资源
if(rs != null) {
try {
rs.close();
}
catch(SQLException sqlEx) {
rs = null;
}
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
}
}
}