2013-01-25 89 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()上面提到的所有对象。