GVKun编程网logo

如何在不遇到NoSuchTableException的情况下使用具有普通JDBC和HSQLDB的DBUnit进行测试?

8

这篇文章主要围绕如何在不遇到NoSuchTableException的情况下使用具有普通JDBC和HSQLDB的DBUnit进行测试?展开,旨在为您提供一份详细的参考资料。我们将全面介绍如何在不遇到N

这篇文章主要围绕如何在不遇到NoSuchTableException的情况下使用具有普通JDBC和HSQLDB的DBUnit进行测试?展开,旨在为您提供一份详细的参考资料。我们将全面介绍如何在不遇到NoSuchTableException的情况下使用具有普通JDBC和HSQLDB的DBUnit进行测试?,同时也会为您带来Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully rece...、Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: ..... this is incompatible with...、Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_...、com.mysql.jdbc.exceptions.jdbc4.CommunicationsExce的实用方法。

本文目录一览:

如何在不遇到NoSuchTableException的情况下使用具有普通JDBC和HSQLDB的DBUnit进行测试?

如何在不遇到NoSuchTableException的情况下使用具有普通JDBC和HSQLDB的DBUnit进行测试?

我正在尝试将DBUnit与普通的JDBC和HSQLDB结合使用,并且无法完全正常工作-即使我之前将DBUnit与Hibernate结合使用也取得了很大的成功。这是代码:

import java.sql.PreparedStatement;import org.dbunit.IDatabaseTester;import org.dbunit.JdbcDatabaseTester;import org.dbunit.dataset.IDataSet;import org.dbunit.dataset.xml.XmlDataSet;import org.junit.Test;public class DummyTest {    @Test    public void testDBUnit() throws Exception {        IDatabaseTester databaseTester = new JdbcDatabaseTester("org.hsqldb.jdbcDriver", "jdbc:hsqldb:mem", "sa", "");        IDataSet dataSet = new XmlDataSet(getClass().getResourceAsStream("dataset.xml"));        databaseTester.setDataSet(dataSet);        databaseTester.onSetup();        PreparedStatement pst = databaseTester.getConnection().getConnection().prepareStatement("select * from mytable");    }}

这是有问题的dataset.xml:

<dataset>    <table name="mytable">        <column>itemnumber</column>        <column>something</column>        <column>other</column>        <row>            <value>1234abcd</value>            <value>something1</value>            <value>else1</value>        </row>    </table></dataset>

这个测试给了我一个NoSuchTableException:

org.dbunit.dataset.NoSuchTableException: mytable    at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:282)    at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:109)    at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)    at org.dbunit.AbstractDatabaseTester.executeOperation(AbstractDatabaseTester.java:190)    at org.dbunit.AbstractDatabaseTester.onSetup(AbstractDatabaseTester.java:103)    at DummyTest.testDBUnit(DummyTest.java:18)

如果删除databaseTester.onSetup()行,则会得到一个SQLException:

java.sql.SQLException: Table not found in statement [select * from mytable]    at org.hsqldb.jdbc.Util.throwError(Unknown Source)    at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source)    at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)    at DummyTest.testDBUnit(DummyTest.java:19)

数据集本身正在运行,因为我可以像应该那样访问它:

ITable table = dataSet.getTable("mytable");String firstCol = table.getTableMetaData().getColumns()[0];String tName = table.getTableMetaData().getTableName();

我在这里想念什么?

编辑:正如@mlk指出的那样,DBUnit不会创建表。如果我在添加数据集之前插入以下内容,则一切会顺利进行:

PreparedStatement pp = databaseTester.getConnection().getConnection().prepareStatement(
“create table mytable ( itemnumber varchar(255) NOT NULL primary key, “
+ ” something varchar(255), other varchar(255) )”);
pp.executeUpdate();

答案1

小编典典

dbUnit不创建表。XML文件中提供的有限信息也无法解决。我相信可以创建休眠表。

这是我停止使用内存数据库,而是让DBA为每个开发人员提供自己的数据库的原因之一。然后,每个开发人员都使用相同的脚本来使数据库保持最新状态,这些脚本随后将实时运行。这增加了少量的开销(所有开发人员都需要保持其数据库为最新状态),但是这意味着您无需为每次运行而构建数据库,并且可以确保查询在测试中实时运行。

第二个原因是速度。我发现在内存数据库中创建内存比简单地连接到现有数据库要花费更长的时间。

第三个原因是拆卸是无损的(启动擦除数据库)。这意味着我可以在数据库上运行被测SQL,以帮助弄清测试失败的原因。

更新日期:20171115

从那以后,我转向使用 JUnit规则来启动数据库服务器的真实实例,并使用诸如FlywayDB之类的东西来构建数据库(并使用与测试中相同的脚本,由应用程序负责构建数据库)。它比使用预建数据库要慢得多。但是,使用定义明确的微服务(从而减少需要测试的功能)并且非常严格地限制哪些测试可以获取数据库,您可以迁移此类问题并获得始终与实时匹配的本地数据库的优势。

确实,这意味着测试撕毁总是具有破坏性的,但是可以通过放置适当的断点来解决问题。

Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully rece...

Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully rece...

今天访问已经架上服务器的网站,报错:

Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 
The last packet successfully received from the server was 78,050,512 milliseconds ago.
The last packet sent successfully to the server was 78,050,512 milliseconds ago.
is longer than the server configured value of ''wait_timeout''.
You should consider either expiring and/or testing connection validity before use in your application,
increasing the server configured values for client timeouts,
or using the Connector/J connection property ''autoReconnect=true'' to avoid this problem.
翻译过来:上次访问时,发送的包已经多少多少秒了,比设置的‘wait_timeout’要长,建议修改 autoReconnect=true。

解决方案:
修改或添加三个参数:
将testConnectionOnCheckout 设为 false
将testConnectionOnCheckin 设为 true
将idleConnectionTestPeriod 设为 30,这个数字要根据项目情况设定,比8小时小就好

具体原理参考:https://blog.csdn.net/frankcheng5143/article/details/50589264

Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: ..... this is incompatible with...

Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: ..... this is incompatible with...

一、异常信息

org.springframework.jdbc.BadSqlGrammarException: 
### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ''daotable.he_store_file.file_url'' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
### The error may exist in com/zbq/springbootbase/mysql/HeStoreFileDAO.java (best guess)
### The error may involve com.zbq.springbootbase.mysql.HeStoreFileDAO.findFileInfoByFileTypeAndStoreIdList-Inline
### The error occurred while setting parameters
### SQL: SELECT store_id, file_url FROM he_store_file WHERE (1=1)  AND (store_id in (8310596))  AND (file_type = ? ) GROUP BY store_id
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ''daotable.he_store_file.file_url'' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ''daotable.he_store_file.file_url'' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
    at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:93) ~[spring-jdbc-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) ~[spring-jdbc-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73) ~[mybatis-spring-1.3.2.jar:1.3.2]
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446) ~[mybatis-spring-1.3.2.jar:1.3.2]
    at com.sun.proxy.$Proxy85.selectList(Unknown Source) ~[na:na]
    at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230) ~[mybatis-spring-1.3.2.jar:1.3.2]
    at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:139) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:76) ~[mybatis-3.4.6.jar:3.4.6]
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59) ~[mybatis-3.4.6.jar:3.4.6]
    at com.sun.proxy.$Proxy94.findFileInfoByFileTypeAndStoreIdList(Unknown Source) ~[na:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_112]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_112]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_112]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_112]

 

二、分析原因

  ONLY_FULL_GROUP_BY的意思是:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,也就是说查出来的列必须在group by后面出现否则就会报错,或者这个字段出现在聚合函数里面。

命令行执行:
SELECT @@SESSION.sql_mode;
发现:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
第一项默认开启ONLY_FULL_GROUP_BY。

 
三、解决方案
1.临时解决方案
关掉ONLY_FULL_GROUP_BY!
set @@GLOBAL.sql_mode='''';
set sql_mode =''STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'';

 

2.永久解决方案

修改my.ini 配置(如果你们mysql 没有这个文件,就把my-default.ini 改成my.ini)

在 [mysqld]和[mysql]下添加
 sql_mode =''STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'';

 

Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_...

Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_...

MyBatis 中,出现 Unknown column 的提示是 mapper.xml 中的数据库字段写错了。

错误示例:

XxMapper.xml 中

<sql id="KnowlegeSectionAndPart_Column_List">
    s.knowledge_section_id, s.create_time, s.update_time, s.section_name,
    s.repository_id, s.bool_close, p.knowlege_part_id, p.create_time,
    p.update_time, p.repository_id, p.section_id, p.bool_close, p.part_name
    </sql>
<!--    通过章id查询章及其节-->
    <select id="getKnowlegeSectionWithPartDOById" parameterType="java.lang.Long"
            resultMap="KnowlegeSectionWithPartResultMap">
        select
        <include refid="KnowlegeSectionAndPart_Column_List"/>
        from knowlege_section s
        where s.knowledge_section_id = #{sid,jdbcType=BIGINT}
    </select>

报错:

  1 ### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_part_id'' in ''field list''
  2 ### The error may exist in file [D:\IDEACode\YiZhiDu\ChangJiangRiver\target\chang_jiang_river\WEB-INF\classes\com\hzy\mapper\KnowlegeSectionDOMapper.xml]
  3 ### The error may involve com.hzy.dao.KnowlegeSectionDOMapper.getKnowlegeSectionWithPartDOById-Inline
  4 ### The error occurred while setting parameters
  5 ### SQL: select               s.knowledge_section_id, s.create_time, s.update_time, s.section_name, s.repository_id, s.bool_close,p.knowlege_part_id, p.create_time, p.update_time, p.repository_id, p.section_id, p.bool_close, p.part_name               from knowlege_section s         where s.knowledge_section_id = ?
  6 ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_part_id'' in ''field list''
  7 ; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_part_id'' in ''field list''] with root cause
  8     com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_part_id'' in ''field list''
  9         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 10         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
 11         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
 12         at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
 13         at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
 14         at com.mysql.jdbc.Util.getInstance(Util.java:387)
 15         at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939)
 16         at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
 17         at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
 18         at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)
 19         at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)
 20         at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551)
 21         at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
 22         at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1192)
 23         at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:67)
 24         at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:59)
 25         at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:73)
 26         at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:60)
 27         at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267)
 28         at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:137)
 29         at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:96)
 30         at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:143)
 31         at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:60)
 32         at com.sun.proxy.$Proxy67.query(Unknown Source)
 33         at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108)
 34         at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102)
 35         at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:66)
 36         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 37         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 38         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 39         at java.lang.reflect.Method.invoke(Method.java:498)
 40         at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:386)
 41         at com.sun.proxy.$Proxy24.selectOne(Unknown Source)
 42         at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:165)
 43         at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:68)
 44         at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
 45         at com.sun.proxy.$Proxy25.getKnowlegeSectionWithPartDOById(Unknown Source)
 46         at com.hzy.knowlege.impl.KnowlegeServiceImpl.getKnowlegeSectionWithPartDOById(KnowlegeServiceImpl.java:100)
 47         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 48         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 49         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 50         at java.lang.reflect.Method.invoke(Method.java:498)
 51         at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
 52         at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
 53         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
 54         at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
 55         at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
 56         at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
 57         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
 58         at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
 59         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
 60         at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
 61         at com.sun.proxy.$Proxy28.getKnowlegeSectionWithPartDOById(Unknown Source)
 62         at com.hzy.controller.KnowlegeController.getKnowlegeSectionWithPartById(KnowlegeController.java:122)
 63         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 64         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 65         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 66         at java.lang.reflect.Method.invoke(Method.java:498)
 67         at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
 68         at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
 69         at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
 70         at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776)
 71         at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
 72         at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
 73         at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
 74         at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
 75         at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
 76         at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
 77         at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
 78         at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
 79         at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
 80         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
 81         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 82         at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
 83         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 84         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 85         at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87)
 86         at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 87         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 88         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 89         at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
 90         at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 91         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 92         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 93         at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
 94         at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 95         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
 96         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
 97         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
 98         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
 99         at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
100         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
101         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
102         at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
103         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
104         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
105         at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
106         at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
107         at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853)
108         at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587)
109         at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
110         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
111         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
112         at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
113         at java.lang.Thread.run(Thread.java:745)
View Code

修改(添加 knowlege_part p):

<!--    通过章id查询章及其节-->
    <select id="getKnowlegeSectionWithPartDOById" parameterType="java.lang.Long"
            resultMap="KnowlegeSectionWithPartResultMap">
        select
        <include refid="KnowlegeSectionAndPart_Column_List"/>
        from knowlege_section s, knowlege_part p
        where s.knowledge_section_id = #{sid,jdbcType=BIGINT}
    </select>

回调成功:

总结:

所有被查询的字段,如果数据库表有别名,那么对应的字段也必须有别名,反之亦然。

com.mysql.jdbc.exceptions.jdbc4.CommunicationsExce

com.mysql.jdbc.exceptions.jdbc4.CommunicationsExce


  • 问题:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

 

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

  • 网上解决办法:

问题是由mysql5数据库的配置引起的。mysql5将其连接的等待时间(wait_timeout)缺省为8小时。在其客户程序中可以这样来查看其值: 

 

mysql﹥ 

 

mysql show global variables like ''wait_timeout''; 

 

+---------------+---------+ 

 

| Variable_name | Value | 

 

+---------------+---------+ 

 

| wait_timeout | 28800 | 

 

+---------------+---------+ 

 

1 row in set (0.00 sec) 

 

 

28800 seconds,也就是8小时。 

 

如果在wait_timeout秒期间内,数据库连接(java.sql.Connection)一直处于等待状态,mysql5就将该连接关闭。这时, 你的Java应用的连接池仍然合法地持有该连接的引用。当用该连接来进行数据库操作时,就碰到上述错误。这解释了为什么我的程序第二天不能登录 的问题。 

 

你可能会想到在tomcat的数据源配置中有没有办法解决?的确,在jdbc连接url的配置中,你可以附上“autoReconnect=true”,但这仅对mysql5以前的版本起作用。增加“validation query”似乎也无济于事。 

 

本人觉得最简单的办法,就是对症下药:既然问题是由mysql5的全局变量wait_timeout的缺省值太小引起的,我们将其改大就好了。 

 

查看mysql5的手册,发现对wait_timeout的最大值分别是24/365(windows/linux)。以windows为 例,假设我们要将其设为21天,我们只要修改mysql5的配置文件“my.ini(mysql5 installation dir),增加一行:wait_timeout=1814400

 

需要重新启动mysql5。 

 

linux系统配置文件:/etc/my.cnf 

测试显示问题解决了。


另外:

mysql> show variables like ''%timeout%'';

+----------------------------+-------+

| Variable_name              | Value |

+----------------------------+-------+

| connect_timeout            | 10    |

| delayed_insert_timeout     | 300   |

| innodb_lock_wait_timeout   | 50    |

| innodb_rollback_on_timeout | OFF   |

| interactive_timeout        | 28800 |

| net_read_timeout           | 30    |

| net_write_timeout          | 60    |

| slave_net_timeout          | 3600  |

| table_lock_wait_timeout    | 50    |

| wait_timeout               | 28800 |

+----------------------------+-------+

10 rows in set (0.00 sec)

 

 

  • 这样配置后,我的问题没有解决,通过搜索发现设备的防火墙需要打开,即

Service iptables stop

解决问题啦:)

关于如何在不遇到NoSuchTableException的情况下使用具有普通JDBC和HSQLDB的DBUnit进行测试?的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully rece...、Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: ..... this is incompatible with...、Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ''p.knowlege_...、com.mysql.jdbc.exceptions.jdbc4.CommunicationsExce的相关知识,请在本站寻找。

本文标签: