Bagaimana cara menjalankan kueri dalam kerangka Play (dengan Oracle 10g)

Saya melakukan kode JDBC ini untuk mengambil beberapa data dari database Oracle 10g menggunakan Play Framework 1.2.5:

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();
}

Pendekatan ini berhasil tetapi saya mengalami kebingungan:

Jika saya mengomentari seluruh blok kode dan menjalankan aplikasi maka saya dapat melihat pesan di konsol yang menyatakan koneksi telah dibuat ke DB. Karena itu :

1) Apakah blok kode di atas merupakan pendekatan yang tepat untuk mengambil data dari Oracle DB atau ada yang lebih baik dari ini?

2) Apakah sepanjang masa pakai aplikasi, koneksi dengan DB akan tetap ada?

Saya seorang pemula dalam hal ini, karenanya berjuang :(

Tolong beri tahu saya bagaimana caranya untuk melanjutkan ini.

Salam


person user182944    schedule 25.01.2013    source sumber


Jawaban (2)


Anda perlu membaca dokumentasi drama JPA: http://www.playframework.org/documentation/1.2.5/jpa#finding

Pertanyaan Anda akan terlihat seperti ini:

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

Dan jika Anda perlu melakukan kueri lengkap, Anda dapat menambahkan kode JPA di find:

Post.find(
    "select p from Post p, Comment c " +
    "where c.post = p and c.subject like ?", "%hop%"
);
person Tom Carchrae    schedule 25.01.2013

1) Kode Anda baik-baik saja, selama Anda menutup objek ResultSet, PreparedStatement, dan Connection setelah Anda selesai menggunakannya (metode close()!). Pada dasarnya, Anda menjalankan "kueri asli", bukan pendekatan JPA/ORM yang direkomendasikan oleh Tom. Keduanya memiliki kelebihan masing-masing, saya sarankan Anda mempelajari JPA dan melihat mana yang paling sesuai dengan kebutuhan Anda.

Ada opsi lain untuk kueri asli di Play dengan lebih sedikit kode boilerplate: JPA.em().createNativeQuery().

2) DB.getConnection() mungkin akan diterjemahkan menjadi panggilan ke kumpulan koneksi, jika demikian, Anda tidak perlu khawatir tentang masa pakai koneksi, pastikan untuk "mengembalikannya" ke kumpulan saat Anda tidak lagi membutuhkannya, yaitu close() semua objek yang saya sebutkan di atas.

person klorand    schedule 09.03.2013