tl;博士
"org.apache.poi.ss.usermodel" 做了类似的事情,但是对于 excel 表格,文本文件有类似的东西吗??
是的,Apache Commons CSV 库。
CSVPrinter printer = CSVFormat.RFC4180.withHeader( rs ).print( writer ); // Write header row, using database column header names.
printer.printRecords( rs ); // Write each row of the entire result set.
Apache Commons CSV
Answer by MadProgrammer 运行良好。但是,如果您愿意,也有一些工具可以帮助您读取或写入 tab-delimited 或 comma-separated-values (CSV) 格式的文件。
我为此使用了Apache Commons CSV。这个库甚至精通ResultSet,因此它可以直接将您的数据传输到文件中,而无需填充一组中间数组或对象集合。事实上,Apache Commons CSV 基本上用两行代码完成了所有繁重的工作。
第一行获取列名并将它们写入文本文件。
CSVPrinter printer = CSVFormat.RFC4180.withHeader( rs ).print( writer ); // Write header row, using database column header names.
下一行循环结果集的所有行,将每一行的每一列以 CSV 格式写入文本文件。
printer.printRecords( rs ); // Write each row of the entire result set.
使用 H2 Database Engine 创建内存数据库的完整示例应用程序,插入一些行,然后通过调用 Apache Commons CSV 库将所有数据转储到 CSV 格式的文本文件中。
try (
Connection conn = DriverManager.getConnection( "jdbc:h2:mem:trashme" )
) {
String sql = "CREATE TABLE " + "abc_" + " (\n" +
" data UUID default random_uuid() , \n" + // Every table should have a primary key.
" a_ VARCHAR , \n" + // Three columns per the Question.
" b_ VARCHAR , \n" +
" c_ VARCHAR \n" +
" );";
try (
Statement stmt = conn.createStatement() ;
) {
stmt.execute( sql );
}
sql = "INSERT INTO abc_ (a_ , b_ , c_ ) VALUES ( ? , ? , ? ) ;";
try ( PreparedStatement ps = conn.prepareStatement( sql ) ) {
for ( int i = 1 ; i <= 10 ; i++ ) {
ps.setString( 1 , "a" + i );
ps.setString( 2 , "b" + i );
ps.setString( 3 , "c" + i );
ps.executeUpdate();
}
}
sql = "SELECT a_ , b_ , c_ FROM abc_ ; ";
try (
Statement stmt = conn.createStatement() ;
) {
ResultSet rs = stmt.executeQuery( sql );
// File
Path path = FileSystems.getDefault().getPath( System.getProperty( "user.home" ) , "trashme.txt" );
try (
BufferedWriter writer = Files.newBufferedWriter( path , Charset.forName( "UTF-8" ) ) ;
) {
final CSVPrinter printer = CSVFormat.DEFAULT.withHeader( rs ).print( writer ); // Write header row, using database column header names.
printer.printRecords( rs ); // Write each row of the entire result set.
} catch ( IOException x ) {
System.err.format( "IOException: %s%n" , x );
}
}
} catch ( SQLException eArg ) {
eArg.printStackTrace();
}
运行时的结果,新文件填充了数据。