JDBC

Posted kkyl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC相关的知识,希望对你有一定的参考价值。

一.JDBC
    1.JDBC概述
        数据库驱动:数据库厂商提供的用来操作数据库的jar包
        
        JDBC: 由于各大数据库厂商提供的数据库驱动各不相同, 导致开发人员的学习成本十分的高, 于是sun提供了一套用来统一操作数据库的标准, 本质上就是一堆的接口, 要求各大数据库厂商在设计驱动时都要实现这套接口, 因此我们以后只需要学习JDBC这套接口, 所有的数据库驱动就都会使用了.

        目前JDBC已经被集成到了Javase规范中了,因此只需要一个普通的java工程就已经具备了JDBC相关的开发包了

        JDBC由两个包组成, 分别是java.sql/javax.sql. JDBC本质上就是一大堆的接口, 在开发数据库程序时, 还需要导入具体的数据库驱动(jar包)

    2.JDBC快速入门程序
        //1.注册数据库驱动
        //2.获取数据库连接
        //3.获取传输器
        //4.利用传输器发送sql语句到数据库执行, 返回执行的结果
        //5.遍历结果集
        //6.释放资源

        jdbc:mysql://localhost:3306/mydb1?user=root&password=root

    3.JDBC增删改查

    !!!4.PreparedStatement
        Sql注入攻击: 由于后台的Sql语句是拼接而来的, 其中的参数是用户提交的, 如果用户在提交参数时, 在参数中添加了一些sql关键字或特殊字符, 就可以改变sql语句的原意, 从而执行一些意外的操作!!!
        PreparedStatement优点:
            (1) 可以防止sql注入攻击
                采用预编译机制, 先把sql语句的主干部分发给数据库, 数据库会先编译sql语句确定sql语句的骨架, 在把sql参数发给数据库, 数据库收到只会把参数当做是普通的字符串来处理, 即使参数中包含sql关键字或特殊符号也不会影响sql语句的骨架, 从而解决sql注入攻击的问题.
            (2) 通过方法来设置参数, 避免了拼接sql语句的麻烦
            (3) 可以尽最大可能的提高程序执行的效率.
                PreparedStatement对象发送的sql语句到数据库编译后会缓存下来, 如果下次执行的语句和缓存中的相同, 就执行使用缓存不再编译, 因此可以提高效率.
                Statement发送的sql语句是先拼接在发送, 只要每次的参数不同, 整条sql语句也就不同, 因此每次都需要编译!!
!!二.批处理
    如果有一大堆的sql要执行, 如果一条一条发送, 有多少条就要发送多少次, 效率低下.
    可以使用一个批处理将这一大堆的sql打成一个批, 将批一次性发送给数据库执行,数据库从批中一次取出sql语句挨个执行, 减少了发送sql语句的次数, 从而提高了程序执行的效率.
    Statement实现批处理:
        优点:
            可以在批处理中包含不同结构的sql语句
            
        缺点:
            不能防止sql注入攻击
            没有预编译, 效率低
            如果包含的sql语句的主干部分相同, 主干部分每次都需要写
            
    PreparedStatement实现批处理:
        优点:
            可以防止sql注入攻击
            有预编译机制, 可以提高效率
            如果包含的sql语句的主干部分相同, 主干部分只需要写一次.
            
        缺点:
            在批处理中只能包含主干相同的sql语句.
            
!!!三.连接池
    1.改造close方法
        (1) 继承 -- 不能改造一个已有对象上的方法
                写一个类继承被改造者所属的类, 在子类中覆盖父类中的方法完成方法的改造.
                
        !!!(2) 装饰设计模式 -- 可以改造一个已有对象上的方法
            如果希望对一个已有对象上的方法进行改造, 可以定义类将被装饰者传入, 基于已有的对象, 提供加强的功能
            其中自定义的类就是装饰类, 装饰类一般会通过构造方法接受被装饰者, 基于已有对象上的功能, 提供的更强的功能

            a) 写一个装饰类, 要求装饰类必须和被装饰者所属的类实现相同的接口或者是继承相同的父类.
            b) 提供构造方法, 接受被装饰者, 并保存在类的内部
            c) 对于不想改造的方法, 直接调用原有对象上的方法, 对于想要改造的方法, 直接进行改造!

    !!!2.开源数据库连接池
        dbcp c3p0
        c3p0连接池的使用
            导入c3p0的开发包
            创建连接池对象:
                ComboPooledDataSource cpds = new ComboPooledDataSource();
            配置数据库连接基本信息
                在程序中通过setter方法来设置参数
                提供c3p0-config.xml来配置参数
                提供c3p0.properties来配置参数
            最后通过close方法来还连接
    
                    
        
            
            
            
            
    
    
        
    
    
    
        
        
            
            
        
        
        
        
        

        
        

        
       








































































































以上是关于JDBC的主要内容,如果未能解决你的问题,请参考以下文章

JDBCJDBC连接mySQL数据库常见错误

JDBCJDBC连接mySQL数据库常见错误

JDBC

关于JDBC小总结

java JDBC编程学习笔记

java JDBC编程学习笔记