首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Spring data抛出java.sql.SQLException: ResultSet来自更新。无数据。关于执行原生mysql查询

为什么Spring data抛出java.sql.SQLException: ResultSet来自更新。无数据。关于执行原生mysql查询
EN

Stack Overflow用户
提问于 2020-02-13 16:18:45
回答 1查看 167关注 0票数 0

我正在使用spring-data-jpa执行以下mysql查询,

代码语言:javascript
运行
复制
select 'FIRM NAME', 'USER_NAME', 'EMAIL', 'USER_PHONE', 'CLICK_COUNT', 'CLICK_DATE', 'PARTNER NAME'
 union all select * from (select cf.cf_firm_name, u.u_name, u.u_email, u.u_phone, co.c_clicks,
 co.c_click_date, p.p_name from click_offer co inner join user u on co.c_user_id = u.u_id inner join
 c_firm cf on u.u_cpa_firm = cf.cf_id inner join offer of on co.c_offer_id = of.o_id inner join
 partner p on of.o_partner_id = p.p_id) a into outfile '/var/lib/mysql-files/aafa.csv' fields
 terminated by ',' optionally enclosed by '"' lines terminated by '\n';

但在成功创建文件后执行hibernate会抛出异常,

代码语言:javascript
运行
复制
Caused by: java.sql.SQLException: ResultSet is from UPDATE. No Data.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861)
    at com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:6301)
    at com.zaxxer.hikari.pool.HikariProxyResultSet.next(HikariProxyResultSet.java)
    at org.hibernate.loader.Loader.processResultSet(Loader.java:987)
    at org.hibernate.loader.Loader.doQuery(Loader.java:949)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
    at org.hibernate.loader.Loader.doList(Loader.java:2692)
    ... 110 common frames omitted

但是,当我尝试在mysql-workbench上运行相同的查询时,它执行时没有出现错误。

我使用以下代码来执行来自spring的查询,

代码语言:javascript
运行
复制
String query= DynamicQueryGenerator.queryToFetchOttomartClickCountDetails(ottoMartCsvGeneratorBean);

            Query executableQuery = entityManager.createNativeQuery(query);
                        executableQuery.setParameter("from", fromDate);
            executableQuery.setParameter("to", toDate);
            if (!NullEmptyUtils.isNullorEmpty(ottoMartCsvGeneratorBean.getFirmIds())){
                executableQuery.setParameter("firmIds", ottoMartCsvGeneratorBean.getFirmIds());
            }
            executableQuery.getResultList();

其中query包含要执行的mysql查询。

EN

回答 1

Stack Overflow用户

发布于 2020-02-13 16:34:52

您的查询似乎旨在将某些内容写入文件,而不是返回结果集。

getResultList()期望从查询中返回结果。

尝试呼叫:

代码语言:javascript
运行
复制
executableQuery.executeUpdate()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60203273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档