JDBC的学习!

一、什么是JDBC

        JDBC(Java DataBase Connectivity) Java数据库连接
    其实就是利用Java语言(Java程序)连接并访问数据库的一门技术

二、为什么要学习JDBC

        之前我们可以通过 CMD窗口 或者 通过 Navicat/Sqlyog等软件 连接数据库, 对数据库中的数据进行增删改查操作.
    但是,将来在企业开发中,更多的是通过程序来连接数据库, 而我学的是Java开发,通过Java程序连接数据就必须用到JDBC这门技术!
    像Mybatis/hibernate/DBUtils/Spring JdbcTemplate等框架底层也是在通过JDBC来连接数据库

三、概述

        早期, 不同的数据库厂商提供的数据库驱动包(jar)是各不相同, 开发人员在操作不同 的数据库时需要学习该数据库对应的数据库驱动(jar)包, 这对于开发人员的学习成本太高了!
        后来SUN公司就规定了JDBC这套规范(其实其中包含了大量的接口), 要求不同的数据库厂商提供的驱动都来实现这套接口, 这样一来, 开发人员只需要学会这套接口, 所有的数据库就都会操作了!
        JDBC中主要包含两个包(java.sql和javax.sql), 并且java中已经包含这两个包了,但除了JDBC的包之外, 我们在操作数据库时还需要导入该数据库对应的驱动包(jar包)

四、操作、

        1.创建lib目录,把jar包放进去并引入项目中。

        2.创建类准备进行编写代码。

        3.在main里通过Class.forName注册驱动,里面的参数是jar包里Driver的地址。

        4.通过DriverManager.getConnection方法连接数据库,参数是jdbc协议和数据库地址和端口号和库名称加utf8的编码,后面加上数据库的账号和密码。

        5.用连接数据库的返回的对象名调用createStatement();方法获取传输器。

        6.用传输器返回的对象名调用executeQuery()/executeUpdate方法输入sql语句执行,前者是查询,需要在处理结果里进行查看查询到的结果,后者是增删改,不报错就代表执行成功。

        7.处理sql语句执行的结果:对查询来说需要while循环如下所示。

while (r.next()){
//            String s1 = r.getString(1);
//            String s2 = r.getString(2);
//            String s3 = r.getString(3);
//            System.out.println(s1+s2+s3);
            int id = r.getInt("id");
            String name = r.getString("name");
            int password = r.getInt("password");
            System.out.println(id+name+password);
        }

        r.next判断是否有下一句,有的话返回true继续执行,否则停止执行。有两种方法进行查看,注释为第一种,参数为查看第几列,写法简单,但是不能具体看到表里某列对应的是哪个属性;

        后者为第二种方法,参数传入数据库里对应的列名,便于查看。

        8.释放资源,最后使用的最先释放

注:上面的方法会发生sql注入危险,解决方案如下:

        更换更加安全的传输器:使用prepareStatement()方法,参数写好既定的sql语句骨架,外界输入的地方写上问号,再通过返回的对象名调用set类型方法,里面传入两个参数,第一个参数是表示骨架中的第几个问号,第二个参数是问号的内容。

        这样就规定了外界输入内容的类型,避免出现#/''等符号,规避了sql注入的风险。

五、JDBC的优缺点

        优点:使用JDBC连接并访问数据库 相比使用第三方的框架连接访问数据库速度要快一些!因为这是最为传统,最为底层的方法。

        缺点:
        1) JDBC中包含大量重复的代码(比如每次连接数据库都需要 注册驱动、获取连接、获取传输器、处理结果、释放资源等),后期难以维护
        2) JDBC自身没有连接池,而框架(mybatis等)自带连接池,当需要连接直接从连接池中获取,用完连接不用关闭,再还回连接池中,这样可以提高执行效率!
        3) JDBC中执行select查询语句的结果需要开发人员自己手动处理, 如果是非常复杂的数据(比如查询的结果中列数非常多或者查询的数据来自多张表)处理起来是非常麻烦的,但框架可以帮我们处理!

六、连接池概念

        如果不使用连接池: 
        用户每次需要连接访问数据库时, 都需要创建一个连接(Connection), 基于这个连接去访问数据库中的数据, 用完连接(Connection)后会将连接关闭(close), 其实每次创建连接和关闭连接(相比使用连接)需要消耗大量的时间和资源,导致程序的执行效率低下(特别是高并发的时候,比如京东618;淘宝11.11等)

        如果使用连接池:
        可以在程序一启动之后,就创建一批连接放在一个池中(容器), 当用户需要连接时, 不用自己创建, 而是从连接池中获取一个连接对象, 再基于这个连接对象去访问数据库, 用完连接后, 不用将连接关闭, 而是还回连接池中。这样一来,用户使用的都是池中的这一批连接,可以减少连接创建和关闭的次数,提高程序的执行效率!

        到这里就结束了,mybatis估计在下次了,后面学习前端吧,身为一个java后端开发,前端知识也是要掌握一些的。

        

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值