小滴课堂-新版JavaWeb零基础到实战专题课程-13


前言

小滴课堂,旨在让编程不在难学,让技术与生活更加有趣。 随着互联网+的时代,在线教育技术越来越便捷,小滴课堂依托在线教育时间以及空间上的便利,为广大IT从业者提供了更为方便、快捷的学习交流途径、提供大量高质量的IT在线课程。更多教程请访问xdclass.net(添加VX:xdclass99)

第十四章 Javaweb核心技术之实战JDBC连接Mysql数据库

第1集 Java开发必备技术之JDBC相关概念介绍

简介:讲解什么是JDBC和相关介绍

  • 什么是JDBC
    • 全称 Java DataBase Connectivity, 是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口
    • 提供了一种接口基准,可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序
    • 应用程序代码一般不能直接访问数据库,需要通过相应的数据库驱动程序才行,
    • 什么是数据库驱动? 通俗来说就是数据库厂商的JDBC接口实现

img

  • JDBC连接MySQL相关概念

    • 数据库驱动:不同数据库开发商(比如oracle mysql等)为了某一种开发语言能够实现统一的数据库调用而开发的一个程序, 作用相当于一个翻译人员, 将某个语言(比如java)中对数据库的调用通过这个翻译成各个种类的数据库 自己的数据库语言
    • Connection连接:特定数据库的连接(会话),在连接上下文中执行sql语句并返回结果
    • Statement 语句: 创建执行SQL语句的statement, 有好几种实现类,用于执行对应的sql
    • ResultSet结果集:SQL查询返回的结果信息
  • 使用Java连接Mysql的步骤

    • 加载JDBC驱动程序
    • 建立数据库连接Connection
    • 创建执行SQL的语句Statement
    • 处理执行结果ResultSet
    • 释放连接资源
第2集 JDBC相关驱动包导入和数据库表准备

简介:准备数据库表相关的

  • 基础环境:
    • 自己搭建好Mysql数据库,推荐是Mysql5.7版本
      • 注意 如果连接不上数据库
        • 检查防火墙-云服务器的网络安全组
        • mysql有没开启允许远程连接
    • 准备Mysql客户端软件
      • Windows: navicat、mysqlworkbench
      • mac: sequel pro
  • Mysql驱动jar包导入
  • mysql数据库表建立
CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `phone` varchar(32) DEFAULT NULL,
  `pwd` varchar(128) DEFAULT NULL,
  `sex` int(2) DEFAULT NULL,
  `img` varchar(128) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `role` int(11) DEFAULT NULL COMMENT '1是普通用户,2是管理员',
  `username` varchar(128) DEFAULT NULL,
  `wechat` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


INSERT INTO `user` (`id`, `phone`, `pwd`, `sex`, `img`, `create_time`, `role`, `username`,`wechat`)
VALUES
    (1,'123','666',1,'xdclass.net','2021-09-09 00:00:00',1,'jack','xdclass6'),
    (2,'2323432','794666918',1,'wwwww','2020-05-20 04:54:01',1,'小滴Anna姐姐','xdclass-anna'),
    (3,'2323432','xdclass-lw',1,'wwwww','2020-05-20 04:54:42',1,'二当家小D','xdclass1'),
    (4,'2323432','3232323',1,'wwwww','2020-05-20 04:55:07',1,'老王','xdclass-lw');

第3集 开发你的第一个JDBC连接Mysql程序

简介:快速使用jdbc连接Mysql

  • 使用Java连接Mysql的步骤

    • 加载JDBC驱动程序
    • 建立数据库连接Connection
    • 创建执行SQL的语句Statement
    • 处理执行结果ResultSet
    • 释放连接资源
      • resultSet.close();
      • statement.close();
      • connection.close();
  • 第一个jdbc程序

public static void main(String [] args) throws Exception{

         //加载JDBC驱动程序
         Class.forName("com.mysql.jdbc.Driver");

         //建立数据库连接Connection
        String username = "root";
        String password = "xdclass.net";
        //协议:子协议://ip:端口/数据库名称?参数1=值1&参数2=值2
        String url = "jdbc:mysql://127.0.0.1:3306/xd_web?useUnicode=true&characterEncoding=utf-8&useSSL=false";

        Connection connection = DriverManager.getConnection(url,username,password);

         //创建执行SQL的语句Statement
        Statement statement  = connection.createStatement();

         //处理执行结果ResultSet
        ResultSet resultSet = statement.executeQuery("select * from user");

        while (resultSet.next()){

            System.out.println("用户名称 name="+ resultSet.getString("username") + "  联系方式 wechat="+ resultSet.getString("wechat"));
        }

        //释放连接资源
        resultSet.close();
        statement.close();
        connection.close();


    }
第4集 SQL注入攻击和Statement预编译语句

简介:讲解SQL注入攻击Statement预编译语句

  • 什么是SQL注入攻击
    • 可以执行恶意SQL语句,将任意SQL代码插入数据库查询,使用SQL注入来添加,修改和删除数据库中的记录
  • PrepareStatement
    • 字面可译为预声明,内部包含一个预编译的sql语句,参数采用占位符 ? 进行填充
    • 为啥可以防注入
      • 第一次操作数据库之前,SQL语句已经被数据库分析和编译,对应的执行计划也会缓存下来,之后数据库就会以参数化的形式进行查询
      • 传入的值始终都是会作为一个值,而不是sql指令
  • 好处:维护性好、提高sql效率、增加安全性
第5集 实战JDBC连接数据库完成新增和删除功能

简介:始终JDBC新增记录和删除记录功能

  • 新增记录
        PreparedStatement preparedStatement = connection.prepareStatement("insert into  user(username, pwd,sex,role,create_time) values(?,?,?,?,?) ");

        preparedStatement.setString(1,"二当家小D");
        preparedStatement.setString(2,"123456");
        preparedStatement.setInt(3,1);
        preparedStatement.setInt(4,2);
        preparedStatement.setTimestamp(5,new Timestamp(System.currentTimeMillis()));

        //执行
        preparedStatement.execute();

        preparedStatement.close();
        connection.close();
  • 删除记录
        Connection connection = DriverManager.getConnection(url, username, password);

        PreparedStatement preparedStatement = connection.prepareStatement("delete  from user where  id=?");

        preparedStatement.setInt(1,2);

        //执行
        preparedStatement.execute();

        preparedStatement.close();
        connection.close();
第6集 实战JDBC控制Mysql事务控制

简介:讲解JDBC控制Mysql事务

  • 事务:

    • 一个最小的不可再分的工作单元,通常一个事务对应一个完整的业务
    • 例如银行账户转账业务,该业务就是一个最小的工作单元
  • 四大特性

    • 原子性(A):事务是最小单位,不可再分
    • 一致性©:事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
    • 隔离性(I):事务A和事务B之间具有隔离性
    • 持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)
  • 事务的一些术语

    • 开启事务:Start Transaction
    • 事务结束:End Transaction
    • 提交事务:Commit Transaction
    • 回滚事务:Rollback Transaction
  • JDBC事务控制实操

private static void testTransaction() throws Exception {
        //加载JDBC驱动程序
        Class.forName("com.mysql.jdbc.Driver");
​
        //建立数据库连接Connection
        String username = "root";
        String password = "xdclass.net";
        //协议:子协议://ip:端口/数据库名称?参数1=值1&参数2=值2
        String url = "jdbc:mysql://127.0.0.1:3306/xd_web?useUnicode=true&characterEncoding=utf-8&useSSL=false";

        Connection connection = DriverManager.getConnection(url, username, password);

            try (
                PreparedStatement ps1 = connection.prepareStatement("insert into  user(username, pwd) values(?,?) ");
                PreparedStatement ps2 = connection.prepareStatement("insert into  user(username, pwd) values(?,?) ")) {

            //JDBC中默认事务是自动提交的,false就不会自动提交
            connection.setAutoCommit(false);

            ps1.setString(1, "1111tranc ps 1二当家小D");
            ps1.setString(2, "123456");

            ps2.setString(1, "2222tranc ps 2二当家小D");
            ps2.setString(2, "123456");

            ps1.execute();

            //模拟异常
            int i = 1/0;

            ps2.execute();


        } catch (Exception e) {
            e.printStackTrace();

            //事务回滚
            connection.rollback();

        } finally {
                //事务提交
            connection.commit();
            connection.close();
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值