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

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

    ###<2>作用
    是连接java应用程序和数据库的一个桥梁和纽带
    体现了java的one write , run anywhere
    ![](1.png)

    ###<3>组成
    DriverManager类:驱动管理类,用于注册驱动
    Connection接口:数据库连接接口,和数据库连接
    Statement接口:操作数据库中数据的接口,执行sql语句
    PreparedStatement接口:操作数据库中数据的接口,执行sql语句,预处理的能力
    ResultSet接口:结果集接口,封装了查询的结果数据
    ![](2.png)

    # 二、通过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) 获取数据
    ![](3.png)

    注意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();

    不忘初心,方得始终! 坚持!坚持!坚持!!
  • 相关阅读:
    序例化-Externalizable 接口
    线程休眠
    线程优先级
    const & 用法
    AcGePoint3d ads_point 转换
    结果缓冲区 resbuf具体用法
    选择集用法
    引用用法
    通过用户选择获取各种东西
    ARX中类型强制转换
  • 原文地址:https://www.cnblogs.com/sumboy/p/9058628.html
Copyright © 2011-2022 走看看