電子書籍の厳選無料作品が豊富!

こんにちは 今DB接続し DBからデータを表示するのを勉強しています

public String[][] selectExec(String sql) throws SQLException{

Statement smt = con.createStatement();
//ステートメントオブジェクト作成 SQL文を送るために作成
ResultSet aa=smt.executeQuery(sql);
//SQLから要素取得

ArrayList<String> TESTNO = new ArrayList<String>();
//TESTNO用ののArrayList作成
ArrayList<String> NAME = new ArrayList<String>();
//KAME用
ArrayList<String> KANA = new ArrayList<String>();
//KANA用



while(aa.next()){//Resultsetが最終行になるまで実行
TESTNO.add(aa.getString("TESTNO"));
NAME.add(aa.getString("NAME"));
KANA.add(aa.getString("KANA"));
}



aa.close(); //使い終わったリザルトクローズ
smt.close(); //ステートメントクローズ      //オブジェクトの解放



return hairetu(TESTNO,NAME,KANA);

public String[][] selectExec(String sql, int fromIdx,int toIdx) throws SQLException{

String[][]all=selectExec(sql);

ArrayList list = new ArrayList(Arrays.asList(all[0]));
ArrayList list1 = new ArrayList(Arrays.asList(all[1]));
ArrayList list2= new ArrayList(Arrays.asList(all[2]));

int i=1;
while(i<fromIdx){ //指定された前のリスト削除
list.remove(0);
list1.remove(0);
list2.remove(0);
i++;
}

while(toIdx<list .size()){//指定されたあとのリスト削除
list .remove(toIdx);
list1.remove(toIdx);
list2.remove(toIdx);
toIdx++;
}
return hairetu(list ,list1,list2);

public String[][] hairetu(ArrayList T,List N ,List K){

String[][]all=new String[3][T.size()];


all[0] = (String[])T.toArray(new String[0]);//配列TSETNOに収納

all[1] = (String[])N.toArray(new String[0]);//配列NAMEに収納

all[2] = (String[])K.toArray(new String[0]);//配列KANAに収納


return all;

selectExec(String sql)で全表示

selectExec(String sql, int fromIdx,int toIdx)

で列を何行~何行を指定
でリストに変換、リスト削除して 二次元配列にもどしているのですが
たとえば
1~5を指定すると
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
6 6 6
8 8 8

↑のように
5ひとつとばしで表示されます

while文の書き方がわるいのでしょうか・・・・
アドバイスお願いします

A 回答 (1件)

指定されたあとのリスト削除がおかしい



今はこうなってる

最初
インデックス:012345678
リストの中身:012345678

ループ1週目
toIdx=5
list .size()=8
list .remove(5)
インデックス:012345678
リストの中身:012345678
インデックス5=中身5が消える

ループ2週目
toIdx=6
list .size()=7
list .remove(6)
インデックス:01234567
リストの中身:01234678
インデックス6=中身7が消える

ループ3週目
toIdx=7
list .size()=6
ループを抜ける

ループ後
インデックス:0123456
リストの中身:0123468

要素を消すのでsize()は変化します。
どうすればうまくいく良く考えてみて!
5より後を消せばいいのなら前からではなく・・・
    • good
    • 0
この回答へのお礼

むちゃくちゃわかりやすかったです!!

半日ほど悩んで 今見て気がつきました!!


public String[][] selectExec(String sql, int fromIdx,int toIdx) throws SQLException{

String[][]all=selectExec(sql);

ArrayList list = new ArrayList(Arrays.asList(all[0]));
ArrayList list1 = new ArrayList(Arrays.asList(all[1]));
ArrayList list2= new ArrayList(Arrays.asList(all[2]));

int i=1;
while(i<fromIdx){ //指定された前のリスト削除
list.remove(0);
list1.remove(0);
list2.remove(0);
i++;
}

int k =list .size();

while(toIdx<k){//指定されたあとのリスト削除
list .remove(list .size()-1);
list1.remove(list .size()-1);
list2.remove(list .size()-1);
toIdx++;
}


と変更したところ うまくいきました!!

これで大丈夫ですよね??^^

お礼日時:2013/04/09 14:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!