- PR -

SQLファイルの実行

投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 81
投稿日時: 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/06/15
投稿数: 24
投稿日時: 2005-10-13 16:08
質問の意図から外れていたらすいません。
一点おかしなところを見つけたので

// データベースから切断
stmt.close();
con.close();

この処理はcatchされた場合にも必要になります。
(catchされた場合つなぎっぱなしになるため)

ですのでfinallyの中に移動した方がよろしいかと。

try
{
}
catch
{
}
finally
{
// データベースから切断
stmt.close();
con.close();
}
未記入
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 81
投稿日時: 2005-10-13 16:13
セイン様、ありがとうございます。
指摘して頂いて、なるほどと思いました。
やはり、SQLファイルの実行は難しいでしょうか?
さる
ぬし
会議室デビュー日: 2005/07/14
投稿数: 276
お住まい・勤務地: 実家戻ったw
投稿日時: 2005-10-13 16:18
質問です。
分からないのはファイルからテキスト(SQL文)の読み込み方ですか?
それとももっと単純(?)に出来るSQLを操る方法がない?ですか?
media
会議室デビュー日: 2003/04/10
投稿数: 7
投稿日時: 2005-10-13 16:18
もし、目的がSQLを外部管理するといったところにあるのであれば、
自作するよりフレームワーク等を使ったほうが早いかと思います。

iBATISあたりは、SQLが書けてクラスとのマッピングをしてくれるので
便利ですよ。(最近は日本語サイトでも色々と取り上げられてますし。)

http://ibatis.apache.org/

SQLはXMLで管理され、SQLの条件分岐についても色々なバリエーションを
サポートしています。SQLの実行も全部きちんとPreapredStatementで
してくれ、コネクションのclose処理等もこちらが意識することはありません。

実現したいことを外してたらごめんなさい。
未記入
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 81
投稿日時: 2005-10-13 16:35
さる様、media様、書込み有難う御座います。

引用:
--------------------------------------------------------------------
分からないのはファイルからテキスト(SQL文)の読み込み方ですか?
それとももっと単純(?)に出来るSQLを操る方法がない?ですか?
--------------------------------------------------------------------
は、「それとももっと単純(?)に出来るSQLを操る方法がない?ですか?」の方です。
FileOutputStream fos = new FileOutputStream("test.sql");して一軒ずつ
読出して。。。とかではなく、
メソッド一個で、単純にできないでしょうか?
後、Javaを始めたばかりで、フレームワークは慣れてからと思っています。
すいません。
さる
ぬし
会議室デビュー日: 2005/07/14
投稿数: 276
お住まい・勤務地: 実家戻ったw
投稿日時: 2005-10-13 16:40
引用:

未記入さんの書き込み (2005-10-13 16:35) より:
は、「それとももっと単純(?)に出来るSQLを操る方法がない?ですか?」の方です。
FileOutputStream fos = new FileOutputStream("test.sql");して一軒ずつ
読出して。。。とかではなく、
メソッド一個で、単純にできないでしょうか?
後、Javaを始めたばかりで、フレームワークは慣れてからと思っています。
すいません。



うーん、フレームワークを使うのが一番だと思いますが
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 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での処理を理解してから・・・というのも大切ですね。
将来フレームワークが内部で何をやってるかを理解するのにも役立ちますし。
ただ、最近はフレームワークを如何に使いこなせるかが大事だったり^−^;

ある程度基本を学んだらフレームワークに進むといいかもしれませんね。
以上ご参考になれば。

スキルアップ/キャリアアップ(JOB@IT)