1

我使用 Play Framework 1.2.5 从数据库 Oracle 10g 中获取一些数据的 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();
}

这种方法有效,但我很困惑:

如果我注释整个代码块并运行应用程序,那么我可以在控制台中看到消息,说明已与数据库建立连接。因此 :

1) 上面的代码块是从 Oracle DB 获取数据的正确方法还是比这更好的方法?

2)在整个应用程序生命周期中,与数据库的连接是否会持续存在?

我是这方面的新手,因此苦苦挣扎:(

请让我知道锄头继续这个。

问候

4

2 回答 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();

如果你需要做一个完整的查询,你可以在 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 回答