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());
}
}
想问一下这个为什么会报这样的错误
看下你的 Example02类的 17行代码
Example02报错,你应该贴Example02的代码
其中树的所有结点(底部除外)的数据都是由主键字段中的数据构成,也就是通常我们指定主键的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),
结果就是查找次数,这里的结果从亿降到了个位数。因此,利用索引会使数据库查询有惊人的性能提升。
对于数据库连接池出现错误并报错的原因,可能会有多种可能性。以下是一些可能的原因:
数据库连接池配置不当:在配置数据库连接池的时候,如果连接池的参数设置不当,可能会导致连接池过早地关闭或者过度缓存,从而导致错误。解决方案:可以对数据库连接池的参数进行逐一排查,并进行相应的调整。
网络问题:如果数据库服务器和应用服务器之间的网络不稳定,可能会导致数据库连接的丢失或超时。解决方案:可以通过网络测试工具检查网络是否存在延迟、丢包等问题,并在必要时进行网络优化。
数据库连接泄漏:如果应用中存在数据库连接泄漏的情况,也会导致数据库连接池出现错误并报错。解决方案:可以通过编写代码来检测和清除泄漏的连接,或者使用第三方的连接池库来避免这种情况的发生。
数据库资源瓶颈:如果数据库中某些表过于庞大或者查询语句复杂,可能会导致数据库连接池出现错误并报错。解决方案:可以通过优化查询语句、增加索引、拆分表等方式来提高数据库的性能和稳定性。
应用程序自身问题:如果应用程序出现了内存泄漏等问题,也会导致数据库连接池出现错误并报错。解决方案:可以通过编写高质量的代码、使用内存分析工具等方式来排查和解决问题。
综上所述,数据库连接池出现错误并报错的原因可能有很多,需要根据具体情况进行分析和解决。建议尽量避免直接从错误信息中得出结论,而是根据错误信息进一步深入分析,从而更好地解决问题。
看这里为什么为空