背景前两天一个小伙伴面试的时候,被问JDBC底层是如何连接数据库的?
他顿时一脸懵逼,因为大部分人只知道JDBC的几个步骤,至于底层到底是怎么连接数据库的,还真不知道 。
由于小伙伴是面试高级开发,问这种问题倒也不能说面试官过分,如果是初级或者中级,那问着问题就确实有些过分了 。
但是如果你在初级或者中级的阶段,就知道了答案,岂不是爽歪歪么?
估计大部分人都不知道这个问题该怎么回答,稍微发散一下思维,倒是可以猜测一下,今天我们就来搞清楚JDBC底层到底是如何连接数据库的 。往后别再猜了 。
反过来,如果面试官问你JDBC的时候,你能知道底层是怎么连接数据库的,估计,很多相对较水的面试官也会一脸懵逼 。
何为 JDBC ?JDBC(JAVA DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个「规范」而不是一个实现,能够执行SQL语句 。JDBC由一组用Java语言编写的类和接口组成 。各种不同类型的数据库都有相应的实现,注意:本文中的代码都是针对MySQL数据库实现的 。
JDBC 架构分为双层架构和三层架构 。
双层作用:此架构中,Java Applet 或应用直接访问数据源 。
条件:要求 Driver 能与访问的数据库交互 。
机制:用户命令传给数据库或其他数据源,随之结果被返回 。
部署:数据源可以在另一台机器上,用户通过网络连接,称为 C/S配置(可以是内联网或互联网) 。
三层侧架构特殊之处在于,引入中间层服务 。
流程:命令和结构都会经过该层 。
吸引:可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势 。
历史趋势:以往,因性能问题,中间层都用 C 或 C++ 编写,随着优化编译器(将 Java 字节码 转为 高效的 特定机器码)和技术的发展,如EJB,Java 开始用于中间层的开发这也让 Java 的优势突显出现出来,使用 Java 作为服务器代码语言,JDBC随之被重视 。
入门案例下面给出一个JDBC入门级案例:
public class JdbcDemo { public static final String URL = "jdbc:mysql://localhost:3306/mblog"; public static final String USER = "root"; public static final String PASSword = "123456"; public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT id, name, age FROM m_user where id =1"); while(rs.next()){ System.out.println("name: "+rs.getString("name")+" 年龄:"+rs.getInt("age")); } }}
JDBC 步骤数据库驱动:
Class.forName("com.mysql.jdbc.Driver");
获取连接:
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
创建Statement或者PreparedStatement对象:
Statement stmt = conn.createStatement();
执行sql数据库查询:
ResultSet rs = stmt.executeQuery("SELECT id, name, age FROM m_user where id =1");
解析结果集:
System.out.println("name: "+rs.getString("name")+" 年龄:"+rs.getInt("age"));
最后就是各种资源的关闭 。
数据库驱动加载MySql的驱动类 :
Class.forName("com.mysql.jdbc.Driver");
我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道 。其实也就是数据库厂商的JDBC接口实现,即对Connection等接口的实现类的jar文件 。
![面试被问:JDBC底层是如何连接数据库的?](http://img.jiangsulong.com/220424/03051T219-0.jpg)
文章插图
推荐阅读
- 面试|面试:你只有6根烟,突然来7位领导怎么办?第5个回答说到位了
- 网络常见面试题
- 安卓面试题到处攒,一到面试就忘个干净?来看看这份超详细的整理
- 面试必问的 Redis:RDB、AOF、混合持久化
- 吐血整理!这200道阿里P6必备Java面试题,我简直太爱了
- 面试官经常问AOP,那到底啥是AOP?
- 面试官:知道 springboot 的启动原理吗?
- 面试不懂 Linux 内存管理?我用 20 张图给你讲明白
- 洗牌 面试遇到shuffle算法时,用这三种就够了
- 招聘|如何面试管理人员