OpenCsv | SQL |只写表头而不写表内容



我试图通过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");
  }
}

Shreyas,您已经在结果集上迭代了一次。因此,您的选择是,当您将RS迭代到一个变量(例如一个分隔值列表)时存储这些值,并将它们传递给CSV Writer上的方法。

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

Shreyas, Ramachandran有正确答案。可以将ResultSet看作是查询结果上的迭代器。通过循环ResultSet以记录查询的输出,您将向opensv传递一个空结果集。这就是为什么您只看到标题。

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

相关内容

  • 没有找到相关文章

最新更新