选择outfile不工作与休眠 [英] select into outfile not working with hibernate
问题描述
我试图在Hibernate中执行下面的代码来从mySQL数据库创建一个.csv文件。 :
字符串sql =
SELECT * INTO OUTFILE'table.csv'FIELDS TERMINATED BY','+
'\'''''''''''''''''''$'$'$ +
FROM match INNER JOIN totala ON match_code = match;
.csv文件已正确创建,但出现以下错误:
异常监视输入文件夹org.hibernate.exception.GenericJDBCException:无法在org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)中执行查询
在org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
在org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
在org.hibernate.loader。 Loader.doList(Loader.java:2452)
在org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2192)
在org.hibernate.loader.Loader.list(Loader.java: 2
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1832)
在org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:179)
at com.salebuild.dao.hibernate .CorporateTitleDAOImpl.dumpTitleCompanyCSV(CorporateTitleDAOImpl.java:49)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils .invokeJoinpointUsingReflection(AopUtils.java:307)
在org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
$在Proxy128.dumpTitleCompa nyCSV(未知源)
at com.salebuild.service.CorporateTitleServiceImpl.dumpTitleCompanyCSV(CorporateTitleServiceImpl.java:53)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
在java.lang.reflect.Method.invoke(Method.java:597 )
在org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
在org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
。在在org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
。在组织。 springframework.aop.framework.ReflectiveMethodInvocation.pro CEED(ReflectiveMethodInvocation.java:171)
在org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
$处Proxy159.dumpTitleCompanyCSV(来源不明)
。在COM .salebuild.service.collector.ContactScraperMonitorInputFolder.addNewFile(ContactScraperMonitorInputFolder.java:61)
at com.salebuild.service.collector.ContactScraperMonitorInputFolder.run(ContactScraperMonitorInputFolder.java:37)
at java.lang.Thread .run(Thread.java:619)
导致:java.sql.SQLException:ResultSet来自UPDATE。没有数据。
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql .jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:7021)
at com.mchange.v2.c3p0.impl.NewProxyResultSet .next(NewProxyResultSet.java:2859)
在org.hibernate.loader.Loader.doQuery(Loader.java:741)
在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270 )
at org.hibernate.loader.Loader.doList(Loader.java:2449)
... 29 more
一些使用Google提示可能是因为查询没有返回任何结果,所以我得到java.sql.SQLException:ResultSet来自UPDATE。无数据。但我该如何克服这个异常。我不想让我的代码破坏。
我正在运行查询:
public void dumpTitleCompanyCSV(String titleId,String titleName,String dumpFolder){
Session session = getSession();
String hql =SELECT+ titleId +,id,\+ titleName +\,name+
FROM company INTO OUTFILE'd:/contact/input/file.csv '+
FIELDS TERMINATED BY','ENCLOSED BY'\''线路终止'\\'';
logger.debug(jeets查询是\ n + hql);
Query query = session.createSQLQuery(hql);
query.list();
}
executeUpdate()
方法运行不返回任何结果的查询。在你的情况下,因为结果将被转储到外部文件中,所以不会有结果集。请注意,这与查询可能会返回空的结果不同不符合标准。
编辑:
因为这也似乎失败了,我认为你可能需要尝试使用纯JDBC。
执行下面的
session.doWork(new Work(){
@Override
public void execute(Connection con)throws SQLException {
//在本地运行您的查询
}
});
I am trying to execute de following code in Hibernate to create a .csv file from a mySQL database. :
String sql =
"SELECT * INTO OUTFILE 'table.csv' FIELDS TERMINATED BY ','" +
" OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\\n' " +
"FROM match INNER JOIN totala ON match_code= match";
The .csv file is created correctly but then I get the following error:
Exception monitoring the input folder org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2452)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2192)
at org.hibernate.loader.Loader.list(Loader.java:2187)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1832)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:179)
at com.salebuild.dao.hibernate.CorporateTitleDAOImpl.dumpTitleCompanyCSV(CorporateTitleDAOImpl.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
at $Proxy128.dumpTitleCompanyCSV(Unknown Source)
at com.salebuild.service.CorporateTitleServiceImpl.dumpTitleCompanyCSV(CorporateTitleServiceImpl.java:53)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy159.dumpTitleCompanyCSV(Unknown Source)
at com.salebuild.service.collector.ContactScraperMonitorInputFolder.addNewFile(ContactScraperMonitorInputFolder.java:61)
at com.salebuild.service.collector.ContactScraperMonitorInputFolder.run(ContactScraperMonitorInputFolder.java:37)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.sql.SQLException: ResultSet is from UPDATE. No Data.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:7021)
at com.mchange.v2.c3p0.impl.NewProxyResultSet.next(NewProxyResultSet.java:2859)
at org.hibernate.loader.Loader.doQuery(Loader.java:741)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
at org.hibernate.loader.Loader.doList(Loader.java:2449)
... 29 more
Some googling suggested that it may be because query is not returning any result so I get "java.sql.SQLException: ResultSet is from UPDATE. No Data". But how do I get over this exception.I dont want my code to break.
I am running the query like:
public void dumpTitleCompanyCSV(String titleId,String titleName, String dumpFolder) {
Session session = getSession();
String hql = "SELECT "+titleId+" ,id, \""+titleName+"\", name " +
"FROM company INTO OUTFILE 'd:/contact/input/file.csv' " +
"FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\\n'";
logger.debug("jeets The query is \n "+hql);
Query query = session.createSQLQuery(hql);
query.list();
}
Use executeUpdate()
method to run queries that doesn't return any results.
In your case since the results will be dumped to a external file there will be no result set. Note that this is different than a query that may return empty results due to the criteria not being met.
EDIT :
Since that also seem to be failing I think you may need to try using pure JDBC.
Do something like below
session.doWork(new Work() {
@Override
public void execute(Connection con) throws SQLException {
//run your query natively here
}
});
这篇关于选择outfile不工作与休眠的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!