Jooq与SQL Server如何选择前N个结果

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (11)

在我们的项目中,我们使用两个数据库,一个postgres和一个mssql。我们正在使用Jooq来查询这些数据库和postgres一切都非常简单!

但是使用mssql我们遇到了一些麻烦。任务是选择前10个值,让我们说我们有以下java代码:

DSL.using(conn)
.select(USE_CASE.asterisk())                                                                                                                  
.from(USE_CASE)
.where(USE_CASE.RECORD_ACTIVE.eq(true))                                                                                                                                     
.orderBy(USE_CASE.CREATED_ON.desc())                                                                                                                                     
.limit(10)
.offset(0)                                                                                                                                                                                                
.fetch(new UseCaseMapper()))

这就像postgres的魅力,但在mssql上我们得到以下错误:

Execution exception[[CompletionException: org.jooq.exception.DataAccessException: 
SQL [select "park"."dbo"."use_case".* from "park"."dbo"."use_case" where
"park"."dbo"."use_case"."record_active" = ? 
order by "park"."dbo"."use_case"."created_on" desc limit ?]; 
Incorrect syntax near 'limit'.]]

我知道对于mssql,等价的查询会是这样的,

select top 10 * 
from use_case 
where record_active = true
order by created_on desc;

如何更改我的java代码以获取mssql中的限制记录?

提问于
用户回答回答于

正确 SQLDialect

异常消息暗示您仍在使用PostgreSQL(或其他一些非SQL Server)方言,因为您的目录/模式/表/列是使用"double_quotes"而不是[brackets]

只需SQLDialect.SQLSERVER在SQL Server上运行查询时使用。该LIMIT 10语法将被正确地转换为TOP 10

jOOQ专业版vs jOOQ开源版

从我们发布的错误消息来看,你是如何真正配置你的jOOQ集成还不是很清楚,但是如果你在DSL.using(Connection)没有明确指定的情况下使用SQLDialect,并且jOOQ没有正确“猜测”相应的SQLDialect,这可能主要是因为其中一个两个原因:

  1. 您使用的是一些非标准的JDBC URL,jOOQ无法识别。因此SQLDialect.DEFAULT,它使用了为您生成错误的SQL语法。
  2. 您使用的是jOOQ开源版(Maven groupId org.jooq)而不是jOOQ专业版(Maven groupId org.jooq.pro,需要手动安装,因为它不是通过Maven Central分发的),这也会导致使用jOOQ SQLDialect.DEFAULT

热门问答

智能钛能处理大数据文件吗?我有30G的数据存储在本地电脑硬盘上?

腾讯智能钛AI开发者

腾讯云 · 智能钛产品团队 (已认证)

腾讯智能钛产品团队官方运营账号。分享产品最新动态,第一时间解答用户疑问。
推荐

硬盘可以升级吗?

最爱开车啦互联网的敏感者
推荐

可以升级,小微活动中没有云硬盘的的,后续可以用同帐号在官网购买和服务器同地域同地区的云硬盘挂载到服务器上使用。

云硬盘挂载初始化方法 可参考 https://cloud.tencent.com/document/product/362/6735

云通信 70402 错误?

推荐已采纳

参数非法,请检查必填字段是否填充,或者字段的填充是否满足协议要求。

您好,可参考此文档:https://cloud.tencent.com/document/product/269/1671

录音识别sdk的录音文件如何保存?

Richel码农
推荐

1.实时语音sdk内置录音器采集音频暂不支持保存语音数据,如需要保存语音数据建议上层自行采集音频数据。

2.实时语音识别sdk不支持暂停&继续操作,停止识别后重新调用start即开始识别。

云通讯im 本地消息存储数据库能否开放使用,要做一个本地聊天记录搜索功能?

推荐
您好,首先核实下您是否咨询app本地存储?App 本地存储;默认情况下,SDK 内部会对收到的消息进行存储,无需用户进行存储。用户可调用接口获取本地消息(无网络操作),另外,通过 getMessage 接口,也会获取本地消息,如果本地消息存在断层,会通过漫游消息补全。消息存储详参...... 展开详请

服务器操作台不是Windows咋换?

蒋小爱

腾讯云 · 技术支持 (已认证)

推荐
您好,您参考重装Windows系统;仅支持中国大陆地域(不含香港)。例如,Linux 重装为 Windows,Windows 重装为 Linux 。 登陆控制台 图片.png 选择【公共镜像】中Windows ,配置Windows密码,点击【开始重装】即可更换Windows 图片...... 展开详请

所属标签

扫码关注云+社区

领取腾讯云代金券