我正在尝试使用 java.persistence.Query 接口运行本机 sql 查询。
本机查询是这样的:
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();
当我运行上面的代码时,我的csv会正确生成,但代码因以下异常而中断。
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)
在我的dataManager对象上只有getResultList((,getSingleResult((和executeUpdate((方法可用。请建议我应该怎么做才能解决这个问题。我应该为此编写 JDBC 代码吗?
我正在使用javax.persistence.EntityManager。
您可以将 EntityManager 解包到 JDBC 中,并相对轻松地完成此操作:
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();
}
}
}
});