2013-04-19 19 views
5

Konieczne jest przekonwertowanie wyniku mojego wyniku na tablicę ciągów. Czytam adresy e-mail z bazy danych i muszę być w stanie wysłać je jak:Konwertuj zestaw wyników na ciąg tablicowy

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

Oto mój kod do czytania adresy email:

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 jest:

[email protected] 
[email protected] 

muszę to tak:

[email protected],[email protected] 

Używam Oracle 11g.

+1

Dla mnie wygląda na to, że podział działa poprawnie, ale wydruk będzie ZAWSZE być w jednym wierszu na element w tablicy (tak jak używasz System.out.println(). Nie chcesz dodać wyników podziału do StringBuilder, a następnie System.out.println(), że? – DaveH

+0

Czy to prawda, że ​​Yu ma rację: – ErrorNotFoundException

Odpowiedz

8

aby uzyskać pożądany wynik:

zastąpić te linie

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]); 
    } 
} 

przez

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

+1 Wydaje się, że to właściwe podejście: zamiast ustalać konsekwencje podziału, w pierwszej kolejności unikaj podziału! Nie zapomnij powiedzieć OP, że 'arr' nie jest już dłużej tablica ciągów, ale pojedynczy ciąg, który on chce. – dasblinkenlight

+0

@dasblinkenlight tak, dziękuję za to, że wskazałeś! :) – codeMan

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

Zamiast używać:

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

nie trzeba arr = em.split("\n"); ponieważ jesteś zapętlenie poprzez każdego wiersza (przy założeniu, że 1 row address = 1 e-mail) po prostu trzeba to:

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

Twoja tablica nie jest początkowa i jest teraz sposób na odzyskanie liczby wierszy zwróconych bez powtarzania ich wszystkich. – Terraego

+0

Przepraszam za to, zaktualizowałem odpowiedź – Stephan

1

Jeśli dobrze rozumiem, chcesz zobaczyć wyjście w jednej linii z przecinkiem jako separator. Wtedy zamiast

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

Spróbuj

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

i usunąć ostatni przecinek jakoś.

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],ab[email protected]" 
//If the spaces are e problem just use the string function to remove them 

Btw może powinien używać zamiast CC BCC w zakresie ochrony prywatności ....

Również nigdy nie należy używać SELECT * FROM foo; Lepsze użycie SELECT EM_ID FROM foo; Daje to znaczący wzrost wydajności w ogromnej tabeli, ponieważ ResultSet składa się tylko z informacji, których naprawdę potrzebujesz i używa ...