1

現在、以下のコードがあります。オブジェクトから文字列にキャストしようとすると、例外エラーが発生します。

このObject配列からString配列に変換して、forループで機能するようにするための最良の方法は何ですか?または、forループを変更してオブジェクト配列を表示する方法はありますか?

<%

          Class.forName("org.sqlite.JDBC");
            Connection conn = DriverManager.getConnection("jdbc:sqlite:/Users/rhysparker/Documents/workspace/Resource_Planner/WebContent/db/RESOURCE.SQLITE");
                Statement stat = conn.createStatement();

                ArrayList<ArrayList<String>> al = new ArrayList<ArrayList<String>>();

                ResultSet rs = stat.executeQuery("select project_name from project;");

                ResultSetMetaData metaData = rs.getMetaData();
                int columns = metaData.getColumnCount();

                while (rs.next()) {
                    ArrayList<String> record = new ArrayList<String>();
                    for (int i = 1; i <= columns; i++) {
                        String value = rs.getString(i);
                        record.add(value);
                    }
                    al.add(record);
                }

                String[] testing = (String[])al.toArray();

                for(int i=0;i<testing.length;i++) 
                { %> 
                <option value="<%=testing[i]%>"><%=testing[i]%></option><% 
                } 

                rs.close();
               conn.close();
            %>
4

4 に答える 4

2
 I get an exception error.

はいalのタイプなのでArrayList<String> ArrayList<ArrayList<String>> al = new ArrayList<ArrayList<String>>();

そして、あなたはそれを文字列の配列にキャストしています

String[] testing = (String[])al.toArray();

したがって、実行時に。のように例外をスローします。

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

内部配列リストを追加する場合は、Arraylist型チェックを保証する責任があります。

あなたは次のようなことをすることができます:

for (ArrayList<String> list: al)
 {
    String[] testing = list.toArray(new String[0]); // or (String[]) arr.toArray();
    for(int i=0;i<testing.length;i++) 
     { %> 
        <option value="<%=testing[i]%>"><%=testing[i]%></option><% 
     }
 }
于 2013-02-14T06:15:47.807 に答える
0
ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
String[] array = (String[])list.toArray(new String[list.size()]);

このような意味ですか?これを試してみてください。

于 2013-02-14T06:08:03.027 に答える
0

これは、あなたalが多次元であるためです(ArrayListのArrayList-データベーステーブルを含む-私は推測します)以下のコードは、配列
を埋めるのに役立ちますtesting

int maxColumn = 100;    //Assuming not more than 100 columns
int rowSize = a1.size();
String[] s1 = new String[maxColumn];
String[][] testing = new String[rowSize][maxColumn];    
for(int i=0; i<rowSize; i++)
{
    ArrayList a1 = al.get(i);
    s1 = a1.toArray();
    for(int j=0; j<s1.length; j++)
        testing[i][j] = s1[j];
}

testingテーブルレコードを持つ2次元配列です。<option>ここで、重要なフィールドでどの列に割り当てる必要があるかを割り当てる
必要があると言ってくださいcolumn 3
for-loop

for(int i=0;i<rowSize;i++) 
{ %> 
    <option value="<%= testing[i][3] %>"><%=testing[i]%></option>
<% } 
于 2013-02-14T06:33:19.150 に答える
0

変換しているarraylist内の要素は、もちろんキャストできないal型であるため、例外が発生します。ArrayList<String>String[]

alリストはタイプであるため、コードを機能させるには2次元配列を使用する必要がありますArrayList<ArrayList<String>>。つまり、リスト内の要素は、次を含む別のリストです。String

To solve your problem, you must manually loop through your list then convert each element (which is ArrayList<String>) into String[]

int yLen = al.size();
        int xLen = al.get(0).size();
        String[][] testing = new String[yLen][xLen];
        for(int a = 0; a < yLen; a++){
            testing[a] = al.get(a).toArray(testing[a]);
        }
于 2013-02-14T06:46:22.803 に答える