[英]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中添加了str1
, str2
,则results
resultString
值分别为str1, str2
,您可以使用BufferedWriter out
一次编写BufferedWriter out
。
另外,请在初始化的两面使用Generics
:
Vector<String> results = new Vector<String>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.