这里是定义 String-Array (25) 的原始代码。它工作得很好。但我不需要将其定义为25。相反,我使用了arraylist。请检查我的代码。
使用数组字符串:
public String[] getemailAddr(String strAccountnbr) throws Exception {
String strQuery2 = null;
ResultSet rs = null;
PreparedStatement ps = null;
String[] emailAddress = new String[25];
int i=0;
strQuery2 = "SELECT c.EmailAddress AS EmailAddress" +
" FROM customeremailid c " +
"WHERE c.AccountNbr = ? " ;
logMsg("strQuery2: "+strQuery2);
ps = getDBConn().prepareStatement(strQuery2);
ps.setString(1, strAccountnbr);
rs = ps.executeQuery();
while(rs.next())
{
emailAddress[i]=(rs.getString("EmailAddress"));
logMsg("emailAddress[i]"+" "+i+": "+emailAddress[i]);
i=i+1;
}
return emailAddress;
}
这里,我需要将 String-Array 更改为 Arraylist。我尝试过这样的事情,
public String[] getemailAddr(String strAccountnbr) throws Exception {
String strQuery2 = null;
ResultSet rs = null;
PreparedStatement ps = null;
//Newly tried //
ArrayList<String> strArrEmailIds = new ArrayList<String>();
String[] emailAddress= new String[strArrEmailIds.size()];
strArrEmailIds.toArray(emailAddress);
//Newly tried //
int i=0;
strQuery2 = "SELECT c.EmailAddress AS EmailAddress" +
" FROM customeremailid c " +
"WHERE c.AccountNbr = ? " ;
logMsg("strQuery2: "+strQuery2);
ps = getDBConn().prepareStatement(strQuery2);
ps.setString(1, strAccountnbr);
rs = ps.executeQuery();
while(rs.next())
{
emailAddress[i]=(rs.getString("EmailAddress"));
logMsg("emailAddress[i]"+" "+i+": "+emailAddress[i]);
i=i+1;
}
return emailAddress;
}
电子邮件 ID 是从数据库而不是 example.com 获取的。
但是我得到了
java.lang.ArrayIndexOutOfBoundsException:0 错误
在这一行。
emailAddress[i]=(rs.getString("EmailAddress"));
请帮忙!
最佳答案
这不是使用 ArrayList
的方式。
首先,你需要写:
List<String> strArrEmailIds = new ArrayList<>();
因此,对接口(interface)
进行编程并使用 Java 7 菱形运算符。
接下来,删除索引i
。你不需要这个。
最后,只需执行以下操作:
emailAddress.add(rs.getString("EmailAddress"));
要将其转换回 String[]
,您可以执行以下操作:
String[] arr = emailAddress.toArray(new String[emailAddress.size()]);
这是我对您最终代码的建议:
public String[] getemailAddr(String strAccountnbr) throws Exception {
final List<String> emailAddress = new ArrayList<>();
final String strQuery2 = "SELECT c.EmailAddress AS EmailAddress"
+ " FROM customeremailid c "
+ "WHERE c.AccountNbr = ? ";
try (final PreparedStatement ps = getDBConn().prepareStatement(strQuery2)) {
ps.setString(1, strAccountnbr);
try (final ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
emailAddress.add(rs.getString("EmailAddress"));
}
}
}
return emailAddress.toArray(new String[emailAddress.size()]);
}
我已删除了您对 null
的无意义分配。我添加了 try-with-resources block 来关闭您的外部资源,您的代码是一个巨大的内存泄漏。
关于java - java中如何将String数组改为ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24301857/