数据库连接池这个错误为什么会出现


import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
public class Example01 {
    public static DataSource ds = null;
    static {
        // 获取DBCP数据库连接池实现类对象
        BasicDataSource bds = new BasicDataSource();
        // 设置连接数据库需要的配置信息
        bds.setDriverClassName("com.mysql.jdbc.Driver");
        bds.setUrl("jdbc:mysql://localhost:3306/jdbc?serverTimezone=GMT%2B8");
        bds.setUsername("root");
        bds.setPassword("aa6155581");
        // 设置连接池的初始化连接参数
        bds.setInitialSize(5);
        ds = bds;
    }
    public static void main(String[] args) throws SQLException {
        // 获取数据库连接对象
        Connection conn = ds.getConnection();
        //获取数据库连接信息
        DatabaseMetaData metaData = conn.getMetaData();
        //打印数据库连接信息
        System.out.println(metaData.getURL()
                +",UserName="+metaData.getUserName()
                +","+metaData.getDriverName());
    }
}

想问一下这个为什么会报这样的错误

img

看下你的 Example02类的 17行代码

Example02报错,你应该贴Example02的代码

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7624695
  • 这篇博客也不错, 你可以看下插入数据库的中文数据为什么会是问号?
  • 除此之外, 这篇博客: 数据库索引是什么?为什么要使用索引?中的 为什么加索引后会使查询变快? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 其中树的所有结点(底部除外)的数据都是由主键字段中的数据构成,也就是通常我们指定主键的id字段。最下面部分是真正表中的数据。

    假如我们执行一个SQL语句: select * from table where id = 1256;
    首先根据索引定位到1256这个值所在的叶结点,然后再通过叶结点取到id等于1256的数据行。
    这里不讲解平衡树的运行细节, 但是从上图能看出,树一共有三层, 从根节点至叶节点只需要经过三次查找就能得到结果。如下图

    在这里插入图片描述

    假如一张表有一亿条数据 ,需要查找其中某一条数据,按照常规逻辑, 一条一条的去匹配的话,
    最坏的情况下需要匹配一亿次才能得到结果,用大O标记法就是O(n)最坏时间复杂度,这是无法接受的,而且这一亿条数据显然不能一次性读入内存供程序使用。
    因此, 这一亿次匹配在不经缓存优化的情况下就是一亿次IO开销,以现在磁盘的IO能力和CPU的运算能力, 有可能需要几个月才能得出结果。
    如果把这张表转换成平衡树结构(一棵非常茂盛和节点非常多的树),假设这棵树有10层,那么只需要10次IO开销就能查找到所需要的数据, 速度以指数级别提升。
    n是记录总树,底数是树的分叉数,结果就是树的层次数。换言之,查找次数是以树的分叉数为底,记录总数的对数,用公式来表示就是

    在这里插入图片描述

    用程序来表示就是Math.Log(100000000,10),100000000是记录数,10是树的分叉数(真实环境下分叉数远不止10),
    结果就是查找次数,这里的结果从亿降到了个位数。因此,利用索引会使数据库查询有惊人的性能提升。

  • 您还可以看一下 陈槐老师的零基础新手入门软件测试必知必会课程中的 测试用例的标准规范小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    对于数据库连接池出现错误并报错的原因,可能会有多种可能性。以下是一些可能的原因:

    1. 数据库连接池配置不当:在配置数据库连接池的时候,如果连接池的参数设置不当,可能会导致连接池过早地关闭或者过度缓存,从而导致错误。解决方案:可以对数据库连接池的参数进行逐一排查,并进行相应的调整。

    2. 网络问题:如果数据库服务器和应用服务器之间的网络不稳定,可能会导致数据库连接的丢失或超时。解决方案:可以通过网络测试工具检查网络是否存在延迟、丢包等问题,并在必要时进行网络优化。

    3. 数据库连接泄漏:如果应用中存在数据库连接泄漏的情况,也会导致数据库连接池出现错误并报错。解决方案:可以通过编写代码来检测和清除泄漏的连接,或者使用第三方的连接池库来避免这种情况的发生。

    4. 数据库资源瓶颈:如果数据库中某些表过于庞大或者查询语句复杂,可能会导致数据库连接池出现错误并报错。解决方案:可以通过优化查询语句、增加索引、拆分表等方式来提高数据库的性能和稳定性。

    5. 应用程序自身问题:如果应用程序出现了内存泄漏等问题,也会导致数据库连接池出现错误并报错。解决方案:可以通过编写高质量的代码、使用内存分析工具等方式来排查和解决问题。

    综上所述,数据库连接池出现错误并报错的原因可能有很多,需要根据具体情况进行分析和解决。建议尽量避免直接从错误信息中得出结论,而是根据错误信息进一步深入分析,从而更好地解决问题。

看这里为什么为空

img