我试图访问sybase数据库并获取
SybSQLException: Incorrect syntax near `limit`
堆栈跟踪:
Caused by: com.sybase.jdbc3.jdbc.SybSQLException: Incorrect syntax near 'limit'.
at com.sybase.jdbc3.tds.Tds.a(Unknown Source) ~[jconnect-6.0.jar:na]
at com.sybase.jdbc3.tds.Tds.nextResult(Unknown Source) ~[jconnect-6.0.jar:na]
at com.sybase.jdbc3.jdbc.ResultGetter.nextResult(Unknown Source) ~[jconnect-6.0.jar:na]
at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source) ~[jconnect-6.0.jar:na]
at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source) ~[jconnect-6.0.jar:na]
at com.sybase.jdbc3.jdbc.SybStatement.queryLoop(Unknown Source) ~[jconnect-6.0.jar:na]
at com.sybase.jdbc3.jdbc.SybStatement.executeQuery(Unknown Source) ~[jconnect-6.0.jar:na]
at com.sybase.jdbc3.jdbc.SybPreparedStatement.executeQuery(Unknown Source) ~[jconnect-6.0.jar:na]
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82) ~[hibernate-core-4.3.8.Final.jar:4.3.8.Final]
... 135 common frames omitted
我有以下域类:
class MyDomain {
String name
static mapping = {
datasource 'sybase'
}
}
当我致电MyDomainClass.findByName('FooBar')
时,我得到了例外。
我知道在sybase中没有关键字限制,但由于GORM创建了相应的sql语句,我不知道如何解决这个问题。
使用以下hibernate方言:
org.hibernate.dialect.SybaseASE15Dialect
DataSource配置:
dataSources:
dataSource:
pooled: true
jmxExport: true
driverClassName: org.postgresql.Driver
dialect: org.postgresql.PostgreSQLDialect
username: ${database.user}
password: ${database.password}
sybase:
driverClassName: com.sybase.jdbc3.jdbc.SybDriver
dialect: org.hibernate.dialect.SybaseASE15Dialect
username: ${database.sybase.user}
password: ${database.sybase.password}
url: jdbc:sybase:Tds:${database.sybase.url}:${database.sybase.port}/db
postgres的URL在不同的环境(开发,测试和生产)中,sybase是针对所有阶段修复的,所以我在那里进行了配置。
编辑:
我刚刚发现它不是sybase问题,它与我使用的第二个数据源有关,这是一个Postgres数据库,但我仍然不知道究竟是什么原因造成的这个问题。
仅使用sybase数据源解决了这个问题。
EDIT2:
我解决了这个问题。 Grails 3.0.1(https://github.com/grails/grails-core/issues/9011)中存在一个错误,该错误在3.0.2中得到修复