Как выполнять запросы в среде Play (с Oracle 10g)

Я сделал этот код JDBC для извлечения некоторых данных из базы данных Oracle 10g с использованием 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();
}

Этот подход работает, но у меня путаница:

Если я прокомментирую весь блок кода и запущу приложение, я увижу в консоли сообщение о том, что соединение установлено с БД. Следовательно :

1) Является ли приведенный выше блок кода правильным подходом для извлечения данных из базы данных Oracle или что-то лучше, чем это?

2) Типа на все время жизни приложения будет сохраняться связь с БД?

Я новичок в этом, поэтому борюсь :(

Пожалуйста, дайте мне знать мотыгу, чтобы продолжить это.

С уважением


person user182944    schedule 25.01.2013    source источник


Ответы (2)


Вам необходимо прочитать документацию по 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 в 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) Ваш код в порядке, пока вы закрываете объекты ResultSet, PreparedStatement и Connection, когда закончите их использовать (метод close()!). По сути, вы выполняете «собственный запрос», в отличие от подхода JPA/ORM, рекомендованного Томом. У обоих есть свои преимущества, я предлагаю вам узнать о JPA и посмотреть, какой из них лучше всего подходит для ваших нужд.

Есть еще один вариант нативных запросов в Play с меньшим количеством шаблонного кода: JPA.em().createNativeQuery().

2) DB.getConnection(), вероятно, будет переводиться в вызов пула соединений, если это так, вам не нужно беспокоиться о времени жизни соединения, просто не забудьте «вернуть его» в пул, когда вы не это больше не нужно, т.е. закрыть() все объекты, о которых я упоминал выше.

person klorand    schedule 09.03.2013