问题遇到的现象和发生背景
使用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 // 最大等待时间,超过这个时间等待队列中的连接就会失效
运行结果及报错内容
我的解答思路和尝试过的方法
报错工具类未初始化,properties文件已给初始化数量,怀疑是导入包出现错误
lib目录
我想要达到的结果
成功键入数据库