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

こんにちは
今オーバーロードやメソッドについて学習中です

今回作成したのはDB接続の 処理をするほうのクラスなのですが

同じソースはひとつにまとめろといわれました
自分なりに メソッドを作ってまとめてみたのですが
まだだめなようです
あとどのようにまとめれば 良いとおもいますか?
例文なども出していただけると助かります

一部ソースのせます


public String[][] selectExec(String sql, int fromIdx) 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>();
//NAME用
ArrayList<String> KANA = new ArrayList<String>();
//KANA用

aa.relative(fromIdx-1);
//カーソルの位置を移動

while(aa.next()){

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


hairetu(TESTNO,NAME,KANA); //配列に収納するメソッド呼び出し

return hairetu(TESTNO,NAME,KANA);
}




/*
* すべての行を取得
*/


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{

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>();
//NAME用
ArrayList<String> KANA = new ArrayList<String>();
//KANA用
aa.relative(fromIdx);

while(fromIdx<=toIdx){
TESTNO.add(aa.getString("TESTNO"));
NAME.add(aa.getString("NAME"));
KANA.add(aa.getString("KANA"));

aa.next();
fromIdx++;
}

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


return hairetu(TESTNO,NAME,KANA);
}





public String[][] hairetu(ArrayList T,ArrayList N ,ArrayList 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;

}/*
リストから配列に収納するメソッド。
配列でリターンします
*/


下のhairetuメソッドはあとから作成しました。
もうひとつ作ったのですが

TEST(TESTNO,aa,"TESTNO");
TEST(NAME,aa,"NAME");
TEST(KANA,aa,"KANA");

呼び出し↑

メソッド

public ArrayList TEST(ArrayList T,ResultSet a ,String s) throws SQLException{

T.add(a.getString(s));//リストにSQL文を収納

return T;
}
これは却下されました


見づらいとは思いますが いろいろアドバイスください

A 回答 (2件)

オーバーロードを上手に使えば1/3程度にまで削れます。




String.indexOfメソッドを例にして考えます。
indexOfメソッドは4つのオーバーロードがありますが、そのうちの2つについて定義を見てみます。

(1)int indexOf(String str, int fromIndex)
 文字列の中をfromIndex文字目から検索し、
 指定された文字列(str)が最初に出てくる場所を探します。

(2)int indexOf(String str)
 文字列の中を0文字目から検索し、
 指定された文字列(str)が最初に出てくる場所を探します。

ここで、(1)と(2)をよく見比べてみましょう。
(2)は、(1)のfromIndexに0を指定したものと同じ意味です。
したがって、(2)は以下のように定義することができます。
  public int indexOf(String str){
    //fromIndexが指定されていないときは、デフォルト値としてfromIndex=0とする
    return indexOf(str, 0);
  }
たった3行でメソッドが定義できます。


このテクニックを使うことで、ソースがコンパクトで読みやすいものとなりますし、
あとから処理の内容を変える必要が出ても、あちこち直さずに済みます。

「selectExec(String sql)」と「selectExec(String sql, int fromIdx)」を、
「selectExec(String sql, int fromIdx, int toIdx)」を使って表せるように工夫してみましょう。

この回答への補足

すっっごくわかりやすいです!!!

根本的に考え方が間違ってたのがわかりました・・・

int fromIdxの部分で カーソルを最後までいかすにはどうしたらいいかと
試行錯誤しています

int toIdxは指定してあげればいいとおもうのですが。
またお時間空いたときよかったらアドバイスください。

補足日時:2013/04/09 09:29
    • good
    • 0
この回答へのお礼

int fromIdx int toIdx が逆でした><

お礼日時:2013/04/09 09:52

selectExecが複数あるので、1つに処理をまとめてほしい。


TESTNO、NAME、KANAの他にも必要になった場合、3箇所も直すのは修正漏れがでそうなので。
あと、個人的にはこのメソッドのthrows SQLExceptionはNo。呼び出し側へ隠蔽すべきだと思う。
    • good
    • 0
この回答へのお礼

わかりやすくありがとうございます。
まだまだオーバーロードのことがわかってないようですね
これからも勉強したいと思います!!

お礼日時:2013/04/09 09:37

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