这是定义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块来关闭您的外部资源,您的代码是一个巨大的内存泄漏。
如果您有一个ArrayList
,那么您就不需要再使用数组了,实际上ArrayList
是由Array
本身及其动态大小支持的。
List<String> emailAddress= new ArrayList<String>(); // dynamic array
...
while(rs.next()){
emailAddress.add((rs.getString("EmailAddress"));
...
}
return emailAddress.toArray(new String[emailAddress.size()]); // creating array of String type
并且CCD_ 11将CCD_ 12转换为CCD_。
将其声明为
ArrayList<String> emailAddress= new ArrayList<String>();
...
emailAddress.add((rs.getString("EmailAddress"));
将其转换为String[]:
return emailAddress.toArray(new String[emailAddress.size()]);
您在代码中错误地使用了ArrayList。定义时
ArrayList<String> strArrEmailIds = new ArrayList<String>();
String[] emailAddress= new String[strArrEmailIds.size()];
strArrEmailIds.toArray(emailAddress);
默认情况下,strArrEmailIds
的大小为0,因此生成的emailAddress
数组的长度也为0。稍后在while循环中,如果您试图将值分配给emailAddress[0]
,它将抛出ArrayIndexOutOfBoundsException
。
相反,正确的方法是:
ArrayList<String> strArrEmailIds = new ArrayList<String>();
//....
while(rs.next()){
//....
strArrEmailIds.add(rs.getString("EmailAddress"));
}
//....
String[] emailAddress = strArrEmailIds.toArray(new String[strArrEmailIds.size()]);
java.lang.ArrayIndexOutOfBoundsException: 0 if your result set goes beyond 25 itteration.
如何将array
转换为ArrayList
Arrays.asList(myArray)
在你的情况下,你可以有一个list
,在resulset
列表中,你可以像一样将它们添加到列表中
List<String> emails = new ArrayList<String>();
while(...){
emails.add(rs.getString("EmailAddress"));
}