2017-10-18 17 views
0

古いコードを見ていて、単体テストの1つを実行中に問題が発生しています。HSQLDB:特権がないか、オブジェクトが見つかりませんでした。

コードです:

String sql = "insert into customers" + 
      "(name, age, date, id) " + 
      " values " + 
      " (?, ?, ?, CUSTOMERS_SEQ.NEXTVAL)"; 

     if (LOG.isDebugEnabled()) LOG.debug("doInsert: SQL query = " + sql); 

     int count; 
     PreparedStatement pStmt = null; 
     try { 
      // insert! 
      pStmt = conn.prepareStatement(sql); // fails over here 
      //... do other stuff 
     } 
     //...more things 

しかし、文を準備しようとしたときにはエラー

ユーザーが権限またはオブジェクトが見つからない欠けスロー:CUSTOMERS_SEQ.NEXTVALを。

エラーそのものについては読んでいて、何も見つかりませんでした。奇妙なことに、ローカルでクエリを実行するとき Select CUSTOMERS_SEQ.NEXTVAL from CUSTOMERSそれは問題なく動作します。

すべてのご協力をいただければ幸いです。

答えて

2

CUSTOMERS_SEQ.NEXTVALは、SQL標準式ではなく、Oracle構文の式です。

SET DATABASE SQL SYNTAX ORA TRUE 

または接続URLにsql.syntax_ora=trueを含める:あなたは、以下の文を使用してOracle構文との互換性を有効にする必要があります。

この互換モードを有効にすると、INSERT文は動作するはずです(それはHSQLDB 2.4.0で動作しない)

同等のSQL標準式は次のとおりです。

NEXT VALUE FOR CUSTOMERS_SEQ 
+0

これは本当に便利でした!ありがとう! – LivingRobot

関連する問題