目录
前言
作用
JDBC 的架构
步骤
JDBC 常见的关键字解释
前言
Java 数据库连接, 是 Java 语言中用来规范客户端程序如何来访问数据库的应用程序接口, 提供了诸如查询和更新数据库中数据的方法. JDBC 也是 Sun Microsystems 的商标. JDBC 是面向关系型数据库的. 在 J2SE 中, 提供了一个称之为 JDBC-ODBC 桥的 API.
-- 维基百科
sun 公司提供的 java 连接数据库的规范, 包括一些常见的数据库, MySQL Oracle 等.
要想通过 IDEA 创建项目连接借助 JDBC 使用 MySQL 数据库等, 这里以我使用的 MySQL 数据库为例,
要下载好相应的 jar 包, 这在官网中都可以找到. 通过 IDEA 的导包, 将其添加到所在的项目列表里, 就可以使用 JDBC.
作用
JDBC 就是对于 java 代码来说, 在应用程序和数据库之间的一个中间层 API, 也就是中间商; JDBC 允许操作者按照所需要的形式去访问获取数据库信息, 可以进行查询, 有点类似那些数据库可视化软件的部分功能, 同时支持更新指令, 处理其响应并返回结果.
JDBC 的架构
分为了三层和两层架构;
三层架构, 中间相较于两层架构, 多一个应用服务层, 区分层次就是为了符合 "高内聚, 低耦合" 的思想, 可以降低层与层之间的依赖, 减少依赖性, 开发人员可以只用关注某一层.
双层架构
这种架构, 支持直接连接数据库进行操作, 这种架构, 效率会高很多, 因为直接访问数据库, 但是有时维护成本和时间会增加, 相对于三层可靠性和安全性会欠缺一些
下面讲一下一些操作步骤.
步骤
可以查阅官方文档查看, 比较详细, 不过是全英文的, 可以翻译来看看.
注册驱动
- // 这样写是由问题的, 里面的 Driver 类有静态代码块会自动注册了很容易造成二次注册, 没必要二次注册
- //DriverManager.registerDriver(new com.MySQL.jdbc.Driver());
- Class.forName("com.mysql.jdbc.Driver");// 里面加的是全路径
- // 返回与给定字符串名称的类或接口相关联的类对象. 调用此方法相当于:
- //Class.forName(className, true, currentLoader)
- // 其中 currentLoader 表示当前类的定义类加载器.
建立连接
- // 这里我一开始的写法没有加上 useSSL 和时区, 导致 IDEA 报错, 这里写成这样会比较好一点
- DriverManager.getConnection("jdbc:mysql://localhost:3306/myemployees?useSSL=false&serverTimezone=Asia/Shanghai",'user','password');
- // 这里使用这种格式之后, 我把加载驱动程序的 class.forName 注释掉了, 都是可以使用的, 只是会出现警告
创建 statement
- // 填充 sql 语句
- PreparedStatement pre = con.prepareStatement("select * from employees where first_name ='Lex';");
执行 sql 语句, 获得 resultSet
- //executes sql
- // 这里使用了 ResultSet 的 executeQuery() 方法, 执行查询的 sql 语句, 并返回结果
- ResultSet rs = pre.executeQuery();
遍历得到所需的结果
- // 和遍历文件的输出输入流一样
- // 可以使用同样的框架
- //@param getString 方法中的参数就是 columnLabel(下面我所使用的 salary 字段) 使用 SQL AS 子句指定的列的标签. 如果未指定 SQL AS 子句, 则标签为列的名称
- while (rs.next()){
- System.out.println("输出:"+rs.getString("salary"));// 因此返回的是查询 salary 的内容
- }
关闭, 释放资源
- //Statement stmt = null;
- //ResultSet rs = null;
- // 下面是官方文档中推荐的释放资源的写法
- if (rs != null) {
- try {
- rs.close();
- } catch (SQLException sqlEx) { } // ignore
- rs = null;
- }
- if (stmt != null) {
- try {
- stmt.close();
- } catch (SQLException sqlEx) { } // ignore
- stmt = null;
完整代码
- package MySQL;
- import java.sql.*;
- /**
- * @Author: yhy
- * @Date: 2020/2/27
- * @Time: 20:53
- */
- public class ConFirst {
- public static void main(String[] args) throws SQLException, ClassNotFoundException {
- // register
- Class.forName("com.mysql.cj.jdbc.Driver");
- // DriverManager.registerDriver(new com.MySQL.jdbc.Driver());
- // connect message
- Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/myemployees?useSSL=false&serverTimezone=Asia/Shanghai","user","password");
- // sql statement
- PreparedStatement pre = con.prepareStatement("select * from employees where first_name ='Lex';");
- // accept the result
- ResultSet rs = pre.executeQuery();
- while (rs.next()){
- System.out.println("输出:"+rs.getString("salary"));
- }
- // close the resource
- // 应该按照官方那样写, 我这里偷懒没写详细
- rs.close();
- con.close();
- }
- }
JDBC 常见的关键字解释
DriverManager: 这个类管理数据库驱动程序的列表. 内容是否符合从 Java 应用程序使用的通信子协议正确的数据库驱动程序的连接请求. 识别 JDBC 在一定子协议的第一个驱动器将被用来建立数据库连接.
Driver: 此接口处理与数据库服务器通信. 很少直接驱动程序对象.
- // 每个驱动程序类必须实现的接口.
- // Java SQL 框架允许多个数据库驱动程序.
- // 每个驱动程序都应该提供一个实现 Driver 接口的类.
- // DriverManager 将尝试加载尽可能多的驱动程序, 然后对于任何给定的连接请求, 它会依次要求每个驱动程序 尝试连接到目标 URL.
- // 强烈建议每个 Driver 类应该是小型且独立的, 以便可以加载和查询 Driver 类, 而不需要大量的支持代码.
Connection : 此接口与接触数据库的所有方法. 连接对象表示通信上下文, 即, 与数据库中的所有的通信是通过唯一的连接对象.
Statement: 用于执行静态 SQL 语句并返回其生成的结果的对象. 创建执行 SQL 语句的连接中间人.
SQLException: 这个类处理发生在一个数据库应用程序的任何错误, 提供有关数据库访问错误或其他错误的信息的异常, 而且每一个都提供了信息, 包括了描述错误的字符串
ResultSet: 表示数据库结果集的数据表, 通常通过执行查询数据库的语句生成. ResultSet 对象保持一个光标指向其当前的数据行. 最初, 光标位于第一行之前. next 方法将光标移动到下一行, 并且由于在 ResultSet 对象中没有更多行时返回 false, 因此可以在 while 循环中使用循环来遍历结果集. 使用之后一般选择 close.
来源: https://www.cnblogs.com/yhycoder/p/12381845.html