介绍
JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。
Java DataBase Connectivity
JDBC 驱动由数据库厂商提供,只要实现了 JDBC 接口就行。
引入依赖
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version><scope>runtime</scope></dependency>
一个 Demo
static List<Student> queryStudents() throws SQLException {List<Student> students = new ArrayList<>();// 获取连接try (Connection conn = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword)) {try (PreparedStatement ps = conn.prepareStatement("SELECT * FROM students WHERE grade = ? AND score >= ?")) {ps.setInt(1, 3); // 第一个参数grade=?ps.setInt(2, 90); // 第二个参数score=?// 执行sql语句,并接收返回结果try (ResultSet rs = ps.executeQuery()) {// 处理结果while (rs.next()) {students.add(extractRow(rs));}}}}return students;}// 释放资源con.close();stat.close();rs.close();
现在这种方式比较少了,都是用 Mybatis
增删改查的 Demo
数据准备
-- 创建db14数据库CREATE DATABASE db14;-- 使用db14数据库USE db14;-- 创建student表CREATE TABLE student(sid INT PRIMARY KEY AUTO_INCREMENT, -- 学生idNAME VARCHAR(20), -- 学生姓名age INT, -- 学生年龄birthday DATE -- 学生生日);-- 添加数据INSERT INTO student VALUES (NULL,'张三',23,'1999-09-23'),(NULL,'李四',24,'1998-08-10'),(NULL,'王五',25,'1996-06-06'),(NULL,'赵六',26,'1994-10-20');
https://www.yuque.com/yuchenhuang/dgl7mw/5a97c02304c0ccb420de830f5d6f6d8e#693059d9
持久层
/*查询所有学生信息*/@Overridepublic ArrayList<Student> findAll() {ArrayList<Student> list = new ArrayList<>();Connection con = null;Statement stat = null;ResultSet rs = null;try{//1.注册驱动Class.forName("com.mysql.jdbc.Driver");//2.获取数据库连接con = DriverManager.getConnection("jdbc:mysql://192.168.59.129:3306/db14", "root", "itheima");//3.获取执行者对象stat = con.createStatement();//4.执行sql语句,并且接收返回的结果集String sql = "SELECT * FROM student";// 使用prepareStatement解决SQL注入rs = stat.executeQuery(sql);//5.处理结果集while(rs.next()) {Integer sid = rs.getInt("sid");String name = rs.getString("name");Integer age = rs.getInt("age");Date birthday = rs.getDate("birthday");//封装Student对象Student stu = new Student(sid,name,age,birthday);//将student对象保存到集合中list.add(stu);}} catch(Exception e) {e.printStackTrace();} finally {//6.释放资源if(con != null) {try {con.close();} catch (SQLException e) {e.printStackTrace();}}if(stat != null) {try {stat.close();} catch (SQLException e) {e.printStackTrace();}}if(rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}}//将集合对象返回return list;}
业务层
/*查询所有学生信息*/@Overridepublic ArrayList<Student> findAll() {// 调用持久层return dao.findAll();}
控制层
/*查询所有学生信息*/@Testpublic void findAll() {// 调用业务层ArrayList<Student> list = service.findAll();// 这句话什么意思for(Student stu : list) {System.out.println(stu);}}
