2013-04-19 23 views
5

結果セットを文字列の配列に変換する必要があります。私は、データベースからの電子メールアドレスを読んでいると私は好きなそれらを送信できるようにする必要があります。ここでは結果セットを文字列配列に変換する

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

は、電子メールアドレスを読み取るための私のコードです:

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] 

私はこのようにそれを必要とする:

[email protected],[email protected] 

私はOracle 11gを使用しています。

+1

私には分割が正しく機能しているようですが、印刷出力は常に(System.out.println()を使用している場合は、配列内の項目ごとに1行にしてください。)Splitの結果をStringBuilderに追加し、System.out.println()にそれを追加したくないのですか? – DaveH

+0

Yuは正しいですか? – ErrorNotFoundException

答えて

8

は、所望の出力を得るために:

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

+1スプリットの結果を修正するのではなく、最初に分割しないようにするのが正しい方法だと思います!「arr」はもうOPではないことを忘れないでください文字列の配列ですが、望む単一の文字列 – dasblinkenlight

+0

@dasblinkenlightはい、ありがとうございます!:) – codeMan

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

代わりに使用します。

System.out.print(arr[i] + ","); 
1
により、これらのライン

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

を置き換えますあなたはあなただけの必要があります(1行= 1つのメールアドレスと仮定して)各行をループしているので、

あなたはarr = em.split("\n");を必要としないこの:私はあなたがコンマで1行で出力を確認したい正しく理解していれば

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

あなたの配列は初期ではありませんこれで、すべての行を繰り返し処理することなく、返される行の数を取得する方法があります。 – Terraego

+0

申し訳ありませんが、私は答えを更新しました – Stephan

1

セパレータとして。 そして、代わりの

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

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

を試してみて、何とか最後のカンマを削除します。

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 

ところであなたはプライバシーの面で代わりCCのBCCを使用する必要があるかもしれ....

また、あなたがfoo FROM SELECT *を使用しないでください。 より良い使用 SELECT EM_ID FROM foo; ResultSetは本当に必要な情報で構成されているだけなので、巨大なテーブルのパフォーマンスが大幅に向上します。

関連する問題