JDBC上_数据库连接

1. JDBC的概述
    概述: 就是Java用来操作不同数据库的类库, 本质其实就是一些JavaAPI.
          //Java Data Base Connectivity, Java数据库连接(技术)
          //大白话: 就是Java语言编写的一些类和接口, 用于操作不同数据库的.(DriverManager,Connection,Statement,PreparedStatement, ResultSet)

          //集合: 就是Java用来存储不同类型数据的容器. 大白话, 就是一些接口和类.(Collection,Set,List,Map,ArrayList,HashSet,HashMap)
          //IO流: 就是Java用来操作文件(夹)的. 大白话, 就是一些类和接口(InputStream,OutputStream,Reader,Writer).
          //集合的顶层都是接口, IO流的顶层都是: 抽象类.


    作用:
        A: 连接数据库.
        B: 向数据库发送SQL语句.
        C: 操作数据库返回的结果集.
            //如果操作的是更新语句, 返回的结果集是: int
            //如果操作的是查询语句, 返回的结果集是: ResultSet



2. 什么是驱动?
    驱动: 指的是设备间进行通信的桥梁.


3. JDBC的原理
    我们知道JDBC是用来操作不同数据库的, 但是操作不同的数据库需要使用不同的驱动.例如: 我们想操作MySQL数据库, 就需要安装MySQL的驱动, 我们想操作Oracle数据库, 就需要安装Oracle数据库的驱动, 如果我们操作SQLServer数据库,
    就需要安装SQLServer数据库的驱动, 这样做是比较麻烦的. 因为Java一定提供了大量的类和接口了, 但是要要求额外记忆一些
    其他的类和接口, 这样就增加了程序员的学习难度. 
    后来Sun公司发现了这个问题, 就和各大数据库生产商协商决定, 由Sun公司提供统一的规范(就是一些类和接口), 数据库生产商
    提供具体的实现. Sun公司提供的这些类和接口就是: API.

4. JDBC的案例演示
    A: 新建一个web03数据库.
    B: 在该库中创建一张表: users(uid,uname,pw,age)
    C: 往该表中添加数据.
    D: 通过JDBC来操作数据库.
        1) 导入驱动
        2) 注册驱动
        3) 获取连接对象
        4) 根据连接对象,获取可以执行SQL语句的对象
        5) 执行SQL语句,获取结果集
        6) 操作结果集
        7) 释放资源

5. JDBC的API详解之: DriverManager
    DriverManager: 驱动管理.

    作用一: 用于注册驱动.        //了解就行了, 一般不用这种方式注册驱动.
        public static void registerDriver(Driver d);    //注册驱动. 这里的Driver是java.sql包下的Driver接口.
        /*
                //  com.mysql.jdbc          java.sql
            public class Driver implements Driver {
            }
        */
        上述的注册驱动的方式, 在实际开发中是不用的, 因为这种方式会导致: 驱动程序注册两次.
        实际开发中的做法: 通过 反射 的方式注册驱动.
        //核心: 通过"反射"技术, 加载Driver.class字节码文件, 因为该类中有静态代码块,
        //      所以在加载该类的字节码文件的时候, 静态代码块也跟着加载了, 从而实现注册驱动.
        Class.forName("类的全类名"); //该方法的作用是: 加载指定的类的字节码文件到 内存中.

    作用二: 获取连接对象.
        public static Connection getConnection(String url,String username,String password);  //用于获取连接对象.
        /*
            方法的形参的解释:
                url: 数据库连接字符串
                    jdbc:mysql://localhost:3306/要操作的数据库
                    jdbc:mysql://127.0.0.1:3306/操作的数据库

                    格式:
                        协议:子协议://要链接的数据库的IP或者主机名:端口号/要操作的数据库

                    如果你操作的是本地服务器, 上述的方式可以优化为:
                        jdbc:mysql:///操作的数据库

                username: 要操作的数据库的 账号
                password: 要操作的数据库的 密码
        */


6. JDBC的API详解之: Connection
    Connection: 连接对象.

    作用一: 用来获取 可以执行SQL语句的对象. //掌握
        public Statement createStatement();             //获取可以执行SQL语句的对象.
            public ResultSet executeQuery(String sql);  //执行查询语句
            public int executeUpdate(String sql);       //执行更新语句

        public PreparedStatement prepareStatement(String sql);  //获取可以执行SQL语句的对象, 可以预编译.
            public ResultSet executeQuery();    //执行查询语句
            public int executeUpdate();     //执行更新语句

            public void setXxx(int index,Xxx value);    //给第index个占位符赋值为: value, 占位符是从1开始数的.




    作用二: 可以操作事务.        //目前先理解.
        public void setAutoCommit(boolean flag);    //设置是否开启事务的自动提交功能.
        public void commit();       //提交事务
        public void rollback(); //事务回滚
        public void setTransactionIsolation(int level); //设置事务的隔离级别.


    Connection接口中的常量:       //目前理解即可
        public static final int TRANSACTION_NONE = 0;
        public static final int TRANSACTION_READ_UNCOMMITTED = 1;
        public static final int TRANSACTION_READ_COMMITTED = 2;
        public static final int TRANSACTION_REPEATABLE_READ = 4;
        public static final int TRANSACTION_SERIALIZABLE = 8;


7. JDBC的API详解之: Statement
    Statement: 可以执行SQL语句的对象.

    作用一:     用于执行SQL语句. //掌握
        public ResultSet executeQuery(String sql);  //执行查询语句
        public int executeUpdate(String sql);       //执行更新语句

    作用二:  可以执行批处理.  //目前先了解即可, 批处理只针对 更新语句. 
        public void addBatch(String sql);   //把SQL语句添加到指定的批处理中.
        public int[] executeBatch();        //执行批处理. 
        public void clearBatch();           //清空批处理.


8. JDBC的API详解之: ResultSet
    ResultSet: 结果集对象, 表示的是: 查询语句执行后的结果.

    public boolean next();      //判断结果集中是否还有 数据,  类似于我们之前学习集合时候的: hasNext().
    public Xxx getXxx(int colunmNumber);    //根据给定的列的编号,获取该列的值.  Xxx表示数据类型, 列的编号从1开始.
    public Xxx getXxx(String colunmName);   //根据给定的列的名字,获取该列的值. Xxx表示数据类型.


9. JDBC释放资源的优化代码.       //重点掌握.


10. JDBCUtils工具类的抽取.
    方式一: 普通抽取.
        public class JDBCUtils {
            //私有构造
            private JDBCUtils() {}

            //通过静态代码块, 来注册驱动
            static {
                try{
                    Class.forName("com.mysql.jdbc.Driver");
                } catch(Exception e){
                    e.printStackTrace();    //异常的描述信息, 异常的类型, 异常出现的位置.
                }
            }

            //获取连接对象
            public static Connection getConnection() {
                return...
            }

            //释放资源
            public static void release(Connection conn,Statement stat, ResultSet rs) {

            }
            //释放资源
            public static void release(Connection conn,Statement stat) {

            }
        }

    方式二: 结合配置文件使用.    //Properties
        Properties: 集合类, 是一个双列集合, 键值都是String类型, 它是Hashtable集合类的子类.
            //记忆: 它是唯一一个可以直接和IO流相结合使用的 集合类.
            public void load(InputStream is);       //可以从流(文件)中读取数据.
            public void store(OutputStream os);     //可以写数据到流(文件)中.


11. SQL注入攻击.
    概述: 实际开发中, 如果SQL语句中的部分内容是要求用户键盘录入的, 这个时候如果用户录入了我们不想要的数据,
          就有可能引发安全问题, 这个安全问题就是: SQL注入攻击问题.
          //SQL注入攻击, SQL猪肉攻击.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值