tl; dr
"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
Ответ MadProgrammer работает достаточно хорошо.Но если хотите, есть инструменты, которые помогут вам читать или записывать данные в файлы в формате с разделителями-запятыми или с разделителями-запятыми (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 , вставляет несколько строк, а затем выгружает все данные в текстовый файл в формате CSV, вызывая библиотеку Apache Commons 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();
}
Результат при запуске нового файла, заполненного данными.