Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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 OpenCsv | SQL |只写入标题而不写入表内容_Java_Sql_Excel_Jdbc_Opencsv - Fatal编程技术网

Java OpenCsv | SQL |只写入标题而不写入表内容

Java OpenCsv | SQL |只写入标题而不写入表内容,java,sql,excel,jdbc,opencsv,Java,Sql,Excel,Jdbc,Opencsv,我试图通过Java执行SQL语句,并将结果写入.csv文件 我正在使用OJDBC.jar(v7)连接到Oracle 11g DB和OPENCSV.jar(v3.8)创建并写入excel 表格结果打印得很好。我使用管道来分隔记录中的所有列值 但是,在生成的csv文件上,我只看到表的列名,根本看不到数据!原因可能是什么?请帮忙 package test; import java.io.FileWriter; import java.sql.Connection; import java.sql.D

我试图通过Java执行SQL语句,并将结果写入.csv文件

我正在使用OJDBC.jar(v7)连接到Oracle 11g DB和OPENCSV.jar(v3.8)创建并写入excel

表格结果打印得很好。我使用管道来分隔记录中的所有列值

但是,在生成的csv文件上,我只看到表的列名,根本看不到数据!原因可能是什么?请帮忙

package test;

import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

import com.opencsv.CSVWriter;



public class AllInOne
{

static String hostIP="255.255.255.255";
static String PortNum="1521";
static String ServiceName="SNAME";
static String un="USER";
static String pw="PWD";
static int columnCount;
static String row="";


  public static void main(String[] args) throws Exception
  {
    String addr = "jdbc:oracle:thin:@"+hostIP+":"+PortNum+":"+ServiceName;
    Class.forName("oracle.jdbc.OracleDriver");
    Connection con = DriverManager.getConnection(addr,un,pw);
    Statement stat = con.createStatement();
    ResultSet rs = stat.executeQuery("select * from t_employee_info where rownum <6");

    ResultSetMetaData resultSetMetaData = rs.getMetaData();
    columnCount = resultSetMetaData.getColumnCount();

    while (rs.next())
    {

        for (int i = 1; i <= columnCount; i++) 
        {
            row += rs.getString(i) + "|";
        }

        System.out.println(row);
        row = "";
    }

    FileWriter fw=new FileWriter("C:/Users/myName/Desktop/Folder/CSVfile.csv");
    CSVWriter writer = new CSVWriter(fw);
    writer.writeAll(rs,true);
    writer.close();  
    fw.close();
    stat.close();
    con.close();
    System.out.println("File Generated");

  }

}
封装测试;
导入java.io.FileWriter;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入java.sql.ResultSetMetaData;
导入java.sql.Statement;
导入com.opencsv.CSVWriter;
公共级蒜酮
{
静态字符串hostIP=“255.255.255.255”;
静态字符串PortNum=“1521”;
静态字符串ServiceName=“SNAME”;
静态字符串un=“USER”;
静态字符串pw=“PWD”;
静态int列计数;
静态字符串行=”;
公共静态void main(字符串[]args)引发异常
{
String addr=“jdbc:oracle:thin:@”+hostIP+:“+PortNum+”:“+ServiceName;
类forName(“oracle.jdbc.OracleDriver”);
Connection con=DriverManager.getConnection(addr、un、pw);
Statement stat=con.createStatement();

ResultSet rs=stat.executeQuery(“从t_employee_info中选择*其中rownumShreyas,您已经对结果集进行了一次迭代。因此,您可以选择在将rs迭代到变量时存储值(例如,一列|分隔值),并将其传递给CSV Writer上的方法


第二个选项是实际使用rs.first()(前提是您有一个可滚动的结果集),然后将其传递给该方法。然而,这不是一个很好的做法,因为您已经对结果集进行了一次迭代。因此,您可以选择在将rs迭代到变量时存储值(说出一列|分隔值)并将它们传递给CSV Writer上的方法


第二个选项是实际使用rs.first()(前提是您有一个可滚动的结果集)然后将其传递给该方法。然而,这不是一个很好的实践

Shreyas,Ramachandran有正确的答案。请将ResultSet视为查询结果的迭代器。通过循环ResultSet来记录查询的输出,您将向opencsv传递一个空的结果集。这就是您只看到标题的原因。


我对JDBC的经验相对有限,所以我无法告诉您为什么是rs.first()或rs.beforeFirst()这不是一个好的实践,但是如果这不起作用,你必须同时记录结果集并创建一个CSV文件,那么要么先做/先做,要么运行第二次查询。个人而言,我会考虑删除日志记录,并创建自己的自定义类,继承自定义在文件写入器中传递的写入器接口,并将其使用到LO。g通过将结果集传递到CSVWriter,您正在写入文件。

Shreyas,Ramachandran得到了正确的答案。将结果集视为查询结果的迭代器。通过循环结果集来记录查询的输出,您正在向opencsv传递一个空结果集。这就是您只看到标题的原因

我对JDBC的经验相对有限,所以我无法告诉您为什么是rs.first()或rs.beforeFirst()这不是一个好的实践,但是如果这不起作用,你必须同时记录结果集并创建一个CSV文件,那么要么先做/先做,要么运行第二次查询。个人而言,我会考虑删除日志记录,并创建自己的自定义类,继承自定义在文件写入器中传递的写入器接口,并将其使用到LO。g通过将其传递到CSVWriter,您正在写入文件的内容