Java–Class.forName()
异常信息:ClassNotFoundException
前因:
- 在写JDBCUtils工具类的时候,发现测试时无法获取到正常的数据,查看日志后发现报错ClassNotFoundException。
错误原因:
- jar包导入正常
- 所有配置文件的配置信息正常
- SQL语句以及其他代码编写正常
- 文件夹命名异常
- 在web目录下的创建的目录名称必须创建为WEB-INF,但是我创建的是WEB-INFO,随后创建的lib目录,放进了jar包,因此出现了该错误。
- 然而在最初的学习中也是创建的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();
}
}
}
}