JDBC概述
概述
- JDBC:java database connection,使用java语言连接数据库
- 是java内部提供一套操作数据库的接口(标准),实现对象数据库的统一访问
功能
- 一个java应用程序和数据库交互的桥梁
- one write,run anywhere的思想。
组成
- DriverManager类:驱动管理器,用户注册驱动,获取连接对象
- Connection接口:数据库的连接对象
- Statement接口:执行SQL语句,操作数据
- PreparedStatement接口:执行SQL语句,操作数据
- ResultSet接口:结果集(一张虚拟的表)
通过JDBC实现CURD操作
准备
<1> 创建表
create table student(
sid int primary key auto_increment,
sname varchar(32) not null,
age int,
hobby varchar(32),
shows varchar(32)
);
<2>创建实体类
public class Student {
private int sid;
private String sname;
private int age;
private String hobby;
private String shows;
public Student() {
super();
}
public Student(int sid, String sname, int age, String hobby, String shows) {
super();
this.sid = sid;
this.sname = sname;
this.age = age;
this.hobby = hobby;
this.shows = shows;
}
.....get/set方法
<3> 引入数据库厂商提供的驱动 (.jar文件的方式)将文件引入到 WebContent 下 WEB-INF 下 lib 中
/WebContent/WEB-INF/lib/mysql-connector-java-8.0.18.jar
<4> 编码
使用JDBC访问数据库的步骤:
1. 加载数据库的驱动
2. 获取数据库的连接对象
3. 编写SQL语句
4. 获取Statement对象,执行sql语句
5. 处理结果集
6. 释放资源
DriverManager 介绍
- 作用:注册数据库驱动
- 获取数据库连接对象
注册数据库驱动
1. 注册数据库驱动:方式一
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
2. 方式二
Class.forName("驱动类全称:包名+类名");
推荐使用方式二来注册数据库驱动程序,扩展和灵活性更强,一步到位
获取数据库连接对象(前两者都可以使用)
Connection getConnection(url, user, password);
参数一:URL,统一资源定位符,标识网络上的一个具体的资源(网页,一张照片,一个视频等等)
协议+ip地址+端口+资源名称
jdbc:mysql:// 127.0.0.1 : 3306 /test
第二个参数: 用户名
第三个参数: 密码
Connection getConnection(String path);
url+username+password
例如: jdbc:mysql://127.0.0.1:3306/test?user=root&password=root
注意:用户名和密码传输的key是固定的
Connection getConnection(url, properties)
参数二:属性对象
Properties p = new Properties();
p.setProperty("user","root");
p.setProperty("password","root");
Connection 介绍
作用:数据库的连接对象,控制事务的实施
- void setAutoCommit(boolean autoCommit); 设置事务的提交方式 默认 true 自动提交
- void commit(); 提交事务
- void rollback(); 回滚操作
ResultSet介绍
作用:封装了查询的结果数据,内部含有一个游标,默认执行数据前。
方法:
- boolean next() ,将指向数据的游标下移,返回有没有数据的标记
- Object getObject(int ColIndex)
- Object getObject(String ColName);//推荐使用
public class JDBCDemo {
public static void main(String[] args) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
// 1. 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 获取数据库链接对象 ?serverTimezone=UTC&characterEncoding=utf-8
conn = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&characterEncoding=utf-8", "root", "root");
// 测试是否链接成功
System.out.println(conn);
// 3. 获取执行sql语句的对象
st = conn.createStatement();
// 4. 执行语句
String sql = "select * from student";
rs = st.executeQuery(sql); // 执行查询语句 返回resultset结果集
// 5. 遍历结果集
while (rs.next()) {
int sid = rs.getInt("sid");
int age = rs.getInt("age");
String sname = rs.getString("sname");
String hobby = rs.getString("hobby");
String shows = rs.getString("shows");
System.out.println(sid + " " + sname + " " + age +" "+ hobby +" "+ shows);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
// 6. 释放资源
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
if (st != null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}