- - PR -
Beansで(String[] args)を使ったデータアクセス用のクラスを作りたい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-10-13 10:42
こんにちは。できるかどうかもわかりませんが、
public static void main(String args[]){ } よくみかける上記のような、引数をargs[i]を使って受け取れるクラスを作り、 ResultSetを返すメソッドを作りたいのです。下の様なイメージです。 package kamiBeans; import java.sql.*; public class PreDbAccess { final static int connection_try_count=10; private Connection connection=null; private ConnectionPool connectionPool; private PreparedStatement st=null;//準備済みsql /** * デフォルトのコンストラクタ * ConnectionPoolのインスタンスを取得する * */ public PreDbAccess() throws Exception{ connection=null; connectionPool=ConnectionPool.getInstance(); } /** * preparedStatementにsqlを埋め込む * @param sql * @throws Exception */ public void setPreSt(String sql) throws Exception{ getConnection(); try{ st=connection.prepareStatement(sql); }catch(Exception e){ releaseConnection(); throw e; } } /** * prepareStatementにパラメータを渡してResultSetを受け取る * @param param[] * @return ResultSet * @throws SQLException */ public ResultSet getRs(String param[]) throws Exception{ for(int i=1;i<param.length+1;i++){ st.setString(i,param[i-1]); } return st.executeQuery(); } /** * prepareStatementにパラメータを渡して実行クエリ * @param args * @throws SQLException */ public void exeSql(String args[]) throws SQLException{ for(int i=1;i<args.length+1;i++){ st.setString(i,args[i-1]); } st.executeUpdate(); } /** * コネクションをプールから取得する * */ private void getConnection()throws Exception{ connection=connectionPool.getConnection(connection_try_count); if(connection==null){ throw new Exception("Can't get DB Connection"); } } /** * コネクションをプールに返却する */ private void releaseConnection(){ if(connection!=null){ connectionPool.releaseConnection(connection); } } /** * なんらかの理由でコネクションの返却洩れが発生しないように * デストラクトされる前にreleaseConnection を実行するようにする */ protected void finalize(){ releaseConnection(); } } /********* 上記のクラスを使う側 **********/ PreDbAccess pd=new PreDbAccess(); pd.setPreSt("select * from testTable where id=? and id2=?"); ResultSet rs=pd.getRs(1,1);//ここでid1とid2に引数を渡してResultSetを受け取りたい ごちゃごちゃしてて申し訳ないのですが、String args[]はmainメソッド以外では使えないのでしょうか?eclipseでエラー 「引数(String,String)に適用できません」が出ます。 メソッドに複数の、しかも個数が変動する引数を渡したい場合は皆様はどうなさってるかを参考にさせていただきたいのです。よろしくお願いします。 | ||||||||
|
投稿日時: 2004-10-13 10:52
ほとんど読んでないですけど…。
PreDbAccess#getRs(String[] param) は String配列の引数を 1つだけ受け取るので、getRs(string1, string2) のように String 引数を 2つ渡すことはできません。
型がすべて同じなら そのクラスの配列。今回のようにすべて文字列なら String[] ね。型が異なるなら共通のスーパークラス(インターフェイス)配列。究極的には Object[] ね。 とりあえず、Java の基本が分かってないみたいだから。プログラムが受け取った引数を(行を分けて)コンソールに表示するメソッドでも書いてみたら?
| ||||||||
|
投稿日時: 2004-10-13 11:08
ご返答ありがとうございます。ちょっと配列を勉強しなおしました。やっぱり配列を作って配列をわたすしかないんでしょうか。Stringの引数をひとつ渡して解析し、コンマで区切ったところで違う配列に分けるようなメソッドに改造したりするのは効率悪いですよね?
| ||||||||
|
投稿日時: 2004-10-13 11:11
あいつーです。
new String[]{"1","1"} とか? | ||||||||
|
投稿日時: 2004-10-13 11:31
個数が変動する引数を渡したい場合どうしているか? と問われたので配列を使うと答えただけです。「配列をわたすしか」方法がないわけではありません。j2se 5 では可変長引数がサポートされていますので、どーしても可変長引数を渡したいのなら j2se 5 でも使ったらいい。 それと、String args[] というシンタックスシュガーを使った書き方は好ましくないのでやめたほうがいいです。正しく String[] args と書くクセをつけたほうがいいと思います。 | ||||||||
|
投稿日時: 2004-10-13 21:24
引数を配列じゃなくてListにするとかIteratorにするってのはどうですか?
| ||||||||
|
投稿日時: 2004-10-18 09:05
皆様ご返答ありがとうございます。あいつーさんの引数に
new String[]{str1,str2} を渡すのがシンプルでいいかなと思い、この方法でいこうと思います。 ありがとうございました。 | ||||||||
|
投稿日時: 2004-10-18 13:48
これ、String型の配列のサイズが2で固定されますけど、それはお分かりですか? 元々渡したいデータの数が2で固定だと分かっているなら、そもそも配列の必要は 無さそうですが。 |