leighy 2022-03-07 11:28 采纳率: 25%
浏览 53

dbcp连接池配置问题出现未初始化问题

问题遇到的现象和发生背景

使用dbcp连接池,测试数据库插入
出现Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class com.leighy.test5.utils.jdbcUtils_DBCP
报错

问题相关代码,请勿粘贴截图

jdbcUtils_DBCP工具类

package com.leighy.test5.utils;

import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class jdbcUtils_DBCP {

    private static DataSource dataSource = null;

    static {
        try {
            InputStream in = jdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
            Properties properties = new Properties();
            properties.load(in);

            //创建数据源 工厂模式 --》创建对象
            dataSource = BasicDataSourceFactory.createDataSource(properties);


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

    //获取连接
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();//从数据源获取连接
    }

    //释放连接
    public static void release(Connection conn, Statement st, ResultSet rs){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(st!=null){
            try {
                st.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}


测试键入代码

package com.leighy.test5;

import com.leighy.test2.utils.jdbcUtils;
import com.leighy.test5.utils.jdbcUtils_DBCP;

import java.sql.*;

public class TestDbcp {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement st = null;//使用PreparedStatement更加安全,且可以避免SQL注入

        try {
            //使用?占位符代替参数
            conn = jdbcUtils_DBCP.getConnection();
            String sql = "insert into subject(subjectno,subjectname,classhour,gradeid) values(?,?,?,?)";

            st = conn.prepareStatement(sql);//预编译SQL,先写sql,但不执行

            //手动给参数赋值
            st.setInt(1,19);
            st.setString(2,"项目测试");
            st.setInt(3,110);
            st.setInt(4,3);
            //注意点:sql.date 数据库 java.sql.date()
            //      uitl.date JAVA new date().gettime() 获得时间戳
            //想要获得当前时间则new java.sql.Date(new Date().getTime()))


            //执行
            int i = st.executeUpdate();
            if(i>0){
                System.out.println("插入成功!");
            }


        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            jdbcUtils_DBCP.release(conn,st,null);
        }
    }
}


dbcpconfig.properties文件

#连接设置 名字是DBCP数据源已定义好 请勿更改
driverClassName=com.mysql.jdbc.Driver  // 这是基本的驱动加载
url=jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=UTF-8&useSSL=false    // 驱动注册
username=root    //要连接的数据库用户名
password=123456  // 要连接的数据库密码

initialSize=10:  // 初始化数据池拥有的连接数量

maxActive=20:  /池中最多可容纳的活着的连接数量,当达到这个数量不在创建连接

maxIdle=20:  // 最大空闲等待,也就是连接等待队列超过这个值会自动回收未使用的连接,直到达到20

minIdle=5: // 最小空闲等待 ,数据池中最少保持的连接

maxWait=10000   // 最大等待时间,超过这个时间等待队列中的连接就会失效


运行结果及报错内容

img

我的解答思路和尝试过的方法

报错工具类未初始化,properties文件已给初始化数量,怀疑是导入包出现错误
lib目录

img

我想要达到的结果

成功键入数据库

  • 写回答

1条回答 默认 最新

  • 七号公园的忧伤 Java领域新星创作者 2022-03-07 12:09
    关注

    配置文件注释是不是写错了?一般用#

    评论

报告相同问题?

问题事件

  • 修改了问题 3月8日
  • 修改了问题 3月7日
  • 创建了问题 3月7日

悬赏问题

  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)
  • ¥15 传人记程序做的plc 485从机程序该如何写
  • ¥15 已知手指抓握过程中掌指关节、手指各关节和指尖每一帧的坐标,用贝塞尔曲线可以拟合手指抓握的运动轨迹吗?