小滴课堂-学习笔记: Javaweb核心技术之实战JDBC连接Mysql数据库

56 篇文章 0 订阅
15 篇文章 0 订阅

logo 愿景:"让编程不再难学,让技术与生活更加有趣"


更多架构课程请访问 xdclass.net

 

目录

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

第2集 JDBC相关驱动包导入和数据库表准备

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

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

第5集 实战JDBC连接数据库完成新增和删除功能

第6集 实战JDBC控制Mysql事务控制

干货文档


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

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

  • 什么是JDBC

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

     

image-20200526225924878

 

 

 

 

  • 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):事务是最小单位,不可再分
    • 一致性(C):事务要求所有的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();
            }
    ​
        }
    
    

     

干货文档

                                                        关注公众号发送:“CSDN干货文档”  即可领取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dev666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值