Java Web: JDBC、数据库连接池、Maven

2023-11-15

1.JDBC

JDBC:全称Java DataBase Connection(Java 数据库连接)。在前面我们已经学习过Java和DataBase(数据库)了,JDBC就是使用Java语言操作关系型数据的一套API。本质上就是一个接口,用于给不同的数据库管理系统:比如我们最熟悉的MySQL,还有Oracle、DB2等去实现的,JDBC和 数据库管理系统 就是接口和实现类的关系。

1.1 JDBC 简介

在这里插入图片描述

1.2 了解JDBC

前面我们已经知道JDBC是一套Java语言提供的API,那么我们该如何结合Java去使用呢?如下:
在这里插入图片描述
完整的操作流程如下:
在这里插入图片描述
接下来我们就来详细的讲解一下这个流程:

1.3 JDBC API详解

1.3.1 DriverManager

DriverManager(驱动管理类)主要有两个作用:
1.注册驱动:
在这里插入图片描述
2.获取数据库连接
在这里插入图片描述

1.3.2 Connection

1.获取执行SQL的对象
在这里插入图片描述
2.管理事务
在这里插入图片描述

1.3.3 Statement

在这里插入图片描述

1.3.4 ResultSet

在这里插入图片描述
在这里插入图片描述

补充:SQL注入

在这里插入图片描述

1.3.5 PreparedStatement

1.作用
在这里插入图片描述
2.原理
在这里插入图片描述

2.数据库连接池

2.1 数据库连接池简介

在这里插入图片描述

2.2 数据库连接池实现

在这里插入图片描述
我们接下来讲一下最常用的数据库连接池之一: Druid

2.3 Druid 使用步骤

在这里插入图片描述

3.练习(结合JDBC和数据连接池)

我们先来看一下需求:
我们先来用mysql语言创建一张sql表

-- 删除tb_brand表
DROP TABLE
IF
	EXISTS tb_brand;
-- 创建tb_brand表
CREATE TABLE tb_brand (
-- id 主键
id INT PRIMARY KEY auto_increment,
-- 品牌名称
brand_name VARCHAR ( 20 ),
-- 企业名称
company_name VARCHAR ( 20 ),
-- 排序字段
ordered INT,
-- 描述信息
description VARCHAR ( 100 ),
-- 状态:0:禁用  1:启用
STATUS INT 
	);
-- 添加数据
INSERT INTO tb_brand ( brand_name, company_name, ordered, description, STATUS )
VALUES
	( '三只松鼠', '三只松鼠股份有限公司', 5, '好吃不上火', 0 ),
	( '华为', '华为技术有限公司', 100, '华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界', 1 ),
	( '小米', '小米科技有限公司', 50, 'are you ok', 1 );
SELECT
	* 
FROM
	tb_brand;

查询整张表:
在这里插入图片描述
对这样一张表进行增删改查的练习:
代码如下:

3.1 查询所有

/**
     * 查询所有
     * 1.SQl: select * from tb_brand;
     * 2.参数,不需要
     * 3.结果 List<Brand>
     */
    @Test
    public void testSelectAll() throws Exception {
        //3.加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("./src/druid.properties"));

        //4.获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

        //5.数据库连接
        Connection conn = dataSource.getConnection();

        /*2.定义SQL*/
        String sql = "select * from tb_brand";

        /*3.获取PreparedStatement对象*/
        PreparedStatement pstmt = conn.prepareStatement(sql);

        /*4.设置参数*/

        /*5.执行sql*/
        ResultSet rs = pstmt.executeQuery();

        /*6.处理结果*/
        Brand brand=null;
        List<Brand> brands=new ArrayList<>();
        while (rs.next()) {
            //获取数据
            int id = rs.getInt("id");
            String brandName = rs.getString("brand_name");
            String companyName = rs.getString("company_name");
            int ordered = rs.getInt("ordered");
            String description = rs.getString("description");
            int status = rs.getInt("STATUS");

            //封装对象
            brand =new Brand(id,brandName,companyName,ordered,description,status);

            //装载集合
            brands.add(brand);
        }
        System.out.println(brands);
        /*7.释放资源*/
        rs.close();
        pstmt.close();
        conn.close();
    }

3.2 添加数据

/**
     * 添加:
     * 1.SQl: insert into tb_brand(brand_name,company_name,ordered,description,status) values (?????)
     * 2.参数,除了id之外的所有参数信息
     * 3.结果 返回boolean值
     */
    @Test
    public void testAdd() throws Exception {
        /*接收页面提交的参数*/
        String brandName="香飘飘";
        String companyName="香飘飘";
        int ordered=1;
        String description="绕地球一圈";
        int status=1;

        //3.加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("./src/druid.properties"));

        //4.获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

        //5.数据库连接
        Connection conn = dataSource.getConnection();

        /*2.定义SQL*/
        String sql = "insert into tb_brand(brand_name,company_name,ordered,description,STATUS) values (?,?,?,?,?)";

        /*3.获取PreparedStatement对象*/
        PreparedStatement pstmt = conn.prepareStatement(sql);

        /*4.设置参数*/
        pstmt.setString(1,brandName);
        pstmt.setString(2,companyName);
        pstmt.setInt(3,ordered);
        pstmt.setString(4,description);
        pstmt.setInt(5,status);

        /*5.执行sql*/
        int count =pstmt.executeUpdate();//受影响的行数

        /*6.处理结果*/
        System.out.println(count>0);

        /*7.释放资源*/
        pstmt.close();
        conn.close();
    }

3.3 修改数据

/**
     * 修改:
     * 1.SQL:
     * update tb_brand set brand_name=?,
        company_name=?,
        ordered=?,
        description=?,
        status =?
     where id=?
     * 2.参数:需要所有参数
     * 3.结果 返回boolean值
     */
    @Test
    public void testUpdate() throws Exception {
        /*接收页面提交的参数*/
        String brandName="香飘飘";
        String companyName="香飘飘";
        int ordered=10000;
        String description="多绕地球几圈";
        int status=1;
        int id=4;

        //3.加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("./src/druid.properties"));

        //4.获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

        //5.数据库连接
        Connection conn = dataSource.getConnection();

        /*2.定义SQL*/
        String sql = "update tb_brand set brand_name=?,\n" +
                "        company_name=?,\n" +
                "        ordered=?,\n" +
                "        description=?,\n" +
                "        status =?\n" +
                "     where id=?";

        /*3.获取PreparedStatement对象*/
        PreparedStatement pstmt = conn.prepareStatement(sql);

        /*4.设置参数*/
        pstmt.setString(1,brandName);
        pstmt.setString(2,companyName);
        pstmt.setInt(3,ordered);
        pstmt.setString(4,description);
        pstmt.setInt(5,status);
        pstmt.setInt(6,id);/*对照id改数据*/

        /*5.执行sql*/
        int count =pstmt.executeUpdate();//受影响的行数

        /*6.处理结果*/
        System.out.println(count>0);

        /*7.释放资源*/
        pstmt.close();
        conn.close();
    }

3.4 删除数据

/**
     * 删除:
     * 1.SQL:   delete from tb_brand where id =?
     * 2.参数:只需要id
     * 3.结果 返回boolean值
     */
    @Test
    public void testDelete() throws Exception {
        /*接收页面提交的参数*/
        int id=4;

        //3.加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("./src/druid.properties"));

        //4.获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

        //5.数据库连接
        Connection conn = dataSource.getConnection();

        /*2.定义SQL*/
        String sql = "delete from tb_brand where id =?";

        /*3.获取PreparedStatement对象*/
        PreparedStatement pstmt = conn.prepareStatement(sql);

        /*4.设置参数*/
        pstmt.setInt(1,id);/*对照id删数据*/

        /*5.执行sql*/
        int count =pstmt.executeUpdate();//受影响的行数

        /*6.处理结果*/
        System.out.println(count>0);

        /*7.释放资源*/
        pstmt.close();
        conn.close();
    }

4.Maven

4.1 Maven功能了解

在这里插入图片描述

4.1.1 Maven标准化的项目结构

在这里插入图片描述

4.1.2 Maven标准化的构建流程

在这里插入图片描述

4.1.3 Maven的依赖管理机制

在这里插入图片描述

4.2 Maven简介

在这里插入图片描述
在这里插入图片描述

4.3 Maven安装配置

在这里插入图片描述

4.4 Maven基本使用

4.4.1 Maven常用命令

在这里插入图片描述

4.4.2 Maven生命周期

在这里插入图片描述

4.5 Maven坐标、依赖范围

1.Maven坐标
在这里插入图片描述
2.依赖范围
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Web: JDBC、数据库连接池、Maven 的相关文章

随机推荐

  • qt5中信号和槽连接,对于多种参数重载的处理

    因为QSpinBox的valueChanged信号有重载 为避免二义性 需要通过声明函数指针方式 来进行信号和槽的连接 void QSpinBox p int QSpinBox valueChanged 函数指针p前要加类名作用域符号 co
  • 假设u~N(0, 1), X

    假设 N 0 1 X
  • API HOOK

    本来这个方法是API HOOK中经常用到 但是我想试试在单个程序中实现 为何运行时总是错误 本来是一个函数跳另外一个的 我又后退了一步 只是用一个函数自己的前面8字节修改自己 还是会错误了 void CJmpDlg OnButton1 对应
  • JDBC 连接池配置文件 解决了already close问题

    XML文件 DataSource配置
  • 生命周期BeanPostProcessor(3)---Spring源码从入门到精通(九)

    上篇文章主要介绍了Bean生命周期 bean生命周期 创建bean gt 初始化init gt 销毁destory 而初始化和销毁是可以用 Bean指定的 或者用 PostCoustruct preDestory注解 或者用Initiali
  • 两个多项式相加算法(链表实现)

    来源 数据结构期中考试补充题 注 该代码测试数据较少 吃过晚饭有时间再测试下改改bug QAQ 多项式相加 include
  • Python3运行报错:TypeError: Object of type ‘type‘ is not JSON serializable解决方法(不是针对对象转Json的方法)

    问题描述 Python内置的json模块提供了非常完善的Python对象到JSON格式的转换 json dumps 将Python中的对象转换为JSON中的字符串对象 json loads 将JSON中的字符串对象转换为Python中的对象
  • OpenSystemArchitect从入门到放弃

    原因 pd每次建立外键都自动生成字段 这个设置找不到解决方案 就想着有不有替代pd的工具 结果百度 还真有 用OpenSystemArchitect的原因 开源免费 他的外键直观的展示2个表的关系 逻辑视图的支持 放弃 文档不全 好多问题没
  • YUM仓库及NFS共享服务理论

    文章目录 一 YUM仓库 1 YUM概述 2 准备安装源 3 访问YUM仓库 二 FNS共享存储服务 1 NFS概念 2 NFS使用场景 3 NFS服务 一 YUM仓库 1 YUM概述 YUM Yellow dog Updater Modi
  • Allegro添加相对传输延迟的等长规则设置

    怎么去添加相对传输延迟的等长规则 首先讲述的是通过直接添加法去添加 直接添加法只适用于点对点的传输模式 中间没有任何串阻 串容的情况 具体操作如下所示 01 打开规则管理器 打开规则管理器 执行菜单命令Setup Constraints 在
  • 抖之恒科技python常用库之工具库schema

    在Python编程语言中 有众多的开源库可以帮助程序员更加高效地完成各种任务 其中 Schema就是一款非常实用的工具库之一 本文将为您介绍Schema库的基本概念 使用方法以及它在Python编程中重要性 一 什么是Schema Sche
  • Koin入门使用

    一 简单流程 1 创建Koin容器 startKoin 创建一个Koin容器并注册到GlobalContext中 modules module 配置Koin模块并注入到Koin容器 2 创建Koin模块 class People val k
  • HDU1007(最近点对问题)

    题意不难理解 就是找到最近的两个点 计算其距离 除以2就是所求的圆的半径 思路很简单 运用分治的思想 先划分区间 分别找到左右区间中的最近点对 再合并区间 找到区间间的最近点对 注意如果用qsort 进行排序可能会超时 include
  • Qi v1.2.4 -- WPC官方文档资源下载

    WPC无线充电联盟QI协议1 2 4 zip qi 嵌入式文档类资源 CSDN下载QI协议part1 part2 part3 part4完整版 没有积分可使用链接 链接 httpqi更多下载资源 学习资料请访问CSDN下载频道 https
  • 剑指offer-42翻转单词顺序-左旋转字符串

    先来一道简单题 将字符串左旋 输入abcdefg 输出cdefgab package Leetcode Author YCKJ3803 Date 2021 3 1 16 41 Description public class Zuoxuan
  • Java概述(了解java开发及背景)

    目录 一 java语言背景介绍 Java 语言的三个版本 JavaSE JavaME JavaEE 二 Java跨平台原理 三 JRE和JDK Java 程序开发的三个步骤 编写代码 编译代码 运行代码 JDK JRE 和 JVM 的关系
  • 初学JAVA的变量作用域

    变量的范围是程序中该变量可以被引用的部分 方法内定义的变量被称为局部变量 局部变量的作用范围从声明开始 直到包含它的块结束 局部变量必须声明才可以使用 方法的参数范围涵盖整个方法 参数实际上是一个局部变量 for循环的初始化部分声明的变量
  • 简单springboot及springboot cloud环境搭建

    springboot使用特定的方式 简化了spring的各种xml配置文件 并通过maven或者gradle 完成所需依赖 使用springboot maven插件 可直接输出可运行的jar包 省去了tomcat等容器的部署 使得基于htt
  • 基于Sqli-Labs靶场的SQL注入-29~31关

    目录 Less 29 基于GET 双服务器 单引号 字符型注入 双服务器解析 爆破数据库名 爆破表名 爆破列名 爆破字段值 Less 30 基于GET 双服务器 双引号 字符型注入 Less 31 基于GET 双服务器 双引号加括号 字符型
  • Java Web: JDBC、数据库连接池、Maven

    1 JDBC JDBC 全称Java DataBase Connection Java 数据库连接 在前面我们已经学习过Java和DataBase 数据库 了 JDBC就是使用Java语言操作关系型数据的一套API 本质上就是一个接口 用于