当我尝试使用 JOOQ 的静态类型字段运行一些 SQL 时,数据库连接关闭我正在将 JOOQ https://www.jooq.org/用于类型安全的 SQL,但由于某种原因连接关闭,我不知道为什么。我有一个 psql 9.6 数据库,我启用了所有日志记录,但连接在运行 JOOQ 生成的查询之前关闭,异常显示在下方。var blockRecord = db.execute(sql -> sql.select(ATTENDANCE.BLOCK_TIME.BLOCK_ID).from(ATTENDANCE.BLOCK_TIME) .where(ATTENDANCE.BLOCK_TIME.CLIENT_ID.eq(clientId)) .and(ATTENDANCE.BLOCK_TIME.START_TIME.eq(startTime))) .and(ATTENDANCE.BLOCK_TIME.SCHEDULE_ID.eq(scheduleId)).fetchOne().value1();但是,当我以这种方式运行 sql 时,连接保持打开状态并且没有出现任何问题: //Injection vulnerable String query = "SELECT block_id FROM attendance.block_time " + "WHERE start_time = cast ( '" + startTime + "' as timestamp) " + " and client_id = '" + clientId + "' and schedule_id = '" + scheduleId + "'"; var record = db.execute(sql -> sql.fetch(query));我希望连接在两者上都关闭,但是只有在 JOOQ 准备查询/语句时才会关闭....
1 回答
萧十郎
TA贡献1815条经验 获得超12个赞
我不知道你是db.execute()
做什么的,但跑步之间有明显的区别:
var blockRecord = db.execute(sql -> sql.select(...).from(...) .where(...) .and(...)) // Excess parenthesis here .and(...).fetchOne().value1();
和
var record = db.execute(sql -> sql.fetch(query));
请注意,第二次调用在 lambda 内部运行整个 jOOQ 逻辑,而第一次调用似乎没有在 lambda 内部执行任何查询,而是返回未执行的查询,并继续在外部构建查询,然后获取可能已经存在的内容关闭连接。
添加回答
举报
0/150
提交
取消