繁体   English   中英

将Java矢量写入定界文件

[英]Write Java Vector To Delimited File

我正在连接到Oracle数据库并查询多个表。 我当前的代码创建连接并调用包含查询的PL / SQL函数。 设置好结果集后,将其添加到Vector中(因为我不确定每个查询将导致的记录数)。

我的问题是我不确定如何从Vector中写入定界文件。 我想一旦将结果集添加到其中,它就是一个巨大的字符串。 我需要能够从查询中接收每个字段并在它们之间定界,并使行分开。

这是我的代码:

 public static void main(String[] args) throws SQLException {

    // instantiate db connection
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
    }catch (Exception e) {
        throw new SQLException("Oracle JDBC is not available", e);
    }

    // define connection string and parameters
    String url = "jdbc:oracle:thin:@//host:port/sid";
    Connection conn = DriverManager.getConnection(url, "USERNAME","PASSWORD");


    CallableStatement stmt = conn.prepareCall("{? = CALL <functionname>(?)}");

    // get result set and add to a Vector
    ResultSet rs = stmt.executeQuery();
    Vector<String> results = new Vector();
    while ( rs.next() ){
        results.add(rs.getString(1));
    }

    // close result set, sql statement, and connection
    rs.close();
    stmt.close();
    conn.close();

    // write Vector to output file,
    // where the file name format is MMddyyyy.txt
    try {

    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("MMddyyyy");
    String dateStr = sdf.format(cal.getTime());

    FileWriter fwrite = new FileWriter(dateStr + ".txt");
    BufferedWriter out = new BufferedWriter(fwrite);

    for(int i = 0; i < results.size(); i++)
    {
        String temp = results.elementAt(i);
        out.write(temp);
    }

    out.close();

}catch (Exception e) {
    System.err.println("Error: " + e.getMessage());
}
}

我只是不确定如何去从数据库中获取信息并将其写入分隔的文件。 提前致谢!

如果不确定每rows的字段数,则可能无法实现。 因为要从数据库中获取所有字段值,所以您需要知道每个字段的类型以及字段的数量。

但是,我将为您提供一个示例,说明您拥有固定数量的字段。

假设每行有4 columns 现在要以表格形式显示它,您将不得不使用List of List

如果使用的是Vector ,请使用Vector of List

这是List of List的示例:-

List<List<String>> results = new ArrayList<List<String>>();

while ( rs.next() ) {
    List<String> tempList = new ArrayList<String>();
    tempList.add(rs.getString(1));
    tempList.add(rs.getString(2));
    tempList.add(rs.getString(3));
    tempList.add(rs.getString(4));

    results.add(tempList);
}

然后使用以下循环进行打印:-

for (List<String> innerList: results) {
    for (String fields: innerList) {
        System.out.print(fields + "\t");
    }
    System.out.println();
}

您可以将其以相同的形式写入BufferedWriter

使用results.toString()并截断结果字符串中的花括号( [] ),以将所有值立即以逗号分隔的方式写入文件中。

    //toString() returns comma separated string values enclosed in []
    String resultString = results.toString();

    //truncate leading '[' and termincating ']'
    resultString = resultString.substring(1, resultString.length()-1);

    //if comma is not your delimiter then use String.replaceAll() 
    //to replace `,` with your delimiter

    //write comma separated elements all at once
    out.write(resultString);

因此,在这里,如果您在results Vector中添加了str1str2 ,则results resultString值分别为str1, str2 ,您可以使用BufferedWriter out一次编写BufferedWriter out

另外,请在初始化的两面使用Generics

     Vector<String> results = new Vector<String>();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM