Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java以SQL开发人员脚本的形式运行查询并保存脚本的输出_Java_Sql_Oracle Sqldeveloper_Mybatis_Ibatis - Fatal编程技术网

从java以SQL开发人员脚本的形式运行查询并保存脚本的输出

从java以SQL开发人员脚本的形式运行查询并保存脚本的输出,java,sql,oracle-sqldeveloper,mybatis,ibatis,Java,Sql,Oracle Sqldeveloper,Mybatis,Ibatis,我在db有一张桌子。我想使用JAVA和ibatis将其作为.csv文件获取 我知道,使用SQL Developer client执行此操作的快速方法是编写以下查询: select /*csv*/* from employees 并在SQL Developer客户端将其作为脚本执行。如图所示 我认为com.ibatis.common.jdbc.ScriptRunner可能适合我的需要,但找不到将脚本输出捕获到.csv文件的方法 甚至可以从JAVA执行上面的查询吗 有没有更快的方法?发送selec

我在db有一张桌子。我想使用JAVA和ibatis将其作为.csv文件获取

我知道,使用SQL Developer client执行此操作的快速方法是编写以下查询:

select /*csv*/* from employees
并在SQL Developer客户端将其作为脚本执行。如图所示 我认为com.ibatis.common.jdbc.ScriptRunner可能适合我的需要,但找不到将脚本输出捕获到.csv文件的方法

甚至可以从JAVA执行上面的查询吗

有没有更快的方法?发送select查询并解析其结果不是我的选择

谢谢。

请参考使用spring batch的链接

您可以使用下面的项目读取器和项目写入器

<bean id="pageReader" class="org.mybatis.spring.batch.MyBatisPagingItemReader" scope="step">
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    <property name="queryId" value="getEmployee" />
    <property name="pageSize" value="1000" />
</bean>

<mapper namespace="com.kp.db.persistence.IEmpTableMapper">


    <select id="getEmployee" parameterType="EmpFieldMap">
        SELECT EMP_NAME, EMP_LAST FROM EMP_TABLE
    </select>
</mapper>




<bean id="cvsFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
        <!-- write to this csv file -->
        <property name="resource" value="#{jobParameters['fileName']}" />
        <property name="shouldDeleteIfExists" value="true" />

        <property name="lineAggregator">


    <bean
                    class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
                    <property name="delimiter" value="," />

                    <property name="fieldExtractor">
                        <bean
                            class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                            <property name="names" value="empFirst, empLast" />
                        </bean>
                    </property>
                </bean>
            </property>

            <property name="headerCallback" ref="empHeader" />

        </bean>

您需要配置会话工厂。

到目前为止,我找到的最佳解决方案是发送查询: 从EMP|U表中选择EMP|U名称| |'、'| | EMP|U最后一个| |'、'| | 映射文件:

<select id="testing" resultClass="java.lang.String">  
    SELECT EMP_NAME||', '|| EMP_LAST ||', '|| FROM EMP_TABLE  
 </select>
2.查询列表:

 long started2 = System.nanoTime();
 @SuppressWarnings("unchecked")
 List<String> lst = (List<String>)sqlMap.queryForList("map.testing");
 BufferedWriter bw = new BufferedWriter(new FileWriter("test2.csv"));
 for(String str : lst){
    bw.write(str);
 }
 long time2 = (System.nanoTime()-started2);
 System.out.println("with list: " + time2);
结果是:

with row handler: 2242707000 with list: 2455066000 rowhandler was faster by: 448629000 (approx 0.44 sec for 50K entries 7MB csv file.)
如果有人知道一个更快的方法,我会很高兴地测试它,并公布结果

事实上,我正试图做完全相反的事情,我正试图将选择查询结果保存为本地的.csv文件。谢谢,这很管用,但正如我提到的,发送选择查询并解析其结果对我来说不是一个选项。。我的问题是,是否有一种方法可以从oracle server接收结果并将其写入.csv文件,而无需在客户端对其执行任何其他操作。
 long started2 = System.nanoTime();
 @SuppressWarnings("unchecked")
 List<String> lst = (List<String>)sqlMap.queryForList("map.testing");
 BufferedWriter bw = new BufferedWriter(new FileWriter("test2.csv"));
 for(String str : lst){
    bw.write(str);
 }
 long time2 = (System.nanoTime()-started2);
 System.out.println("with list: " + time2);
with row handler: 2242707000 with list: 2455066000 rowhandler was faster by: 448629000 (approx 0.44 sec for 50K entries 7MB csv file.)