JDBC第一天

4/12/2018 8:25:46 AM

JDBC01

晨测

1. 使用索引的优缺点
2. MySQL数据库的备份和恢复的方式
3. MySQL优化方案

回顾

一、索引
    索引优点和缺点
二、函数

三、数据库的备份和恢复             
    mysqldump -u用户名 -p密码 > 备份的路径

    source 备份的路径    
    mysql -u用户名 -p密码 < 备份的路径

四、数据库的设计和优化
    选择合适数据类型
    选择合适的存储引擎
    建立合适索引
    反范式化
    表的拆分
    ... ...

今日概要

一、JDBC的概述
二、通过JDBC实现对数据的CRUD操作
三、封装JDBC访问数据的工具类
四、通过JDBC实现登陆和注册
五、防止SQL注入

一、JDBC的概述

<1>概念

JDBC:java  database connection ,java数据库连接技术
是java内部提供的一套操作数据库的接口(面向接口编程),实现对数据库的统一访问。

<2>作用

是连接java应用程序和数据库的一个桥梁和纽带
体现了java的one  write , run anywhere

<3>组成

DriverManager类:驱动管理类,用于注册驱动
Connection接口:数据库连接接口,和数据库连接
Statement接口:操作数据库中数据的接口,执行sql语句
PreparedStatement接口:操作数据库中数据的接口,执行sql语句,预处理的能力
ResultSet接口:结果集接口,封装了查询的结果数据

二、通过JDBC实现对数据库的操作

<1>准备

1. 创建一张表
    create table person(
        id smallint primary key auto_increment,
        name varchar(20)not null,
        age tinyint unsigned not null,
        gender enum('男','女'),
        shows varchar(50)
    )

2. 创建一个Bean对象
    class Person{
        int id;
    }

3. 导入MySQL数据库厂商提供的驱动

4. 操作数据,使用JDBC访问数据库的步骤:(记住)
        1. 加载数据库驱动程序
        2. 获取数据库连接对象
        3. 编写SQL语句
        4. 获取Statement对象,执行SQL语句
        5. 处理结果集数据
        6. 释放资源

<2>实现:使用jdbc实现数据插入操作

        1. 加载数据库驱动程序
            Class.forName("com.mysql.jdbc.Driver");
        2. 获取数据库连接对象
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1?user=root&password=123");
        3. 编写SQL语句
            String insertSQL = "insert person value(null,'北川杏树',39,2,'一个粗犷的老男人')";
        4. 获取Statement对象,执行SQL语句
            Statement st = conn.createStatement();
            st.executeUpdate(insertSQL);
        5. 处理结果集数据
        6. 释放资源
            st.close();
            conn.close();

<3>DriverManager类介绍

    作用:注册数据库驱动
         获取数据库连接对象

    3.1 注册数据库驱动,方式一:
            DriverManager.registerDriver(new 具体的驱动对象);

          注册数据库启动,方式二:
            Class.forName("驱动的全路径");

        特点:方式一,程序的依赖性强,驱动注册了两次
              方式二,程序更灵活,拓展性强

    3.2 获取连接对象
        DriverManager.getConnection(String url,String username,String password);
        DriverManager.getConnection(String url,Properties info);
        DriverManager.getConnection(String url_user_pwd);


        参数一:连接数据库的URL
            URL的组成:协议    +  ip地址      +   端口号   +  数据库名称
            例如:jdbc:mysql        127.0.0.1       3306       db1

        参数二:用户名,root
        参数三:密码,123

<4>Connection接口介绍:

作用:和数据库建立起连接
方法:Statement createStatement();
      创建一个Statement对象,执行SQL语句

      事务操作的方法:

<5>Statement接口介绍:

作用:执行SQL语句(将SQL语句发送到数据库)
     返回结果集对象
方法:
    int executeUpdate(String sql)   更新数据
    ResultSet executeQuery(String sql)  查询数据

    批处理方法:
    void addBatch(String sql)
        将SQL语句添加到Statement的执行列表中
    int[] executeBatch()
        将一批命令提交给数据库执行       

<6>ResultSet接口介绍:

作用:用来封装结果集数据,内部含有一个游标,默认指向数据前           
方法:
    boolean next() 将游标从当前位置向下移动一行
    getObject(String columnName) 获取数据
    getObject(int columnIndex)  获取数据

注意1:结果数据中字段的顺序和数据库表中字段顺序没有关系。
     通过getObejct(int index)方式获取数据时,从1开始
     推荐使用getObject(String columnName) 获取数据

注意2:
    在finally代码块中释放资源
    在释放资源之前需要做非空判断

练习

使用JDBC实现数据的插入操作
使用JDBC实现对数据库数据的修改和删除

三、封装JDBC访问数据库的工具类(重点)

优化代码:提高代码的重用性,将一个公用的代码提取成方法

// 加载驱动
static{
    try {
        Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

// 获取数据库连接对象
public static Connection getConnection(String url, String root, String pwd) throws SQLException {
    Connection conn = DriverManager.getConnection(url,root,pwd);
    return conn;
}

// 释放资源
public static void closeRes(Connection conn, Statement st, ResultSet rs) {
    if (rs != null)rs.close();
    if (st != null)st.close();
    if (conn != null)conn.close();
}       

提取数据库配置信息:
    java中提供了properties配置文件,存储配置信息。
    文件类型.properties,文件内容:键=值 的方式存储信息。
    使用#注释信息


    1.编写MySQL相关参数的配置文件
        mysqlDriver=com.mysql.jdbc.Driver
        mysqlURL=jdbc:mysql://localhost:3306/db1
        mysqlUser=root
        mysqlPwd=123

    2. 加载配置文件中的数据
        // 加载驱动
        static{
            //加载配置文件
            //参数一:配置文件的路径
            ResourceBundle rb = ResourceBundle.getBundle("cn.xdl.demo.db_config");
            USER = rb.getString("mysqlUser");
            PWD = rb.getString("mysqlPwd");
            URL = rb.getString("mysqlURL");
            DRIVER = rb.getString("mysqlDriver");

            System.out.println(USER+","+PWD);

            try {
                Class.forName(DRIVER);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }

练习

使用JDBC查询数据库中的数据
封装操作数据库的工具类

四、使用JDBC实现登陆和注册功能

分析:
    cn.xdl.client
            ClientMain
    cn.xdl.entity
            UserBean
    cn.xdl.service  业务逻辑处理包
            ApplicationService
    cn.xdl.util
            DBUtils

创建用户表:
    create table user(
        id int primary key auto_increment,
        user varchar(20) not null unique,
        pwd varchar(20) not null
    )

练习

实现注册和登陆功能

五、防止SQL注入

<1>PreparedStatement接口介绍:

使用:
    在预处理操作中使用'?'进行占位操作。
    执行sql语句时,进行数据的动态设置

好处:安全较高
     性能能搞,书写灵活

方法:
    PreparedStatement pst = Connection对象.preparedStatement(sql语句);  
    补全:
        setObject(位置,数值);
        注意,位置从1开始

    执行:
        ResultSet rs = pst.executeQuery();
        int result = pst.executeUpdate();

作业:

编写宠物管理系统
功能:宠物信息的录入,查询,修改和删除
要求:使用JDBC实现,封装数据库工具类

视图层:cn.xdl.view
        AnimalViewUtils 
        AnimalClient

业务层:cn.xdl.service
        AniamlService   

模型层:cn.xdl.bean/vo/entity
        Aniaml

版权声明:本文为xinpiannanhai原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。