JDBC项目实践与源码解析——JDBC实践
本专栏为系列文章,如果想要系统学习JDBC,作者建议从第一篇文章,顺序读完全部文章。
文中项目源码地址:https://github.com/bethanwang/jdbc-study
本文将创建项目,并通过项目实践使用JDBC联通数据库,并运行测试,读取到数据库中的数据。
1. 创建maven项目
关于maven的配置和使用本文不再讲解,不了解的同学可以自己学习一下。
1)打开idea,在idea中创建maven项目,项目名:jdbc-study
,新建包:com.study.cs.demo
,将NetBeans中创建的类:Window.java、Student.java、Clazz.java
,复制到包com.study.cs.demo
中。
(这一波操作,是因为笔者不喜欢使用NetBeans开发,习惯了使用idea。囧~~)
2)添加lombok
依赖。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
2. 实现JDBC
1)添加mysql
驱动jar包,在maven
的pom.xml
文件中添加对应依赖。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
2)在/src/test/java/
目录下,新建包com.study.cs.demo.test
,新建类JdbcTest.java
。
package com.study.cs.demo.test;
import com.study.cs.demo.Clazz;
import com.study.cs.demo.Student;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class JdbcTest {
//驱动类
private static final String DRIVER_CLASS = "com.mysql.cj.jdbc.Driver";
//数据库位置
private static final String DB_URL = "jdbc:mysql://localhost:3306/cs-demo?useSSL=false&characterEncoding=utf8";
//登陆数据库用户名
private static final String USER_NAME = "root";
//登陆数据库密码
private static final String PASSWORD = "123456";
public static void main(String[] a) {
Connection conn = null;
Statement sta = null;
ResultSet rs = null;
try {
//1 加载驱动
Class.forName(DRIVER_CLASS);
//2 打开链接
conn = DriverManager.getConnection(DB_URL, USER_NAME, PASSWORD);
//3 创建会话
sta = conn.createStatement();
//4 执行sql
String sql = "select s.*,c.clazz_name from student s left join clazz c on s.clazz_id=c.clazz_id";
rs = sta.executeQuery(sql);
//5 处理sql执行结果,并将查询结果封装成对象集合
List<Student> list = new ArrayList<Student>();
while(rs.next()){
Student s = new Student();
s.setMajor(rs.getString("major"));
s.setName(rs.getString("name"));
s.setStuNo(rs.getString("stu_no"));
Clazz c = new Clazz();
c.setClazzId(rs.getInt("clazz_id"));
c.setClazzName(rs.getString("clazz_name"));
s.setClazz(c);
list.add(s);
}
//遍历对象集合,打印数据
list.forEach(s->{
System.out.println(s.toString());
});
} catch(Exception e){
e.printStackTrace();
} finally {
/**
* 无论程序执行到哪个位置出现了异常,都需要释放数据库连接资源
* 所以,释放资源的代码放在finlly块中执行
*/
/*
conn/sta/set都有可能是null,所以在使用这几个对象之前先判断是否是null
*/
if(conn != null){
try {
conn.close();
} catch(Exception e){
e.printStackTrace();
}
}
if(sta != null){
try {
sta.close();
} catch(Exception e){
e.printStackTrace();
}
}
if(rs != null){
try {
rs.close();
} catch(Exception e){
e.printStackTrace();
}
}
}
}
}
运行单元测试结果:
Student(stuNo=20010101001, name=李白, major=文学, clazz=Clazz(clazzId=2, clazzName=2017级1班))
Student(stuNo=20160101002, name=张三丰, major=英语, clazz=Clazz(clazzId=12, clazzName=2016级1班))