Java中Class.forName()在代碼上無法執(zhí)行報錯NotFound的解決過程
更新時間:2026年06月01日 11:52:40 作者:蘇木零榆
這段文章主要討論了ClassNotFoundException的錯誤原因,指出問題源于文件夾命名錯誤,應命名為WEB-INF而非WEB-INFO,并強調了正確配置的重要性
異常信息
ClassNotFoundException
前因
在寫JDBCUtils工具類的時候,發(fā)現測試時無法獲取到正常的數據,查看日志后發(fā)現報錯ClassNotFoundException。
錯誤原因
- jar包導入正常
- 所有配置文件的配置信息正常
- SQL語句以及其他代碼編寫正常
文件夾命名異常:
- 在web目錄下的創(chuàng)建的目錄名稱必須創(chuàng)建為WEB-INF,但是我創(chuàng)建的是WEB-INFO,隨后創(chuàng)建的lib目錄,放進了jar包,因此出現了該錯誤。
- 然而在最初的學習中也是創(chuàng)建的WEB-INFO目錄,卻可以運行正常,目前原因未知。
代碼實現
配置文件
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/userlogin username=root password=guoyuhang initialSize=5 maxActive=10 maxWait=3000
JDBC代碼實現
package cn.itcast.util;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
public class JDBCUtils {
private static String url;
private static String password;
private static String user;
private static String driverClassName;
static {
try {
//開始讀數據
Properties properties = new Properties();
//獲取到該類所在的目錄
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL resource = classLoader.getResource("druid.properties");
String path = resource.getPath();
properties.load(new FileReader(path));
//獲取數據,賦值
url = properties.getProperty("url");
user = properties.getProperty("username");
password = properties.getProperty("password");
driverClassName = properties.getProperty("driverClassName");
Class.forName(driverClassName);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
/**
* 釋放資源的方法 這里實現了重載 雙參數和三參數
*/
public static void close(Statement stmt, Connection conn){
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs, Statement stmt, Connection conn){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot多數據源解決方案:dynamic-datasource-spring-boot-starter
本文主要介紹了SpringBoot多數據源解決方案,使用dynamic-datasource-spring-boot-starter實現,具有一定的參考價值,感興趣的可以了解一下2025-03-03
Java的Struts框架中Action的編寫與攔截器的使用方法
這篇文章主要介紹了Java的Struts框架中Action的編寫與攔截器的使用方法,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-11-11
Java并發(fā)編程中的synchronized關鍵字詳細解讀
這篇文章主要介紹了Java并發(fā)編程中的synchronized關鍵字詳細解讀,在Java早期版本中,synchronized 屬于 重量級鎖,效率低下,這是因為監(jiān)視器鎖(monitor)是依賴于底層的操作系統的Mutex Lock來實現的,Java 的線程是映射到操作系統的原生線程之上的,需要的朋友可以參考下2023-12-12
SpringBoot如何使用Fastjson解析Json數據
這篇文章主要介紹了SpringBoot如何使用Fastjson解析Json數據,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03

