- - PR -
SQLファイルの実行
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-10-13 15:26
お世話になります。
DBアクセスするSQLで質問があります。 現在、SQL文をクラスファイルの中に記述しています。 やりたいのは、test.sqlを作りSQL文を定義します。 実行するときは、作成したSQLファイルを読み込んで 実行したいのです。 ※検索条件であるstrWhereの値をパラメータとして SQLファイルに渡し、 SELECT * FROM MESSAGE_TABLE WHERE DEL = 0 を実行するようなイメージです。 この場合どうコーディングしていいのか分かりません。 宜しくお願いします。 (環境:WindowsXpHome、JDK1.4.2、Access2000です。) public class TestJDBC { public static void main(String[] args) { try { // ドライバクラスをロード Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // データベースへ接続 Connection con = DriverManager.getConnection("jdbc:odbc:message"); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); // 検索条件 string = strWhere = "0"; // 全ての行を検索するSQL文を作成 String sql = "SELECT * FROM MESSAGE_TABLE WHERE DEL = "+strWhere; // クエリーを実行して結果セットを取得 ResultSet rs = stmt.executeQuery(sql); // 検索された行数分ループ while(rs.next()){ // 表示 String msg = rs.getString("MESSAGE"); System.out.println(msg); } // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } } | ||||
|
投稿日時: 2005-10-13 16:08
質問の意図から外れていたらすいません。
一点おかしなところを見つけたので // データベースから切断 stmt.close(); con.close(); この処理はcatchされた場合にも必要になります。 (catchされた場合つなぎっぱなしになるため) ですのでfinallyの中に移動した方がよろしいかと。 try { } catch { } finally { // データベースから切断 stmt.close(); con.close(); } | ||||
|
投稿日時: 2005-10-13 16:13
セイン様、ありがとうございます。
指摘して頂いて、なるほどと思いました。 やはり、SQLファイルの実行は難しいでしょうか? | ||||
|
投稿日時: 2005-10-13 16:18
質問です。
分からないのはファイルからテキスト(SQL文)の読み込み方ですか? それとももっと単純(?)に出来るSQLを操る方法がない?ですか? | ||||
|
投稿日時: 2005-10-13 16:18
もし、目的がSQLを外部管理するといったところにあるのであれば、
自作するよりフレームワーク等を使ったほうが早いかと思います。 iBATISあたりは、SQLが書けてクラスとのマッピングをしてくれるので 便利ですよ。(最近は日本語サイトでも色々と取り上げられてますし。) http://ibatis.apache.org/ SQLはXMLで管理され、SQLの条件分岐についても色々なバリエーションを サポートしています。SQLの実行も全部きちんとPreapredStatementで してくれ、コネクションのclose処理等もこちらが意識することはありません。 実現したいことを外してたらごめんなさい。 | ||||
|
投稿日時: 2005-10-13 16:35
さる様、media様、書込み有難う御座います。
引用: -------------------------------------------------------------------- 分からないのはファイルからテキスト(SQL文)の読み込み方ですか? それとももっと単純(?)に出来るSQLを操る方法がない?ですか? -------------------------------------------------------------------- は、「それとももっと単純(?)に出来るSQLを操る方法がない?ですか?」の方です。 FileOutputStream fos = new FileOutputStream("test.sql");して一軒ずつ 読出して。。。とかではなく、 メソッド一個で、単純にできないでしょうか? 後、Javaを始めたばかりで、フレームワークは慣れてからと思っています。 すいません。 | ||||
|
投稿日時: 2005-10-13 16:40
うーん、フレームワークを使うのが一番だと思いますが ![]() | ||||
|
投稿日時: 2005-10-13 17:23
こんにちは。
PreparedStatementを使ってユーティリティクラスを作るとか? http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/sql/PreparedStatement.html 例えばユーティリティクラス名をDBとします。 で、SQLファイルには SELECT * FROM MESSAGE_TABLE WHERE DEL = ? とSQLを記述しておきます。 で、 読み込んで、 DB db = new DB(); db.load("test.sql"); パラメータを与えて、 db.setIntParam(0); 実行する。 List result = db.execute(); ってかPreparedStatementにSQLファイル読み込み機能をつけただけですね^−^; ただ、パラメータの数や、パラメータが文字列型か整数型かとかの判断など全部 自作するのは大変かもしれないですね。 >後、Javaを始めたばかりで、フレームワークは慣れてからと思っています。 たしかに、基本APIでの処理を理解してから・・・というのも大切ですね。 将来フレームワークが内部で何をやってるかを理解するのにも役立ちますし。 ただ、最近はフレームワークを如何に使いこなせるかが大事だったり^−^; ある程度基本を学んだらフレームワークに進むといいかもしれませんね。 以上ご参考になれば。 |