SQL文を引数にしてDBから受け取った3*10行のデータを二次元配列に格納し出力する問題を解いています。
メソッドの返り値はString[][]が指定されていて、listに格納し、配列に変換する際に表題のエラーが出てしまいます。
取得したデータをlistに入れる
→二次元listsにlistを入れる
→listを配列に変換
→nextで最後の行まで繰り返す
→二次元listsを配列に変換
という流れでやってみようと考えています。
よろしくお願いします。
発生している問題・エラーメッセージ
Exception in thread "main" java.lang.ArrayStoreException at java.lang.System.arraycopy(Native Method) at java.util.ArrayList.toArray(ArrayList.java:412) at studyb.B14_DBAccess.selectExec(B14_DBAccess.java:108) at studyb.B14_exec.main(B14_exec.java:25)
DBAccess.java
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; public String[][] selectExec(String sql){ ArrayList<ArrayList<String>> lists = new ArrayList<ArrayList<String>>(); try { conn = DriverManager.getConnection(url, user, password); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); while(rs.next()) { ArrayList<String> list = new ArrayList<>(); list.add(rs.getString("TESTNO")); list.add(rs.getString("NAME")); list.add(rs.getString("KANA")); lists.add(list); list.toArray(new String[list.size()]); } } catch(SQLException e) { e.printStackTrace(); } String[][] arrays = lists.toArray(new String[lists.size()][]); return arrays; }
exec.java
public class B14_exec { public static void main(String[] args) { B14_DBAccess dba = new B14_DBAccess(); dba.connect(); String sql = "select * from TESTTABLE1"; String[][] arrays = dba.selectExec(sql); for(int i=0; i<arrays.length; i++) { for(int j=0; j<arrays[0].length; j++) { System.out.print(arrays[i][j] + "\t"); } System.out.print("\n"); } dba.disconnect(); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/11/07 05:51