Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法创建PoolableConnectionFactory(无法创建到数据库服务器的连接)_Java_Mysql_Eclipse_Servlets_Jdbc - Fatal编程技术网

Java 无法创建PoolableConnectionFactory(无法创建到数据库服务器的连接)

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.) 我正在使用:

我第一次尝试创建一个J2EE应用程序

我在MySQL上创建了数据库,现在我想用我的应用程序获取屏幕上的所有数据

问题是:当我想连接MySQL数据库上的应用程序时,我有一个错误:

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
server.xml(c:/serveur/tomcat/conf/)


我的“上下文”(在conf/catalina/localhost/ProjetServlet.xml中):


  • 我可以用CMD连接MySQL服务器,没有问题
  • JDBC文件添加到c:/server/lib中
我的代码(AffichePersonne.java):

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>