Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
jOOQ-从DataAccessException获取连接URL_Exception_Database Connection_Jooq - Fatal编程技术网

jOOQ-从DataAccessException获取连接URL

jOOQ-从DataAccessException获取连接URL,exception,database-connection,jooq,Exception,Database Connection,Jooq,如果jOOQ无法连接到数据库,对其执行SQL将导致DataAccessException org.jooq.exception.DataAccessException: SQL [select count(*) from (select * from actor) as `alias_4914265`]; (conn=1) unexpected end of stream, read 0 bytes from 4 (socket was closed by server) at

如果jOOQ无法连接到数据库,对其执行SQL将导致
DataAccessException

org.jooq.exception.DataAccessException: SQL [select count(*) from (select * from actor) as `alias_4914265`]; (conn=1) unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
        at org.jooq_3.12.3.MARIADB.debug(Unknown Source)
        at org.jooq.impl.Tools.translate(Tools.java:2717)
        at org.jooq.impl.DefaultExecuteContext.sqlException(DefaultExecuteContext.java:755)
        at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:382)
        at org.jooq.impl.AbstractResultQuery.fetchLazy(AbstractResultQuery.java:501)
        at org.jooq.impl.AbstractResultQuery.fetchLazy(AbstractResultQuery.java:470)
        at org.jooq.impl.AbstractResultQuery.fetchLazyNonAutoClosing(AbstractResultQuery.java:484)
        at org.jooq.impl.AbstractResultQuery.fetchOne(AbstractResultQuery.java:653)
        at org.jooq.impl.AbstractResultQuery.fetchOne(AbstractResultQuery.java:605)
        at org.jooq.impl.AbstractResultQuery.fetchOne(AbstractResultQuery.java:611)
        at org.jooq.impl.SelectImpl.fetchOne(SelectImpl.java:2847)
        at com.datoris.base.AbstractBaseTypeImpl.executeReport(AbstractBaseTypeImpl.java:134)
        at com.datoris.service.ReportService.executeReport(ReportService.java:508)
        at com.datoris.verticle.ReportVerticle.lambda$completeStartup$0(ReportVerticle.java:29)
        at io.vertx.core.eventbus.impl.HandlerRegistration.deliver(HandlerRegistration.java:261)
        at io.vertx.core.eventbus.impl.HandlerRegistration.handle(HandlerRegistration.java:239)
        at io.vertx.core.eventbus.impl.EventBusImpl$InboundDeliveryContext.next(EventBusImpl.java:565)
        at io.vertx.core.eventbus.impl.EventBusImpl.lambda$deliverToHandler$5(EventBusImpl.java:524)
        at io.vertx.core.impl.ContextImpl.executeTask(ContextImpl.java:320)
        at io.vertx.core.impl.WorkerContext.lambda$wrapTask$0(WorkerContext.java:34)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLNonTransientConnectionException: (conn=1) unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.get(ExceptionMapper.java:240)
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.getException(ExceptionMapper.java:171)
        at org.mariadb.jdbc.MariaDbStatement.executeExceptionEpilogue(MariaDbStatement.java:248)
        at org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:230)
        at org.mariadb.jdbc.ClientSidePreparedStatement.execute(ClientSidePreparedStatement.java:157)
        at org.jooq.tools.jdbc.DefaultPreparedStatement.execute(DefaultPreparedStatement.java:209)
        at org.jooq.impl.Tools.executeStatementAndGetFirstResultSet(Tools.java:3928)
        at org.jooq.impl.AbstractResultQuery.execute(AbstractResultQuery.java:294)
        at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:368)
        ... 20 common frames omitted
Caused by: java.sql.SQLNonTransientConnectionException: unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.handleIoException(AbstractQueryProtocol.java:1925)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1437)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1415)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:289)
        at org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:221)
        ... 25 common frames omitted
Caused by: java.io.EOFException: unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
        at org.mariadb.jdbc.internal.io.input.StandardPacketInputStream.getPacketArray(StandardPacketInputStream.java:246)
        at org.mariadb.jdbc.internal.io.input.StandardPacketInputStream.getPacket(StandardPacketInputStream.java:215)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1435)
        ... 28 common frames omitted

是否有方法仅从该错误获取尝试查询的数据库/连接的url

编辑,添加更多上下文
我们使用
HashMap
及其
computeIfAbsent()
实现了一个简单的连接池 如果<代码> DSL。使用(URL)< /代码>不会引发异常,我们考虑建立连接,并将所得的<代码> DSLValue作为该映射中的值(URL为Key)。p> 假设池中有多个连接

我们在
DSLContext
上附加了一个
ExecuteListener
,并在其中捕获
DataAccessException
s。捕获时,我们使用以下命令验证连接:
executeContext.dsl().diagnosticsConnection().isValid(1)

如果连接无效,我们希望将其标记为无效,但找出它是哪一个的唯一方法是循环连接池映射,因为
executeContext.dsl().parsingConnection().getMetaData().getURL()
不再是选项

下面是一个堆栈跟踪示例。我们连接到的每个DB引擎都不同,但总是包装在
org.jooq.exception.DataAccessException

org.jooq.exception.DataAccessException: SQL [select count(*) from (select * from actor) as `alias_4914265`]; (conn=1) unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
        at org.jooq_3.12.3.MARIADB.debug(Unknown Source)
        at org.jooq.impl.Tools.translate(Tools.java:2717)
        at org.jooq.impl.DefaultExecuteContext.sqlException(DefaultExecuteContext.java:755)
        at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:382)
        at org.jooq.impl.AbstractResultQuery.fetchLazy(AbstractResultQuery.java:501)
        at org.jooq.impl.AbstractResultQuery.fetchLazy(AbstractResultQuery.java:470)
        at org.jooq.impl.AbstractResultQuery.fetchLazyNonAutoClosing(AbstractResultQuery.java:484)
        at org.jooq.impl.AbstractResultQuery.fetchOne(AbstractResultQuery.java:653)
        at org.jooq.impl.AbstractResultQuery.fetchOne(AbstractResultQuery.java:605)
        at org.jooq.impl.AbstractResultQuery.fetchOne(AbstractResultQuery.java:611)
        at org.jooq.impl.SelectImpl.fetchOne(SelectImpl.java:2847)
        at com.datoris.base.AbstractBaseTypeImpl.executeReport(AbstractBaseTypeImpl.java:134)
        at com.datoris.service.ReportService.executeReport(ReportService.java:508)
        at com.datoris.verticle.ReportVerticle.lambda$completeStartup$0(ReportVerticle.java:29)
        at io.vertx.core.eventbus.impl.HandlerRegistration.deliver(HandlerRegistration.java:261)
        at io.vertx.core.eventbus.impl.HandlerRegistration.handle(HandlerRegistration.java:239)
        at io.vertx.core.eventbus.impl.EventBusImpl$InboundDeliveryContext.next(EventBusImpl.java:565)
        at io.vertx.core.eventbus.impl.EventBusImpl.lambda$deliverToHandler$5(EventBusImpl.java:524)
        at io.vertx.core.impl.ContextImpl.executeTask(ContextImpl.java:320)
        at io.vertx.core.impl.WorkerContext.lambda$wrapTask$0(WorkerContext.java:34)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLNonTransientConnectionException: (conn=1) unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.get(ExceptionMapper.java:240)
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.getException(ExceptionMapper.java:171)
        at org.mariadb.jdbc.MariaDbStatement.executeExceptionEpilogue(MariaDbStatement.java:248)
        at org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:230)
        at org.mariadb.jdbc.ClientSidePreparedStatement.execute(ClientSidePreparedStatement.java:157)
        at org.jooq.tools.jdbc.DefaultPreparedStatement.execute(DefaultPreparedStatement.java:209)
        at org.jooq.impl.Tools.executeStatementAndGetFirstResultSet(Tools.java:3928)
        at org.jooq.impl.AbstractResultQuery.execute(AbstractResultQuery.java:294)
        at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:368)
        ... 20 common frames omitted
Caused by: java.sql.SQLNonTransientConnectionException: unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.handleIoException(AbstractQueryProtocol.java:1925)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1437)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1415)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:289)
        at org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:221)
        ... 25 common frames omitted
Caused by: java.io.EOFException: unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
        at org.mariadb.jdbc.internal.io.input.StandardPacketInputStream.getPacketArray(StandardPacketInputStream.java:246)
        at org.mariadb.jdbc.internal.io.input.StandardPacketInputStream.getPacket(StandardPacketInputStream.java:215)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1435)
        ... 28 common frames omitted


通常,jOOQ不“连接到数据库”,而是使用您提供给它的预先存在的连接或数据源。所以,要调试它,您必须查看连接池库。您如何连接到数据库?你能发布你得到的完整堆栈跟踪吗?谢谢你对@LukasEder的兴趣。我已经用更多的信息更新了这个问题。