2013-08-26 57 views
0

我在測試環境中使用HSQLDB,提供腳本來創建表格,然後導入要插入到模擬數據庫中的測試數據。在生產層面,我們有Microsoft SQL服務器數據庫。 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代碼。

如果你想做到這一點,你需要維護你的模式/查詢的兩個版本,或者(如果它足夠小,取決於你使用的是什麼)就做一個查找和替換。

0

也許你可以寫一個自定義函數GETDATE(),見this question

我在使用集成測試HSQLDB和甲骨文公司在生產。儘管hsqldb具有「SET DATABASE SQL SYNTAX ORA true」功能,但仍有一些SQL不受支持。因此,我儘可能避免使用不標準的sql函數,只是使用HSQLDB進行一些插入/更新/查詢測試(因此不需要一些SQL腳本)。

+1

是的,它就像CREATE FUNCTION GETDATE()一樣簡單RETURNS TIMESTAMP(3)RETURN LOCALTIMESTAMP(3); – fredt