Java 无法创建PoolableConnectionFactory(无法创建到数据库服务器的连接)
我第一次尝试创建一个J2EE应用程序 我在MySQL上创建了数据库,现在我想用我的应用程序获取屏幕上的所有数据 问题是:当我想连接MySQL数据库上的应用程序时,我有一个错误:Java 无法创建PoolableConnectionFactory(无法创建到数据库服务器的连接),java,mysql,eclipse,servlets,jdbc,Java,Mysql,Eclipse,Servlets,Jdbc,我第一次尝试创建一个J2EE应用程序 我在MySQL上创建了数据库,现在我想用我的应用程序获取屏幕上的所有数据 问题是:当我想连接MySQL数据库上的应用程序时,我有一个错误: java.sql.SQLException: Cannot create PoolableConnectionFactory (Could not create connection to database server. Attempted reconnect 3 times. Giving up.) 我正在使用:
java.sql.SQLException: Cannot create PoolableConnectionFactory (Could not create connection to database server. Attempted reconnect 3 times. Giving up.)
我正在使用:
- VirtualBox虚拟机5.0
- 视窗7
- 带MySQL的EasyHP(5.7.11 x86)
- JDBC:MySQL连接器5.1.31
- 蚀
我的“上下文”(在conf/catalina/localhost/ProjetServlet.xml中):
- 我可以用CMD连接MySQL服务器,没有问题李>
- JDBC文件添加到c:/server/lib中
package-mesServlets;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.sql.Connection;
导入java.sql.ResultSet;
导入java.sql.Statement;
导入javax.naming.Context;
导入javax.naming.InitialContext;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入javax.sql.DataSource;
公共类AffichePersonne扩展了HttpServlet{
连接BD;
数据源ds;
受保护的无效数据集(HttpServletRequest-req、HttpServletResponse-resp)
抛出ServletException、IOException{
试一试{
BD=ds.getConnection();
语句s=BD.createStatement();
结果集r=s.executeQuery(“从人员中选择*);
PrintWriter out=null;
分别为setContentType(“文本/html”);
out=resp.getWriter();
out.println(“”);
out.println(“测试servlet”);
out.println(“”);
out.println(“餐桌人员内容
”;
out.println(“”);
out.println(“”);
out.println(“Nom”);
out.println(“Prénom”);
out.println(“”);
while(r.next()){
out.println(“”);
out.println(“”);
out.println(r.getString(“nom”);
out.println(“”);
out.println(“”);
out.println(r.getString(“prenom”);
out.println(“”);
out.println(“”);
}
out.println(“”);
out.println(“”);
out.println(“”);
r、 close();
s、 close();
BD.close();
s=零;
r=null;
}catch(java.sql.SQLException ex){
System.out.println(“Erreur d'exécution de la requuête SQL\n”+ex);
}
}
public void init()引发ServletException{
试一试{
系统输出打印文本(“内容描述”);
Context initCtx=new InitialContext();
System.out.println(“环境查找”);
Context-envCtx=(Context)initCtx.lookup(“java:comp/env”);
System.out.println(“查找基本测试”);
ds=(数据源)envCtx.lookup(“base_test”);
//System.out.println(“数据源chargée”);
}
捕获(异常er){
系统输出打印(“内容计费错误”+er);
} }
}
“映射”(web.xml):
Mes servlet
普莱米�resservlets
ServletHello
梅瑟夫莱特
德赛酒店
ServletHello
/你好
ServletBD
梅瑟夫莱特酒店
Servlet d'essai de la connection BD
ServletBD
/essaibd
非常感谢您的帮助:)MySQL是否在默认端口(3306)上运行?它是否与servlet运行在同一台服务器上?您提到了虚拟机,所以我怀疑您在VM中创建了MySQL DB,但您正在主机上从Eclipse运行servlet,反之亦然。Eclipse和MySQL在我的VM上。MySQL在3306上,Tomcat在8080上。这里:
url=“jdbc:mysql://127.0.0.1/nouvellebd?autoReconnect=true“
我试图通过更改127.0.0.1
localhost:3306
和127.0.0.1:3306
,没有变化。
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<!-- JNDI de la base nouvellebd -->
<Resource name="base_test"
type="javax.sql.DataSource"
password=""
driverClassName="com.mysql.jdbc.Driver"
maxIdle="2"
maxWait="500"
username="root"
url="jdbc:mysql://127.0.0.1/nouvellebd?autoReconnect=true"
maxActive="500"
/>
<Context path="/ProjetServlet"
reloadable="true"
docBase="c:\MonEspace\ProjetServlet"
workDir="c:\MonEspace\ProjetServlet\work" >
<ResourceLink
name="base_test"
global="base_test"
type="javax.sql.DataSource"/>
</Context>
package mesServlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
public class AffichePersonne extends HttpServlet {
Connection BD;
DataSource ds;
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try {
BD=ds.getConnection();
Statement s = BD.createStatement();
ResultSet r = s.executeQuery("select * from personne");
PrintWriter out=null;
resp.setContentType("text/html");
out = resp.getWriter();
out.println("<html>");
out.println("<head><title> Test servlet </title></head>");
out.println("<body>");
out.println("Contenu de la table personne <BR>");
out.println("<table>");
out.println("<TR>");
out.println("<TD>Nom</TD>");
out.println("<TD>Prénom</TD>");
out.println("</TR>");
while (r.next()) {
out.println("<TR>");
out.println("<TD>");
out.println(r.getString("nom"));
out.println("</TD>");
out.println("<TD>");
out.println(r.getString("prenom"));
out.println("</TD>");
out.println("</TR>");
}
out.println("</table>");
out.println("</body>");
out.println("</html>");
r.close();
s.close();
BD.close();
s = null;
r = null;
} catch (java.sql.SQLException ex) {
System.out.println("Erreur d'exécution de la requête SQL \n"+ex);
}
}
public void init() throws ServletException {
try {
System.out.println("Récupération du contexte");
Context initCtx = new InitialContext();
System.out.println("lookup de env");
Context envCtx = (Context) initCtx.lookup("java:comp/env");
System.out.println("lookup de base_test");
ds=(DataSource) envCtx.lookup("base_test");
//System.out.println("Datasource chargée");
}
catch(Exception er) {
System.out.println("Erreur de chargement du contexte " + er);
} }
}
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Mes servlets</display-name>
<description>
Premi�res servlets
</description>
<servlet>
<servlet-name>ServletHello</servlet-name>
<servlet-class>mesServlets.HelloServlet</servlet-class>
<description>Servlet d'essai</description>
</servlet>
<servlet-mapping>
<servlet-name>ServletHello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ServletBD</servlet-name>
<servlet-class>mesServlets.AffichePersonne</servlet-class>
<description>Servlet d'essai de la connection BD</description>
</servlet>
<servlet-mapping>
<servlet-name>ServletBD</servlet-name>
<url-pattern>/essaibd</url-pattern>
</servlet-mapping>
</web-app>