错误应该是数据库链接问题 但是不知道哪里错了 麻烦老师看看
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
收起
正在回答 回答被采纳积分+1
3回答
chrismorgen
2018-08-29 17:28:56
如下图所示,建议你在getsqlsession方法中调用initsqlSessionfactory()方法试试,祝学习愉快~
孤zero
2018-08-29 15:56:30
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行代码出错,建议你根据错误提示对照老师的代码核对一下,祝学习愉快~
Java数据库开发与实战应用2018版
- 参与学习 人
- 提交作业 277 份
- 解答问题 4297 个
Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星