1

Play Framework1.2.5を使用してデータベースOracle10gからデータをフェッチするために、このJDBCコードを実行しました。

Connection conn = DB.getConnection();
PreparedStatement  stmt = null;
System.out.println(conn);
try {
    stmt = conn.prepareStatement("select dept_id from emp where emp_id = 11");
    ResultSet rs = stmt.executeQuery();
    while (rs.next()) {
        System.out.println("Dept Id: " + rs.getInt("dept_id"));
    }
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

このアプローチは機能していますが、混乱しています。

コードのブロック全体にコメントを付けてアプリケーションを実行すると、DBへの接続が確立されたことを示すメッセージがコンソールに表示されます。したがって:

1)上記のコードブロックは、Oracle DBからデータをフェッチするための正しいアプローチですか、それともこれよりも優れたものですか?

2)アプリケーションの存続期間全体にわたって、DBとの接続は維持されますか?

私はこれの初心者なので、苦労しています:(

これを進めるための鍬を教えてください。

よろしく

4

2 に答える 2

1

play JPA のドキュメントを読む必要があります: http://www.playframework.org/documentation/1.2.5/jpa#finding

クエリは次のようになります。

Post.find("byTitle", "My first post").fetch();
Post.find("byTitleLike", "%hello%").fetch();
Post.find("byAuthorIsNull").fetch();
Post.find("byTitleLikeAndAuthor", "%hello%", connectedUser).fetch();

完全なクエリを実行する必要がある場合は、find に JPA コードを追加できます。

Post.find(
    "select p from Post p, Comment c " +
    "where c.post = p and c.subject like ?", "%hop%"
);
于 2013-01-25T19:10:10.753 に答える
0

1) ResultSet、PreparedStatement、および Connection オブジェクトの使用が終わったらそれらを閉じる限り、コードは問題ありません (close() メソッド!)。基本的に、Tom が推奨する JPA/ORM アプローチとは対照的に、「ネイティブ クエリ」を実行しています。どちらにも利点があります。JPA について学び、どちらがニーズに最も適しているかを確認することをお勧めします。

ボイラープレート コードの少ない Play のネイティブ クエリには、JPA.em().createNativeQuery() という別のオプションがあります。

2) DB.getConnection() はおそらく接続プールへの呼び出しに変換されます。そうであれば、接続の存続期間について心配する必要はありません。つまり、上で述べたすべてのオブジェクトを close() します。

于 2013-03-09T14:36:07.517 に答える