2014-07-24 15 views
12

Come posso scrivere una tabella INTERNA in un file flat usando jdbc? Finora ho tentato quanto segue:Come si ottengono i valori da tutte le colonne utilizzando ResultSet.getBinaryStream() in jdbc?

Statement statement = connection.createStatement(); 
    ResultSet result = statement.executeQuery("SELECT * FROM tablename"); 
    BufferedInputStream buffer; 
    FileOutputStream out = new FileOutputStream("flatfile.txt"); 
    while(result.next()) 
    { 
     buffer = new BufferedInputStream(result.getBinaryStream("????")); 
     byte[] buf = new byte[4 * 1024]; //4K buffer 
     int len; 
     while((len = buffer.read(buf, 0, buf.length)) != -1) 
     { 
      out.write(buf, 0, len); 
     } 
    } 
    out.close(); 

"????" è solo il mio segnaposto. Sono bloccato su cosa passare come argomento.

+0

Qual è la tua domanda? –

+0

Devo solo sostituire '????' con "" per ottenere tutte le colonne o c'è un'altra funzione all'interno di ResultSet o qualche altra classe per ottenere un'intera riga? Voglio solo l'intera fila. Non solo una colonna di quel disco. Non ho ancora la connettività db da testare, quindi sto solo cercando di capirlo in anticipo, quindi sono pronto. – HarishV

+2

'ResultSet' non fornisce metodi che gestiscono l'intera riga. Devi occuparti di colonne individualmente. È utile trovare il metodo [getMetaData()] (http://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html#getMetaData--). – GriffeyDog

risposta

20

È possibile ottenere tutti i nomi di colonna e tutti i dati dal vostro tavolo usando il codice seguente. metodo writeToFile conterrà la logica per la scrittura su file (se ciò non bastasse ovvio :))

ResultSetMetaData metadata = rs.getMetaData(); 
    int columnCount = metadata.getColumnCount();  
    for (int i = 1; i <= columnCount; i++) { 
     writeToFile(metadata.getColumnName(i) + ", ");  
    } 
    System.out.println(); 
    while (rs.next()) { 
     String row = ""; 
     for (int i = 1; i <= columnCount; i++) { 
      row += rs.getString(i) + ", ";   
     } 
     System.out.println(); 
     writeToFile(row); 

    } 
+1

ah, peccato non ci sia il metodo ResultSet.getRow! –

1

result.getBinaryStream("????") restituirà solo il valore per quella colonna come si inserisce come segnaposto.

Se si desidera ottenere tutta la colonna, è necessario utilizzare ResultSetMetaData da ResultSet

ResultSetMetaData metadata = resultSet.getMetaData(); 
    int columnCount = metadata.getColumnCount(); 
    for (int i=1; i<=columnCount; i++) 
    { 
     String columnName = metadata.getColumnName(i); 
     System.out.println(columnName); 
    } 
+0

Grazie a sendon1982, suppongo di poterlo utilizzare per scorrere ciclicamente ciascuna colonna della tabella utilizzando getBinaryCount() e basta passare all'indice della colonna per stampare l'intera tabella. Mi stavo chiedendo se ci fosse un modo per sputare un intero tavolo con una singola funzione, tutto qui, ma lo farà. – HarishV

+0

Prego. No, devi usare il loop per mostrarli uno ad uno. – sendon1982

1

Ecco come ho dump di un tavolo da una connessione JDBC, molto utile per il debug se si desidera visualizzare tutte le righe che si trovano in una memoria (es: HSQL) DB per esempio:

public static void spitOutAllTableRows(String tableName, Connection conn) { 
    try { 
     System.out.println("current " + tableName + " is:"); 
     try (PreparedStatement selectStmt = conn.prepareStatement(
       "SELECT * from " + tableName, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 
      ResultSet rs = selectStmt.executeQuery()) { 
     if (!rs.isBeforeFirst()) { 
      System.out.println("no rows found"); 
     } 
     else { 
      while (rs.next()) { 
      for (int i = 1; i < rs.getMetaData().getColumnCount() + 1; i++) { 
       System.out.print(" " + rs.getMetaData().getColumnName(i) + "=" + rs.getObject(i)); 
      } 
      System.out.println(""); 
      } 
     } 
     } 
    } 
    catch (SQLException e) { 
     throw new RuntimeException(e); 
    } 
    } 

stampa ricorda

current <yourtablename> is: 
ID=1 COLUMN1=abc COLUMN2=null 
ID=2 COLUMN1=def COLUMN2=ghi 
...