こんにちは
今オーバーロードやメソッドについて学習中です
今回作成したのは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;
}
これは却下されました
見づらいとは思いますが いろいろアドバイスください
No.1ベストアンサー
- 回答日時:
オーバーロードを上手に使えば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は指定してあげればいいとおもうのですが。
またお時間空いたときよかったらアドバイスください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでの[]
-
getParameter()について
-
VB.netでメソッドからコントロ...
-
サーブレットコンテキストの意...
-
エクセルVBA 画像を貼り付ける...
-
Vba ListViewの行挿入に関して...
-
Excel VBA 定数にオブジェクト...
-
String型からlong型への変換は...
-
VB.NETでのnothing の意義について
-
javaで、、、
-
Javaでブラウザ判定
-
Dispose()は、どんな時に使うの...
-
Calendarクラスでエラーがでる
-
SocketでXMLオブジェクトを送信...
-
C#のXmlDocumentについて
-
UTF-8のテキストファイルを開く...
-
servletからjspへオブジェクト...
-
メソッド オーバーロード ete
-
C#でのExcel操作について.(Ran...
-
Javaの問題なんですが、何故cme...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サーブレットコンテキストの意...
-
エクセルVBA 画像を貼り付ける...
-
servletからjspへオブジェクト...
-
JSPでのArrayListの表示につい...
-
VB.netでメソッドからコントロ...
-
VBAでの[]
-
javaで、、、
-
C#のクラスで値渡しをする
-
Excel VBA 定数にオブジェクト...
-
Dispose()は、どんな時に使うの...
-
Vba ListViewの行挿入に関して...
-
Javaでブラウザ判定
-
VB.NETでのnothing の意義について
-
getParameter()について
-
PrintFormを使用してのプリント
-
ピクチャーボックスに点を打つ...
-
String型からlong型への変換は...
-
drawStringの座標について
-
エクセルVBA/SpecialCellsで特...
-
GridViewに行追加するには?
おすすめ情報