2013-08-26 5 views
0

Я использую HSQLDB в тестовом envoirnment, предоставляющем сценарии для создания таблиц, а затем импортируя тестовые данные, которые необходимо вставить в издеваемую базу данных. На уровне производства у нас есть база данных SQL Server. Тем не менее HSQLDB дает мне такие ошибки, как:Может ли HSQLDB использоваться в тестовой среде, заменяющей MSSQL

java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: GETDATE 
20:17:48,283 ERROR [Appeal] [proceessAppeal] [Error] 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source) 
    at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source) 
+0

Немного больше информации, пожалуйста. SQL - это не просто SQL, у разных RDBMS есть разные диалекты. Если вы используете Hibernate или тому подобное, вы также должны поменять диалект между тестовым и производственным режимами. –

+0

На самом деле мы просто используем синтаксис запроса в DAO, используя подготовленные записи. – user718410

ответ

1

различные базы данных поддерживают различные встроенные функции. hsqldb не имеет функции GETDATE() like in mssql. он имеет эквивалентную функцию, CURRENT_TIMESTAMP(), но вы не можете просто использовать один и тот же код SQL между ними.

Если вы хотите это сделать, вам нужно будет поддерживать 2 версии вашей схемы/запросов или (если ее достаточно тривиально, в зависимости от того, что вы используете), просто выполните поиск и замену.

0

Может быть, вы могли бы написать пользовательскую функцию GetDate(), см this question

Я использую HSQLDB в интеграционных тестах и ​​оракул в производстве. Тем не менее некоторые SQL-файлы не поддерживаются, хотя hsqldb имеет функцию «SET DATABASE SQL SYNTAX ORA true». Поэтому я избегаю использовать нестандартные sql-функции как можно меньше и просто использую HSQLDB для некоторых тестов вставки/обновления/запроса (поэтому некоторые SQL-скрипты не нужны).

+1

Да, это так же просто, как CREATE FUNCTION GETDATE() RETURNS TIMESTAMP (3) RETURN LOCALTIMESTAMP (3); – fredt