java学习之- JDBC-day01
JDBC
持久化
持久化是指将数据保存在非易失性存储介质中,以便在程序结束后或系统重启后能够继续存在。在软件开发中,持久化通常用于将内存中的数据存储到数据库、文件系统等存储介质中,以保证数据的长期存储和可恢复性。
JDBC
JDBC(Java Database Connectivity) 是 Java 提供的用于与数据库进行交互的标准接口。它允许 Java 应用程序通过 SQL 查询和更新来访问和操作数据库。JDBC 提供了一套标准的 API,使得开发人员能够在不同的数据库系统之间切换而无需更改大部分代码。
DAO 思想(数据访问对象)
DAO(Data Access Object) 是一种设计模式,用于将数据访问逻辑从业务逻辑中分离出来。DAO 的核心思想是将对数据库的操作抽象成一组接口和实现,以提供更加灵活、可维护和可测试的数据访问方式。通过使用 DAO,业务逻辑可以专注于业务操作,而不用关心底层数据库的细节。
DAO 规范
- DAO 接口 : 表示对某个模型的 CRUD 操作做规范,以 I 开头,interface
- 标准:IXxxDAO
- 例: IEmployeeDAO/IStudentDAO
- DAO 实现类: 表示对某个 DAO 接口的实现
- 标准:XxxDAOImpl
- 例:EmployeeDAOImpl/StudentDAOImpl
- DAO 测试类: 测试 DAO 组件中的所有方法 (测试先行)
- 标准:XxxDAOTest: XxxDAO 组件的测试类,
- 例:EmployeeDAOTest,StudentDAOTest
JDBC 使用流程
开发口诀
贾琏欲执事
-
- 加载注册驱动.
-
- 获取连接对象.
-
- 创建/获取语句执行对象.
-
- 执行SQL语句.
-
- 释放资源.
DriverManager 类
- 全限定名获取DriverManager Class 对象
- 通过getConnection() 方法获取链接对象
Connection 类
Connection :关系型数据库连接对象,相当于 Java 程序和数据库的通信桥梁
-
获取语句执行对象
- 获取静态语句执行对象: Statement createStatement();
- 获取预编译语句执行对象: PreparedStatement prepareStatement(String sql);
-
释放资源
- 关闭连接对象: void close();
-
事务
Statement 类
-
执行 DML / DDL 语句 : int executeUpdate(String sql);
- 返回值 : DML 受影响的行数,DDL 则返回 0
- 参数:insert、update、delete、create、drop 语句
-
执行 DQL 语句:ResultSet executeQuery(String sql);
- 返回值:执行查询之后的结果数据
- 参数:select 语句
-
释放资源
- 关闭 Statement 对象 :void close();
根据 DAO 规范搭建项目
步骤
-
创建项目
-
导入数据库驱动包
-
创建表和模型包以及模型对象
-
创建 DAO 包和 DAO 接口,设计 DAO 接口方法
-
创建 DAO 实现包,实现 DAO 接口
-
创建测试目录,生成测试类和方法
-
书写实现,实现一个方法测试一个方法并且测试通过
假设你要搭建一个学生信息管理系统,你可以按照以下步骤来创建项目:
- 创建项目结构: 创建一个项目文件夹,然后在其中创建以下目录结构:
▼java复制代码- src - main - java - com - yourcompany - dao -impl - domain - util - test - resources
- 创建 Model 类: 在
model包中创建一个名为Student的类,表示学生模型。这个类将包含学生的属性,如 id、name、age 和 email。
▼java复制代码package com.yourcompany.model; public class Student { private long id; private String name; private int age; private String email; // 构造方法、getter 和 setter 省略 }
- 创建 DAO 接口: 在
dao包中创建一个名为IStudentDAO的接口,定义各种与学生信息相关的数据库操作方法。
▼java复制代码package com.yourcompany.dao; import com.yourcompany.model.Student; public interface IStudentDAO { Student selectById(long id); List<Student> selectAll(); void insert(Student student); void update(Student student); void delete(long id); }
- 创建 DAO 实现类: 在
dao包中创建一个名为StudentDAOimpl的类,实现StudentDAO接口。在这个类中,你可以使用 JDBC 进行数据库操作。
▼java复制代码package com.yourcompany.dao; import com.yourcompany.model.Student; import com.yourcompany.util.JDBCUtil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class StudentDAOimpl implements StudentDAO { // 实现接口中的方法,例如 selectById、selectAll、insert 等 }
- 创建 JDBCUtil 工具类: 在
util包中创建一个名为JDBCUtil的类,用于提供数据库连接、关闭资源等方法。
▼java复制代码package com.yourcompany.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JDBCUtil { public static Connection getConnection() throws SQLException { // 获取数据库连接的代码 } public static void close(Connection conn, PreparedStatement ps, ResultSet rs) { // 关闭资源的代码 } }
JDBCUtil
在 DAO 的实现过程中,发现释放资源的代码非常恶心,而且还需要反复编写,这种代码我们通常可以抽取到工具类中: JDBCUtil
▼java复制代码// JDBCUtil.java public static void close(Connection conn, Statement pst) { close(conn,pst,null); } // 释放资源 public static void close(Connection conn, Statement pst, ResultSet rs) { try { if (rs != null) { rs.close(); } } catch (Exception e) { e.printStackTrace(); } // 释放资源 try { if (pst != null) { pst.close(); } } catch (Exception e) { e.printStackTrace(); } try { if (conn != null) { conn.close(); } } catch (Exception e) { e.printStackTrace(); } }
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论

