我创建了一个属性文件
url=jdbc:mysql://localhost:3306/web13?useSSL=false&serverTimezone=UTC
username=root
password=root
我创建了一个连接池
private static DataSource dataSource;
static {
try {
//load properties file
InputStream is = DBCPUtils.class.getClassLoader().getResourceAsStream("db.properties");
//load input stream
Properties props = new Properties();
props.load(is);
//create data source
dataSource = BasicDataSourceFactory.createDataSource(props);
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
然后我遇到了问题。我搜索了一些查询器,他们说驱动程序需要像Class.forName(com.mysql.jdbc.Driver)一样进行注册。但是我的驱动程序版本似乎可以自行注册,因此该解决方案无法正常工作。
错误:
2018年10月2日上午9:46:09 org.apache.catalina.core.StandardContext 重新加载信息:名称为[/ WEB13]的重新加载上下文已完成
java.sql.SQLException:无法为创建类“”的JDBC驱动程序 连接网址 'jdbc:mysql:// localhost:3306 / web13?useSSL = false&serverTimezone = UTC' 在 org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2224) 在 org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2104) 在 org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1563) 在 org.apache.commons.dbutils.AbstractQueryRunner.prepareConnection(AbstractQueryRunner.java:319) 在org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:327) 在com.itheima.login.LoginServlet.doGet(LoginServlet.java:36)处 javax.servlet.http.HttpServlet.service(HttpServlet.java:634)在 javax.servlet.http.HttpServlet.service(HttpServlet.java:741)在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:770) 在 org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1415) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) 在 org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) 在java.lang.Thread.run(Thread.java:748)造成原因: java.sql.SQLException:在以下位置没有合适的驱动程序 java.sql.DriverManager.getDriver(DriverManager.java:315)在 org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2209) ...还有29个
答案 0 :(得分:0)
@Ziyan Zhu
您在db.properties
中添加了错误的网址:
url类似于jdbc:mysql://localhost:3306/web13
,其中web13是您的数据库名称。
此外,您的连接池中缺少某些方法,如here
所述import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
public class DBCPUtils {
private static DataSource dataSource;
static {
try {
// 1.Load the properties file input stream
InputStream is = DBCPUtils.class.getClassLoader().getResourceAsStream("db.properties");
// 2.Load the input stream
Properties props = new Properties();
props.load(is);
// 3.create data source
dataSource = BasicDataSourceFactory.createDataSource(props);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static DataSource getDataSource() {
return dataSource;
}
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
答案 1 :(得分:0)
您的属性文件缺少属性,这意味着DBCP无法创建/初始化驱动程序。
您需要添加
driverClassName = org.mysql.jdbc.Driver
答案 2 :(得分:-1)
我刚刚遇到了同样的问题,但我正在使用 glassfish。如果将来有人在尝试在 glassfish 服务器中建立数据库连接时遇到此问题,解决方案是将 java mysql connector
添加到 glassfish 服务器,那么您的问题就解决了。
转到.../glassfish-installation-folder/Glassfish[your-version]/glassfish/lib/here-paste-your-mysql-connector-driver.jar< /em>
这是我的荣幸。 :)