Java:以CSV格式流式传输JDBC结果集
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Java:以CSV格式流式传输JDBC结果集
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                在上一篇文章中 ,我展示了如何將java.sql.ResultSet轉換為JSON并將其流回調用方。 這篇文章是關于以CSV格式流式傳輸的。 流式傳輸使您可以一點一點地傳輸數據,而不必將所有數據都加載到服務器的內存中。
例如,考慮以下ResultSet :
+---------+-----+ | Name | Age | +---------+-----+ | Alice | 20 | | Bob | 35 | | Charles | 50 | +---------+-----+相應的CSV是:
name,age Alice,20 Bob,35 Charles,50以下類(在我的GitHub Repository中也可用)可用于將ResultSet轉換為CSV。 請注意,此類實現Spring的ResultSetExtractor , JdbcTemplate可以使用該類從ResultSet提取結果。
/*** Streams a ResultSet as CSV.*/ public class StreamingCsvResultSetExtractorimplements ResultSetExtractor<Void> {private static char DELIMITER = ',';private final OutputStream os;/*** @param os the OutputStream to stream the CSV to*/public StreamingCsvResultSetExtractor(final OutputStream os) {this.os = os;}@Overridepublic Void extractData(final ResultSet rs) {try (var pw = new PrintWriter(os, true)) {final var rsmd = rs.getMetaData();final var columnCount = rsmd.getColumnCount();writeHeader(rsmd, columnCount, pw);while (rs.next()) {for (var i = 1; i <= columnCount; i++) {final var value = rs.getObject(i);pw.write(value == null ? "" : value.toString());if (i != columnCount) {pw.append(DELIMITER);}}pw.println();}pw.flush();} catch (final SQLException e) {throw new RuntimeException(e);}return null;}private static void writeHeader(final ResultSetMetaData rsmd,final int columnCount, final PrintWriter pw) throws SQLException {for (var i = 1; i <= columnCount; i++) {pw.write(rsmd.getColumnName(i));if (i != columnCount) {pw.append(DELIMITER);}}pw.println();} }要將其用于帶有JAX-RS的Web服務中:
import javax.ws.rs.core.StreamingOutput;@GET @Path("runQuery") @Produces("text/csv") public StreamingOutput runQuery() {return new StreamingOutput() {@Overridepublic void write(final OutputStream os)throws IOException, WebApplicationException {jdbcTemplate.query("select name, age from person",new StreamingCsvResultSetExtractor(os));}}; }相關文章:
流式傳輸JDBC ResultSet作為JSON
翻譯自: https://www.javacodegeeks.com/2018/12/java-streaming-jdbc-resultset-csv.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Java:以CSV格式流式传输JDBC结果集的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 放了三四年的蜂蜜还能吃吗(变质后的蜂蜜是
- 下一篇: gradle ant_区分基于Ant目标
