JDBC学习笔记

简述
JDBC,英文名为:Java Data Base Connectivity(Java数据库连接),官方解释它是Java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API,根本上说JDBC是一种规范,它提供的接口,一套完整的,允许便捷式访问底层数据库。可以用JAVA来写不同类型的可执行文件:JAVA应用程序、JAVA Applets、Java Servlet、JSP等,不同的可执行文件都能通过JDBC访问数据库,又兼备存储的优势。简单说它就是JAVA与数据库的连接的桥梁或者插件,用JAVA代码就能操作数据库的增删改查、存储过程、事务等。

JDBC api 简述

JDBC标准主要提供一套api规范,第三方应用通过实现JDBC的接口并提供一个jar包给应用程序调用,架构如下图
在这里插入图片描述

  • 其中DriverManager负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。

  • 第三方数据库中间件需要实现Driver接口提供给DriverManager

  • 应用程序通过调用JDBC API 来实现对数据库的操作,第三方数据库需要提供各自api的实现,其中主要包括:

    Connection:数据库连接,负责进行与数据库间的通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement。
    Statement:用以执行SQL查询和更新(针对静态SQL语句和单次执行)。

JDBC把对数据库的操作抽象出来,把建立数据库连接的行为聚合到Connection接口,对数据库操作的行为聚合到Statement接口中。

比如调用mysql提供的mysql-conector-java.jar进行查询:

public class MysqlJdbcTest {
    @Test
    public void jdbcQuery() throws Exception {
        PooledDataSource ds = new PooledDataSource ();
        // 设置mysql driver
        ds.setDriver ("com.mysql.jdbc.Driver");
        // 设置数据库url
        ds.setUrl ("jdbc:mysql://localhost:3306/test");
        ds.setUsername ("root");
        ds.setPassword ("root");
        // 获取一个Connection
        Connection con = ds.getConnection ();
        // 执行查询
        exexuteQuery (con);
        con.close ();
    }

    private static ResultSet exexuteQuery(Connection con) throws SQLException {
        PreparedStatement st = con.prepareStatement ("select * from udp_record");
        ResultSet rs = st.executeQuery ();
        return rs;
    }
}

建立数据库连接connection

使用wireshark试着抓一个本地的包来看一下这个调用过程,可以看到底层通过TCP协议+mysql二进制协议来执行,具体过程如下:

  1. 首先进行三次握手

  2. 接着发送一个Login Request

  3. 返回OK后进行query请求,看到一个query执行了7次request请求

  4. 最后使用con.close()方法关闭连接,发送一个RST 信号给服务器来中断连接

    统计一下这条查询语句的时间为5.657848-5.496280=0.161568秒,如果使用一个线程来执行sql语句,假设2W日活,单用户单日平均执行10次查询,那么调用时间居然为9.976小时。如果使用多线程可以显著提高性能,同时使用线程池技术,来保证资源的合理利用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值