我正在使用MS SQL查询数据库,由于某种原因,我得到以下错误:com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'
,即使这个“P0”不在我的语法中...
我读到有人遇到过同样的问题,但他们使用的是存储过程,我没有使用,所以我不知道他的解决方案对我有什么用。(他的解决方案是在过程调用周围加上大括号{}。
不管怎样,下面我已经贴上了相关的代码。真的希望有人能帮我这个,得到相当沮丧。
PreparedStatement stmt = null;
Connection conn = null;
String sqlQuery = "SELECT TOP ? \n"+
"z.bankAccountNo, \n"+
"z.statementNo, \n"+
"z.transactionDate, \n"+
"z.description, \n"+
"z.amount, \n"+
"z.guid \n"+
"FROM \n"+
"( \n"+
"select \n"+
"ROW_NUMBER() OVER (ORDER BY x.transactionDate, x.statementNo) AS RowNumber, \n"+
"x.transactionDate, \n"+
"x.statementNo, \n"+
"x.description, \n"+
"x.amount, \n"+
"x.bankAccountNo, \n"+
"x.guid \n"+
"FROM \n"+
"( \n"+
"SELECT \n"+
"a.bankAccountNo, \n"+
"a.statementNo, \n"+
"a.transactionDate, \n"+
"a.description, \n"+
"a.amount, \n"+
"a.guid \n"+
"FROM BankTransactions as a \n"+
"LEFT OUTER JOIN BankTransactionCategories as b \n"+
"ON a.category = b.categoryCode \n"+
"WHERE b.categoryCode is null \n"+
") as x \n"+
") as z \n"+
"WHERE (z.RowNumber >= ?)";
stmt = conn.prepareStatement(sqlQuery);
stmt.setInt(1, RowCountToDisplay);
stmt.setInt(2, StartIndex);
ResultSet rs = null;
try{
rs = stmt.executeQuery();
} catch (Exception Error){
System.out.println("Error: "+Error);
}
7条答案
按热度按时间jhkqcmku1#
如果传入变量,SQL Server要求您在
top
的参数两边加上括号:oaxa6hgo2#
在我们的应用程序中,我们扩展了一个被弃用的
SQLServerDialect
。在更改为SQLServer2008Dialect
后,问题消失了。4szc88ey3#
将hib升级到5.x版本时遇到了这个问题。必须将“hib.dialect”配置从org. hib.dialect.SQLServerDialect更新为org. hib. dialect. SQLServer 2012 Dialect。修复了这个问题!
Hibernate文档参考:https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/session-configuration.html#configuration-programmatic
休眠Jira问题:https://hibernate.atlassian.net/browse/HHH-10032
but5z9lq4#
它也可能是由SQL中的语法错误引起的,我就是这种情况
传达了信息
服务器异常:“@P5”附近的语法不正确
问题实际上是结尾缺少平衡的“)”,即正确的版本是
xuo3flqw5#
如果使用自定义数据源,则添加属性:
在www.example.com中application.properties将无法工作。
您必须将属性作为属性Map添加到数据源Bean中:
r7xajy2e6#
如果您在spring-boot应用中使用Hibernate,则可以使用以下配置属性设置
hibernate.dialect
:spring.jpa.database-platform=org.hibernate.dialect.SQLServer2008Dialect
kyxcudwk7#
按以下方式调用过程
SQL Server中的相同过程