2017-06-10 16 views
1

java.persistence.Queryインターフェイスを使用してネイティブSQLクエリを実行しようとしています。私は、上記のコードを実行すると、私のcsvファイルが正しく生成されますcsvが生成されても、 "ResultSet is update、No data"が返される

SELECT '"id"', '"numerical_values"', '"string_values"' 
UNION ALL 
SELECT id, numerical_values, CONCAT('"', REPLACE(string_values, '"', '""'), '"') 
INTO OUTFILE '/tmp/values.csv' 
FIELDS TERMINATED BY ',' ENCLOSED BY '' ESCAPED BY '\\' 
LINES TERMINATED BY '\n' 
FROM values_table; 

Query qry = dataManager.createNativeQuery(MY_QUERY)); 
qry.getResultList(); 

が、以下の例外を除いてコードブレーク:

ネイティブクエリは、このようなものです。

java.sql.SQLException: ResultSet is from UPDATE. No Data. 
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) 
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988) 
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974) 
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919) 

のみgetResultList()、は、getSingleResult()と私のDataManagerオブジェクトで利用できるのexecuteUpdate()メソッドがあります。これを解決するために何をすべきかをお勧めします。このためにJDBCコードを記述する必要がありますか?

私はjavax.persistence.EntityManagerを使用しています。

+0

あなたのクエリが結果セットを生成しません、それはとても 'getResultList'が間違っている、使用を'使用して、CSVファイルを移入executeUpdate'を実行します。 –

+0

@MarkRotteveelすでにこれを試してみましたが、選択文としては成功しませんでした。 java.sql.SQLExceptionを取得しています:SELECTに対してexecuteUpdate()を発行できません –

+0

面白い問題 –

答えて

1

あなたはJDBCにEntityManagerをアンラップし、比較的容易にこれを達成することができます:

Session session = entityManager.unwrap(Session.class); 
session.doWork(new Work() {   
    @Override 
    public void execute(Connection connection) throws SQLException { 
     PreparedStatement pStmt = null; 
     try { 
      pStmt = connection.prepareStatement(query); 
      pStmt.execute(); 
     } finally { 
      if (pStmt != null) { 
       pStmt.close(); 
      }      
     } 

    } 
}); 
+0

完璧に働いています。ありがとう@Naros –

関連する問題