错误应该是数据库链接问题 但是不知道哪里错了 麻烦老师看看

错误应该是数据库链接问题 但是不知道哪里错了 麻烦老师看看

userdao

package com.imooc.dao;

import com.imooc.Users.Users;
import com.imooc.utlis.SqlsessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;


public class UsersDao {
   private SqlSession sqlSession = SqlsessionFactoryUtils.getsqlsession ().openSession ();
   private List <Users> list;

   public List <Users> findAll() {
      try {
         list = sqlSession.selectList ( "findAll" );
         System.out.println (list);
      } catch (Exception e) {
         e.printStackTrace ();
      } finally {
         sqlSession.close ();
      }

      return list;

   }
}
SqlsessionFactoryUtils
package com.imooc.utlis;


import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class SqlsessionFactoryUtils {
   private static String RESOURCES = "mybatis-config.xml";
   private static SqlSessionFactory sqlSessionFactory;
   private static ThreadLocal <SqlSession> threadLocal = new ThreadLocal ();


   public static void initsqlSessionfactory() {

      try {

         InputStream is = Resources.getResourceAsStream ( RESOURCES );

        sqlSessionFactory = new SqlSessionFactoryBuilder ().build ( is );

      } catch (IOException e) {
         e.printStackTrace ();
      }

   }

   /*获取sqlSession 的链接方法*/
   public static  SqlSessionFactory getsqlsession() {

      return sqlSessionFactory;
   }

   public static void cleak() {
      SqlSession sqlSession = threadLocal.get ();
      if (sqlSession != null) {
         sqlSession.close ();
      }
   }
}
UsersServlet

package com.imooc.Servlet;

import com.imooc.dao.UsersDao;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

import com.imooc.Users.Users;

@WebServlet("/index")
public class UsersServlet extends HttpServlet {
   private UsersDao usersDao = new UsersDao ();

   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      List <Users> list = usersDao.findAll ();
      request.setAttribute ( "list", list );
      request.getRequestDispatcher ( "index.jsp" ).forward ( request, response );
   }

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      doPost ( request, response );
   }
}
users-mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.imooc.Users.Users">
<select id="findAll" resultType="com.imooc.Users.Users">
    select  * from  users
</select>
</mapper>

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db/db.properties"></properties>
<environments default="development">
<environment id="development">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
    </dataSource>
</environment>

</environments>

<mappers>
<mapper resource="mapping/users-mapper.xml"/>
</mappers>
        </configuration>

db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/users?useUnicode=true&autoReconnect=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username=root
password=root
八月 29, 2018 11:49:58 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory F:\Tomcat\apache-tomcat-7.0.90\webapps\manager
八月 29, 2018 11:49:58 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory F:\Tomcat\apache-tomcat-7.0.90\webapps\manager has finished in 84 ms
org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
### The error may exist in mapping/users-mapper.xml
### The error may involve com.imooc.Users.Users.findAll
### The error occurred while executing a query
### Cause: java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:136)
	at com.imooc.dao.UsersDao.findAll(UsersDao.java:16)
	at com.imooc.Servlet.UsersServlet.doPost(UsersServlet.java:20)
	at com.imooc.Servlet.UsersServlet.doGet(UsersServlet.java:26)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1136)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2555)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2544)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
	at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:902)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:827)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:207)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:208)
	at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:201)
	at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:196)
	at org.apache.ibatis.datasource.unpooled.UnpooledDataSource.getConnection(UnpooledDataSource.java:93)
	at org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:404)
	at org.apache.ibatis.datasource.pooled.PooledDataSource.getConnection(PooledDataSource.java:90)
	at org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:139)
	at org.apache.ibatis.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:61)
	at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:338)
	at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:84)
	at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:326)
	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
	... 28 more
Caused by: com.mysql.cj.exceptions.CJException: Access denied for user 'root'@'localhost' (using password: YES)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:129)
	at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:810)
	at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:735)
	at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:703)
	at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:132)
	at com.mysql.cj.protocol.a.NativeAuthenticationProvider.proceedHandshakeWithPluggableAuthentication(NativeAuthenticationProvider.java:557)
	at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:220)
	at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1443)
	at com.mysql.cj.NativeSession.connect(NativeSession.java:165)
	at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:846)
	... 49 more


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
chrismorgen 2018-08-29 17:28:56

如下图所示,建议你在getsqlsession方法中调用initsqlSessionfactory()方法试试,祝学习愉快~

http://img1.sycdn.imooc.com//climg/5b86672100011ce703820084.jpg

提问者 孤zero 2018-08-29 15:56:30

http://img1.sycdn.imooc.com//climg/5b865178000116c309680323.jpg

package com.imooc.dao;

import com.imooc.Users.Users;
import com.imooc.utlis.SqlsessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;


public class UsersDao {
   private static SqlSession sqlSession = SqlsessionFactoryUtils.getsqlsession ().openSession ();
   private List <Users> list;

   public List <Users> findAll() {
      try {
        list = sqlSession.selectList ( "findAll" );

         System.out.println ( list );
      } catch (Exception e) {
         e.printStackTrace ();
      } finally {
         sqlSession.close ();
      }
      return list;


   }
}


chrismorgen 2018-08-29 15:38:14

根据报错提示来看,是你 com.imooc.dao.UsersDao.findAll(UsersDao.java:16)第16行代码出错,建议你根据错误提示对照老师的代码核对一下,祝学习愉快~

http://img1.sycdn.imooc.com//climg/5b864cba0001b81306430070.jpg

  • 提问者 孤zero #1
    跟视频中老师的代码是一样得 啊!所以我是觉得 SqlSession sqlSession = SqlsessionFactoryUtils.getsqlsession ().openSession (); 这句话错误!
    2018-08-29 15:58:51
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师