这是最近看源码的一次简单记录,不对的地方多多包涵,其中的东西想到哪就写到哪,可能比较乱
数据库是什么:不去管数据库的语言,我简单的把数据库理解为另外一台专门存放数据的服务器,怎么存储数据的我们不管,但是它对外肯定暴露了一些接口的,来提供给其他服务器连接它并查询它的数据。
jdbc是什么:jdbc是java2ee的一套规范,也就是一套接口,jdk的rt.jar包下,路径java.sql.* 下的相关接口,它定义了使用java怎么去连接数据库的步骤,但是只给出了步骤的名称,没有具体实现,具体的实现要根据实现了这套接口的数据库驱动程序来定义。
数据库驱动是什么:是个实现了java的jdbc接口的程序代码,它再内部会去创建socket连接到相应的数据库服务器上,然后能够自己来维护相关的数据和优化。
下面是简单的jdbc连接查询数据库的过程,整个源码的流程就是更具这个过程来查看的。
1、Class.forName("java.mysql.jdbc.cj.Driver");
Class.forName: 这个方法后跟的是一个全类名,执行这个方法,会根据类加载器的几个路径下去找这个类目的类,把找到的类加载的内存中,加载的过程默认会对类进行初始化,也就是会执行类的静态代码块。
这样就创建了一个mysql驱动的Driver类,并把这个类注册到DriverManager对象的registeredDrivers属性上,当调用
connection.getConnection()的时候,其实就是调用的驱动程序的连接方法。
数据库连接的本质其实就是客户端维持了一个和远程MySQL服务器的一个TCP长连接,并且在此连接上维护了一些信息。
具体的代码逻辑跟着追就能追到。
preparedStatement:mysql 要执行一条语句,肯定是需要再一定的语义下的,而这个PreparedSatement就是再java层面去维护这样一个执行环境的,当PreparedStatement环境创建好了,执行executeQuery(),就可以实现对数据库的查询了。
再简历connection的时候,会发送tcp的三次握手。然后还有发送用户名密码校验信息,然后还有发送是否预编译的信息等等,然后才能查询出数据。
后期继续补充