2013-04-19 22 views
5

Devo convertire il mio set di risultati in un array di stringhe. Sto leggendo indirizzi e-mail dal database e ho bisogno di essere in grado di inviare loro come:Converti gruppo di risultati in serie di stringhe

message.addRecipient(Message.RecipientType.CC, "[email protected],[email protected],[email protected]"); 

Ecco il mio codice per la lettura degli indirizzi e-mail:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

public class Test { 

    public static void main(String[] args) { 
     Connection conn = null; 
     String iphost = "localhost"; 
     String dbsid = "ASKDB"; 
     String username = "ASKUL"; 
     String password = "askul"; 

     try { 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      String sql = "SELECT * FROM EMAIL"; 
      conn = DriverManager.getConnection("jdbc:oracle:thin:@" + iphost + ":1521:" + dbsid, username, password); 
      Statement st = conn.createStatement(); 
      ResultSet rs = st.executeQuery(sql); 
      String[] arr = null; 
      while (rs.next()) { 
       String em = rs.getString("EM_ID"); 
       arr = em.split("\n"); 
       for (int i =0; i < arr.length; i++){ 
        System.out.println(arr[i]); 
       } 
      } 
     } catch (Exception asd) { 
      System.out.println(asd); 
     } 
    } 
} 

myOutput è:

[email protected] 
[email protected] 

ho bisogno in questo modo:

[email protected],[email protected] 

Sto usando Oracle 11g.

+1

Per me, sembra che lo split funzioni correttamente, ma l'output stampato sarà SEMPRE essere su una riga per elemento nell'array (dato che si sta utilizzando System.out.println(). Non si desidera aggiungere i risultati della divisione a StringBuilder e quindi System.out.println()? – DaveH

+0

Non ho capito. Yu ha ragione – ErrorNotFoundException

risposta

8

per ottenere il risultato desiderato:

sostituire le linee

String[] arr = null; 
while (rs.next()) { 
    String em = rs.getString("EM_ID"); 
    arr = em.split("\n"); 
    for (int i =0; i < arr.length; i++){ 
     System.out.println(arr[i]); 
    } 
} 

da

String arr = null; 
while (rs.next()) { 
    String em = rs.getString("EM_ID"); 
    arr = em.replace("\n", ","); 
    System.out.println(arr); 
} 
+0

+1 Questo sembra essere l'approccio giusto: piuttosto che fissare le conseguenze di una divisione, evitare di scindere in primo luogo! Non dimenticare di dire all'OP che "arr" non è più una serie di stringhe, ma una singola stringa che desidera. – dasblinkenlight

+0

@dasblinkenlight sì, grazie per averlo sottolineato! :) – codeMan

5
System.out.println(arr[i]); 

utilizzare invece:

System.out.print(arr[i] + ","); 
1

non è necessario arr = em.split("\n"); dal momento che sono in loop attraverso ogni riga (assumendo che 1 fila indirizzo = 1 email) basta questo:

 ArrayList<String> arr = new ArrayList<String>(); 
     while (rs.next()) { 
      arr.add(rs.getString("EM_ID")); 
      System.out.println(arr.get(arr.size()-1)); 
     } 
+1

l'array non è iniziale ized e ora è possibile recuperare il numero di righe restituite senza iterarle su tutte. – Terraego

+0

mi dispiace, ho aggiornato la risposta – Stephan

1

Se ho capito bene Volete vedere l'output in una riga con una virgola come separatore. Poi invece di

System.out.println(arr[i]); 

Prova

System.out.print(arr[i]+","); 

e rimuovere ultima virgola in qualche modo.

1
import java.util.List; 
import java.util.ArrayList; 

List<String> listEmail = new ArrayList<String>(); 

while (rs.next()) { 
    listEmail.add(rs.getString("EM_ID")); 
} 
//listEmail,toString() will look like this: [[email protected], [email protected]] 
//So lets replace the brackets and remove the whitspaces 
//You can do this in less steps if you want: 
String result = listEmail.toString(); 
     result = result.replace("[", "\""); 
     result = result.replace("]", "\""); 
     result = result.replace(" ", ""); 

//your result: "[email protected],[email protected]" 
//If the spaces are e problem just use the string function to remove them 

Btw si può utilizzare al posto di BCC CC in termini di privacy ....

Inoltre si dovrebbe mai usare SELECT * FROM foo; Migliore utilizzo SELECT EM_ID FROM pippo; Questo ti dà un significativo aumento delle prestazioni in una tabella enorme, dal momento che il ResultSet è costituito solo dalle informazioni che hai veramente bisogno e utilizzare ...