0

こんにちは、データベースから値を取得するこのクラスがあります。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class EmailAlerts {


    public static void main(String[] args) {
SMTPAuthenticator sm = new SMTPAuthenticator();//new class
        Connection conn = null;
        String AtmName = "";
        String AtmBal = "";
        String atmsend = "";
        String[] bals = null;
 try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.80:1521:dev9i", "BI", "bi");
            Statement st1 = conn.createStatement();
            String atms = "select CLR_BAL_AMT, FORACID, ACCT_NAME from gam "
                    + "where BACID = 'ATM' and CLR_BAL_AMT < 100000";
            ResultSet rs1 = st1.executeQuery(atms);
            while (rs1.next()) {
                AtmName = rs1.getString("ACCT_NAME");
                AtmBal = rs1.getString("CLR_BAL_AMT");
                bals = AtmBal.split("\n");
                for (int j = 0; j < bals.length; j++) {
                    atmsend = AtmName + "-" + AtmBal;
                    //System.out.println(atmsend);
                }

            }
            System.out.println(atmsend);
}catch(Exception ad){
System.out.println(ad);
}

}
}

While ループの外側で変数「atmsend」を出力しようとすると、データベースの最後の値のみが表示されますが、for ループの内側では、データベースのすべてのレコードが表示されます。データベースのすべてのレコードを While ループの外に置くにはどうすればよいですか?

4

4 に答える 4

2

データベースからのすべての値を変数に入れたい場合は、atmsend次のコードを変更します。

atmsend = AtmName + "-" + AtmBal;

推奨されていませんが、これに:

atmsend += AtmName + "-" + AtmBal + "\n";

を使用するArrayList<String>代わりに、を使用して、その内部のすべての値を繰り返しながら追加できます。String

于 2012-12-03T11:00:00.430 に答える
1
atmsend = atmsend + AtmName + "-" + AtmBal +"\n";
于 2012-12-03T10:55:33.607 に答える
1
ArrayList <String> atmsend= new ArrayList<>();

Use Arraylist

 while (rs1.next()) {
                AtmName = rs1.getString("ACCT_NAME");
                AtmBal = rs1.getString("CLR_BAL_AMT");
                bals = AtmBal.split("\n");
                for (int j = 0; j < bals.length; j++) {
                    atmsend.add(AtmName + "-" + AtmBal+"\n");
                    //System.out.println(atmsend);
                }

System.out.println(atmsend.toString());
于 2012-12-03T11:00:26.883 に答える
0

atmsend を文字列配列として宣言する

 String[] atmsend = null;

whileループ内に値を格納するとき

atmsend[i] = AtmName + "-" + AtmBal;

文字列の結果を取得するには

for(int i=0;i<atmsend.length();i++)
{
SYstem.out.println(atmsend[i]);
}
于 2012-12-03T11:03:34.763 に答える