Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(メソッド オーバーロード ete)
閲覧数:1085
掲示板(メソッド オーバーロード ete)
名前
匿名
題名 メソッド オーバーロード ete
質問内容

質問を評価する
(0ポイント)
こんにちは
今オーバーロードやメソッドについて学習中です

今回作成したのは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;
}
これは却下されました


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

質問日時 2013-04-08 17:52:37
名前
匿名
回答内容

回答を評価する
(0ポイント)
3つのメソッドで、同じところはどこか。
本当にそれらはまとめられないのか。
回答日時 2013-04-08 21:02:01
名前
匿名
回答内容

回答を評価する
(0ポイント)
質問者です

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

の部分は 同じだとおもうのですがメソッドは作らないほうがいいですよね??

戻り値とかのことも考えていると どれをうまくまとめれるか・・・
勉強不足ですね・・・
回答日時 2013-04-08 21:37:44
名前
匿名
回答内容

回答を評価する
(0ポイント)
>メソッドは作らないほうがいいですよね??
なぜそう思うかも書かなきゃ。
重要なのは答えじゃなくて、考え方だよ。
回答日時 2013-04-09 07:28:09
名前
匿名
回答内容

回答を評価する
(0ポイント)
質問者です
そのメソッドでのみ使われるものを生成するので
まとめるのはよくないという考え方です

その考え方でよろしいです・・か?

考え方や指向が難しいですね
回答日時 2013-04-09 09:28:33
名前
匿名
回答内容

回答を評価する
(0ポイント)
質問者です
根本的に考えが間違っていたようです

「selectExec(String sql)」と「selectExec(String sql, int fromIdx)」から、
「selectExec(String sql, int fromIdx, int toIdx)」
を呼び出す形にするんだと気がつきました・・・

int fromIdxは読み込むカーソルの位置なので
指定してあげれば大丈夫なのですが
int toIdxで最後までカーソルを呼び出すには何をいれればいいのでしょうか?
質問がかわってしまいましたが
よろしくお願いいたします

メソッドの引数の記述は変えないようなので試行錯誤してます
回答日時 2013-04-09 09:57:17
名前
匿名
回答内容

回答を評価する
(0ポイント)
自分で気づいたか。
そういう作りになってるのは、標準ライブラリにも沢山ある
よ。

toがないものは、「最後のインデックス」までだろう。
toが実際の行数より多いときの考慮がそもそも抜けてるか
ら、それも併せて考えてみれば。
回答日時 2013-04-09 10:10:27
名前
匿名
回答内容

回答を評価する
(0ポイント)
質問者です
改善してみましたが
今回はDBが10行しかないので 
10指定しましたが・・・
これでは使えないのと同じですよね・・

/*
     * 指定された行から取得
    */
    public String[][] selectExec(String sql, int fromIdx) throws SQLException{
    
        return  selectExec(sql,fromIdx,10);
    }
    
    
    
    /*
     * すべての行を取得
    */
    public String[][] selectExec(String sql) throws SQLException{
        
        return  selectExec(sql,1,10);
    
        
    
    
    }
    /*
     * 指定された行から行を取得
    */
    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;
        
    }/*
    リストから配列に収納するメソッド。
    配列でリターンします
    */
    
    
    }
回答日時 2013-04-09 10:12:44
名前
匿名
回答内容

回答を評価する
(0ポイント)
例えば今、toに20を渡したらどうなると思う?
それを先に考えてみよう。
その上で、あり得ない大きい数をtoに渡せば、実質的に「最
後まで」の意味になる。
回答日時 2013-04-09 12:00:03
名前
匿名
回答内容

回答を評価する
(30ポイント)
なるほど。。。。
ちょっと試行錯誤しながらやってみます!!
ありがとうございます
回答日時 2013-04-09 17:41:13
名前
匿名
回答内容

回答を評価する
(0ポイント)
質問以外出来になった点

・変数、定数の命名方法を Java標準に最低限合わせたほ
うがいい。
・引数に総称型を付けれる場合はちゃんと付ける。


回答日時 2013-04-09 18:17:06
名前
匿名
回答内容

回答を評価する
(0ポイント)
質問者です

変数とかはちゃんとめいめいしてあげたほうが見やすくなりますよね・・・・
ありがとうございます!!
回答日時 2013-04-10 09:31:27
名前
匿名
回答内容

回答を評価する
(0ポイント)
意味が取りやすい名前なのはもちろん、Javaでは(他の多く
の言語でも)
大文字小文字をどう使うかの作法があるんだよ。
動きという点では違いはないがね。
回答日時 2013-04-10 20:42:11

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道