【问题标题】:How to get all the element from JDBC query如何从 JDBC 查询中获取所有元素
【发布时间】:2010-09-28 18:33:14
【问题描述】:

你好,

我有这样的查询

final Query contractQuery = cgnDao.getEntityManager().
            createNativeQuery("SELECT k.phrase, ak.type FROM key k INNER JOIN adkey ak USING (key_id) WHERE pck.pub_id =" + pid +" AND pck.c_id =" + campId );

如何从查询中获取每个元素?

其中短语是字符串,类型是枚举

在 Java 中

谢谢

【问题讨论】:

    标签: java sql orm jpa


    【解决方案1】:

    查看this link on the JBoss JPA docsthis link on java2s

    简而言之,您有一个可以调用 getResultList() 的 Query,它会返回一个可以迭代的 List。看看JPA javadoc

    另外,我建议使用 PreparedStatements,例如

    String sqlQuery = "select * from tbl_spaceship where owner = ?";
    Query q = entityManager.createNativeQuery(sqlQuery, SpaceShip.class);
    q.setParameter( 1, "Han" );
    q.getResultList();
    

    优点是 JPA 提供者将负责转义输入值。在这个特定的用例中没有必要,但良好的习惯永远不会受到伤害。

    【讨论】:

      【解决方案2】:

      首先,您不应该使用字符串连接,而应该使用位置参数只有位置参数绑定可移植地用于原生查询)。其次,对于返回标量值的本机查询,结果将是ListOject[]。所以结果可能是这样的:

      String sql = "SELECT k.phrase, ak.type " + 
                   "FROM key k INNER JOIN adkey ak USING (key_id) " +
                   "WHERE pck.pub_id = ?1 AND pck.c_id = ?2";
      Query q = em.createNativeQuery(sql);
      q.setParameter(1, pubId);
      q.setParameter(2, cId);
      List<Object[]> results = q.getResultList();
      

      参考文献

      • JPA 1.0 规范
        • 第 3.6.3 节“命名参数”
        • 第 3.6.6 节“SQL 查询”
        • 第 4.6.4 节“输入参数”

      【讨论】:

        【解决方案3】:

        您可以使用方法的值从结果集中获取枚举实例

        enum A {}
        A.valueOf()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-16
          • 1970-01-01
          • 1970-01-01
          • 2012-05-30
          相关资源
          最近更新 更多