JDBC接口讲解与底层实现分析(上)

本文探讨了JDBC为何需要数据库驱动,并通过Class.forName加载驱动和DriverManager的作用。详细解释了Statement与PreparedStatement的区别,指出PreparedStatement的预编译特性在防止SQL注入和提升效率方面的优势。内容涵盖预编译语句的工作原理和使用场景。
摘要由CSDN通过智能技术生成

一、JDBC为什么需要数据库驱动?

数据库是一个产品,想要访问它,就得通过它定义的方式去访问。你可能觉得平时操作时好像并没有按照什么协议访问呀,就是敲了下SQL命令,就有返回结果了。但你记得你是在什么环境下访问的吗?你在cmd终端下输入mysql启动的就是mysql client,是一个客户端,这个客户端其实就是一段程序,它的内部逻辑对你来说是透明的,你给它一段SQL,其实它是会做一定包装的,然后通过一些协议发送给mysql的server服务端。

抓包工具:WireShark

然后打脸了,并没有抓到3306端口的网络包

然后查阅了下《MySQL技术内幕InnoDB存储引擎》:

常用的进程间通信方式有:管道,命名管道,命名字,TCP套接字,Unix域套接字。而MySQL提供的连接方式从本质上看都是上述提及的进程通信方式

1.TCP/IP

TCP/IP套接字的方式是MySQL在任何平台上都提供的连接方式,也是用的最多的。一般情况客户端一台机器去连接服务器另一台机器。两台机器之间就是通过TCP/IP连接。客户端会向服务器MySQL实例发出TCP/IP连接请求,并连接成功

2,。命名管道和共享内存

Windows2003、vista及在此之上的平台,如果两个需要进程通信的进程在同一台机器上,那么可以使用命名管道,配置文件启用--enable-named-pipe。也可以使用共享内存的连接方式,只需要进行配置。



无论哪种方式,与数据库服务器通信肯定还是有一定的协议的

那么mysql,oracle,DB2他们的协议是一样的吗?不是。那么JAVA为每一个协议都去写一个类,是不切合实际的。首先这个协议是别人定的,第二数据库产品太多了。所以JAVA定义了一套接口,也就是JDBC。而协议的实现与通讯就由数据库厂商来提供了,这也就是驱动程序的JAR包。


看一下标准的连接语句

//声明Connection对象
        Connection con;
        //驱动程序名
        String driver = "com.mysql.jdbc.Driver";
        //URL指向要访问的数据库名test
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "root";
        //遍历查询结果集
        try {
            //加载驱动程序
            Class.forName(driver);
            //1.getConnection()方法,连接MySQL数据库
            con = DriverManager.getConnection(url,user,password);

            //2.创建statement类对象,用来执行SQL语句
            Statement statement = con.createStatement();
            //要执行的SQL语句
            String sql = "select * from student";
            //3.ResultSet类,用来存放获取的结果集!!
            ResultSet rs = statement.executeQuery(sql);
 
            while(rs.next()){
                //获取name这列数据
                name = rs.getString("name");
                //获取uid这列数据
                id = rs.getString("uid");
            }
            rs.close();
            con.close();
        } catch(ClassNotFoundException e) {   
            //数据库驱动类异常处理
            System.out.println("Sorry,can`t find the Driver!");   
            e.printStackTrace();   
            } catch(SQLException e) {
            //数据库连接失败异常处理
            e.printStackTrace();  
            }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally{
            System.out.println("数据库数据成功获取!!");
        }
    }

所以这个过程总结起来就是:

1.注册一个Driver

2.建立一个到数据库的连接

3.创建一个Statement

4.执行SQL语句

5.处理结果

6.关闭JDBC对象


但是我们都是面向接口编程的,但运行时的对象还是使用的底层实现

来看一个图,看我们是如何使用驱动的(很明显的体现出来了面向接口编程






二、为什么使用Class.forName来加载数据库驱动,DriverManager的作用


我们平时用Class.forName去加载驱动,可能很多初学者都没太懂这个底层。所以我们来解释下

我们先用最直观的方式连接一下:

<pre name="code" class="java">Driver driver=new com.mysql.jdbc.Driver();
Connection conn=driver.connect(url, info);
System.out.println(conn);

 
读者可以用这种方式去试试,看能不能获取连接(肯定是可以的啦
                
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值