使用HSQLDB使用NOLOCK语句的错误SQL语法

时间:2017-05-23 12:41:54

标签: sql hsqldb nolock

我正在使用HSQLDB并尝试在查询中运行包含NOLOCK的select语句。

当语句被执行时,会抛出BadSqlGrammarException

有没有办法解决这个问题,因为该命令与SQL Server运行良好?

1 个答案:

答案 0 :(得分:0)

a_horse_with_no_name的评论是正确的:

  

HSQLDB不支持NOLOCK。如果您需要在语句中使用它,则需要针对真实事物(SQL Server)运行测试

为了澄清这一点, private Button getTouchedButton(MotionEvent event) { for(int i=0; i<myGridView.getChildCount(); i++) { Rect buttonRect = new Rect() Button child = (Button)mGridView.getChildAt(i); child.getHitRect(buttonRect) if (child.contains(Math.round(event.rawX), Math.round(event.rawY))){ return child; } } return null; } 是一个特定于SQL Server的关键字,用于指定数据库如何表现的提示。它甚至在Stack Overflow上有自己的标记

  

SQL Server表提示,可用于防止查询发出共享读锁。虽然经常用于阻止查询阻止其他查询,但它也容易受到脏读和其他潜在数据问题的影响。

因此,包含此关键字的SQL查询对HyperSQL无效。

你能做的是:

  • 针对SQL Server实例运行测试(如上面的注释所指出的那样)。
  • 重构SQL语句,使其不使用SQL Server的细节。在这种情况下,您必须确保他们不使用NOLOCK。如果没有更多的知识,这将如何影响您的应用程序。

作为旁注,HyperSQL fully supports the SQL specification

  

HyperSQL 2.x支持SQL标准92,1999,2003,2008和2011定义的SQL方言。