我做了这个JDBC代码,用于使用Play Framework 1.2.5从数据库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)对于整个应用程序生命周期,与DB的连接是否会持续存在?
我是这方面的新手,因此苦苦挣扎:(
请让我知道锄头继续这个。
此致
答案 0 :(得分: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();
如果您需要执行完整查询,可以在find:
中添加JPA代码Post.find(
"select p from Post p, Comment c " +
"where c.post = p and c.subject like ?", "%hop%"
);
答案 1 :(得分:0)
1)您的代码没问题,只要您在使用它们时关闭ResultSet,PreparedStatement和Connection对象(close()方法!)。从本质上讲,您运行的是“本机查询”,而不是Tom推荐的JPA / ORM方法。两者都有其优点,我建议您了解JPA并了解哪一种最适合您的需求。
在Play中使用较少样板代码的本机查询还有另一种选择:JPA.em()。createNativeQuery()。
2)DB.getConnection()可能会转换为对连接池的调用,如果是这样,您不需要担心连接的生命周期,只需确保将“回馈”到池中即可当你不再需要它时,即close()我上面提到的所有对象。