java - 将 Java vector 写入分隔文件

标签 java oracle plsql

我正在连接到 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());
}
}

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

最佳答案

如果您不确定每中的字段数量,那么这可能是不可能的。因为要从数据库中获取所有字段值,您需要知道每个字段的类型是什么,以及字段的数量。

但是,我将发布一个示例,说明您何时拥有固定数量的字段,您知道。

假设每行有 4 列。现在要以表格形式显示它,您必须使用List of List

如果您使用 vector ,请使用列表 vector

这是列表列表的示例:-

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

关于java - 将 Java vector 写入分隔文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13275990/

相关文章:

java - 将 WebService (JAX-RS) 与 Java Stripes 集成

java - 在不知道数据类型的情况下将值绑定(bind)到 PreparedStatement

oracle - PL/SQL : ORA-00932: inconsistent datatypes: expected UDT got NUMBER

java - 带有返回生成键的 jOOQ 插入查询

java - 一旦源文件更新,Eclipse PMD会自动重新解析吗?

java - 如何获取和设置networkaddress.cache.ttl的值

database - ORA-01749 - 甲骨文 12c 与 11g

java - 如何在Spring Boot应用程序中设置oracle db连接超时

regex - oracle中提取括号外的数据

oracle - plsql 包中的规范 - 为什么需要它