com.itextpdf.text.DocumentException:java.lang.ArrayStoreException
Q值。当尝试下面的代码尝试将ArrayList更改为String []数组类型时,发生异常。我不知道出了什么问题。
try {
Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost/falg_check";
con = DriverManager.getConnection(url,"root", "root");
stmt = con.createStatement();
rs4 = stmt.executeQuery("SELECT * from records");
String[] arrayOfStrings;
ArrayList<String[]> name=new ArrayList<String[]>();
while(rs4.next()){
String insert =rs4.getString("name");
final String[] res={insert};
name.add(res);
}
//Object[] x=name.toArray();
arrayOfStrings = name.toArray(new String[name.size()]); //<---------------
}
catch(Exception e) {
System.out.println(ioe);
throw new ExceptionConverter(ioe);
}
EDIT:
* 我需要一维数组,以便我可以将这些值放在text.setChoices(arrayOfStrings)中;它通过JAVA在PDF文件的下拉菜单中设置选项。 *
编辑:如何不重复。
我希望ArrayList使用String Array更改引用中的类型,而stackoverflow上的任何问题都不是这样。而且我也想要单维数组。理解2D int Array和线性String Array之间的区别并不太难。可能是概念与其他几种类型的转换问题相匹配,但它是部分/条件不同的问题。
答案 0 :(得分:3)
您已定义
ArrayList<String[]> name=new ArrayList<String[]>()
当您调用name.toArray()
时,您将获得原始列表所包含类型的元素数组。由于您的列表包含String[]
个实例,name.toArray()
会返回String[][]
,即一个String 数组的数组,而不是一个字符串数组。
因此,您实际上必须使用该字符串数组数组:
String[][] arrayOfStrings;
...
arrayOfStrings = name.toArray(new String[name.size()][]);
或者您使用字符串列表而不是字符串数组列表:
ArrayList<String> name=new ArrayList<String>();
while(rs4.next())
{
String insert = rs4.getString("name");
name.add(insert);
}
或者在转换为数组之前将String数组列表展平为字符串列表:
String[] arrayOfStrings;
ArrayList<String[]> name = new ArrayList<String[]>();
while(rs4.next())
{
String insert = rs4.getString("name");
final String[] res={insert};
name.add(res);
}
....
ArrayList<String> intermediate = new ArrayList<String>();
for (String[] stringArray: name)
{
if (stringArray != null)
{
intermediate.addAll(java.util.Arrays.asList(stringArray));
}
}
arrayOfStrings = intermediate.toArray(new String[name.size()]);