복붙노트

[SPRING] "가장 먼저 10 * FROM T"구문을 사용할 수있는 휴대용 방법이 있습니까?

SPRING

"가장 먼저 10 * FROM T"구문을 사용할 수있는 휴대용 방법이 있습니까?

나는 데이터베이스에서 10k 레코드의 블록으로 데이터를 읽길 원한다.

위키 피 디아에서 결과 제한을 발견했는데이 방법은 SQL을 사용하여 이식 할 수 없다는 것이 확실합니다.

또 다른 접근법은 쿼리를위한 많은 메소드를 제공하는 JdbcTemplate 일 수 있지만 어떻게 충분한 행을 읽었는지 결정할 수는 있습니다. RowMapper 및 ResultSetExtractor와 같은 콜백을 통해 충분한 데이터가 읽혀 졌음을 표시 할 수 없습니다.

편집 : 나는 JdbcTemplate에 대한 해결책을 찾고 있었다. 이 게시물은 내가 간과했던 setMaxRows를 사용하도록 제안합니다.

해결법

  1. ==============================

    1.최대 절전 모드 또는 JPA를 잡으십시오. 둘 다 다양한 데이터베이스 언어에 익숙하며 후드 아래의 불쾌한 DB 특성을 투명하게 처리합니다.

    최대 절전 모드 또는 JPA를 잡으십시오. 둘 다 다양한 데이터베이스 언어에 익숙하며 후드 아래의 불쾌한 DB 특성을 투명하게 처리합니다.

    Hibernate에서는 Criteria # setFirstResult ()와 Criteria # setMaxResults ()를 사용하여 페이지 매김을 할 수있다. 예 :

    List users = session.createCriteria(User.class)
        .addOrder(Order.asc("id"))
        .setFirstResult(0) // Index of first row to be retrieved.
        .setMaxResults(10) // Amount of rows to be retrieved.
        .list();
    

    JPA에서는 Query # setFirstResult () 및 Query # setMaxResults ()를 사용하여 비슷하게 수행 할 수 있습니다.

    List users = em.createQuery("SELECT u FROM User u ORDER BY u.id");
        .setFirstResult(0) // Index of first row to be retrieved.
        .setMaxResults(10) // Amount of rows to be retrieved.
        .getResultList();
    
  2. ==============================

    2.SQL : 2008의 ANSI 표준 구문이 있습니다.

    SQL : 2008의 ANSI 표준 구문이 있습니다.

    SELECT t.* 
      FROM TABLE t
     FETCH FIRST 10 ROWS ONLY
    

    ...하지만 현재로서는 대부분의 데이터베이스에서 지원되지 않습니다.

  3. ==============================

    3.다른 SQL 엔진이 다른 구문을 사용하기 때문에 일반적인 SQL에서는이를 수행 할 수있는 이식성이 없습니다.

    다른 SQL 엔진이 다른 구문을 사용하기 때문에 일반적인 SQL에서는이를 수행 할 수있는 이식성이 없습니다.

    Database Abstraction Layer 또는 DBAL을 사용하십시오.

    http://en.wikipedia.org/wiki/Database_abstraction_layer

    http://jonasbandi.net/wiki/index.php/ORM_Solutions_for_Java

  4. ==============================

    4.이식성있는 방식을 원하면 추상화 레이어를 올라야합니다. 이식성있는 SQL 방식은 없습니다 (실제로 데이터베이스가 구현하지 않습니다). 그리고 hibernate와 같은 ORM 매퍼를 사용하십시오.

    이식성있는 방식을 원하면 추상화 레이어를 올라야합니다. 이식성있는 SQL 방식은 없습니다 (실제로 데이터베이스가 구현하지 않습니다). 그리고 hibernate와 같은 ORM 매퍼를 사용하십시오.

    원시 JDBC가 필요하다면 각 특정 데이터베이스에 대해 특정 SQL을 작성해야한다. 100 % 이식성 SQL을 작성하는 것이 사소한 경우를 제외하고는 꽤 어려운 경우가 종종있다.

    최후의 수단은 아무런 제한없이 쿼리를 실행하고 10 가지 첫 번째 결과를 반복하는 것입니다.하지만이 방법은 데이터베이스 기능을 활용하지 않으며 쿼리 결과가 여러 행에 포함될 경우 매우 나쁩니다.

  5. ==============================

    5.아니요. Hibernate와 같은 데이터베이스 추상화 레이어에는 데이터베이스에서 사용할 언어를 선택하는 SQL 언어가 포함되어 있습니다.

    아니요. Hibernate와 같은 데이터베이스 추상화 레이어에는 데이터베이스에서 사용할 언어를 선택하는 SQL 언어가 포함되어 있습니다.

  6. from https://stackoverflow.com/questions/3400589/is-there-a-portable-way-to-have-select-first-10-from-t-semantic by cc-by-sa and MIT license