2013-01-25 131 views
1

我沒有使用播放框架1.2.5取出由數據庫Oracle 10g的一些數據,這JDBC代碼查詢(從Oracle 10g):如何執行在遊戲框架

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

這種方法工作,但我我有一個混淆:

如果我評論整個代碼塊並運行應用程序,然後我可以看到控制檯中的消息說明連接到數據庫。因此:

1)上述代碼塊是從Oracle DB獲取數據的正確方法還是比現在更好的方法?

2)它是否像整個應用程序生命週期一樣,與數據庫的連接將會持續?

我在這一個新手,所以掙扎:(

請讓我知道鋤頭繼續進行此

問候

回答

1

您需要讀取播放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(); 

如果你需要做一個全面的查詢,可以在發現添加JPA代碼:

Post.find(
    "select p from Post p, Comment c " + 
    "where c.post = p and c.subject like ?", "%hop%" 
); 
0

1)你的代碼是可以的,只要你關閉ResultSet,PreparedStatement和連接對象,當你(使用close()方法!)。實質上,您運行的是「本地查詢」,而不是Tom推薦的JPA/ORM方法。兩者都有它們的優點,我建議你學習JPA,看看哪一個最適合你的需求。

在Play中使用較少樣板代碼的原生查詢還有另一種選擇:JPA.em()。createNativeQuery()。

2)DB.getConnection()可能會轉化爲對連接池的調用,如果是這樣,您不必擔心連接的生命週期,只需確保將其「返回」給當你不再需要它的時候,比如close()上面提到的所有對象。