【问题标题】:How to keep the sql queries out of the java code如何将 sql 查询排除在 java 代码之外
【发布时间】:2013-02-13 16:39:42
【问题描述】:

我写了一个小代码,功能如下:

  1. 读取输入文件
  2. 读取其中的第一行并检查它是否 在某个位置有值AAA
  3. 如果它满足 条件调用方法insertAAAmethod并将数据加载到 甲骨文表
  4. 如果是记录BBB,则读取下一行,调用具有不同插入查询的insertBBBrmethod

问题是我在输入文件中有 15 条不同的记录,所以我有 15 种不同的方法,例如 insertAAAmethod,每种方法都有不同的插入查询:

public static void insertAAARecord() throws Exception {

    String sqlQuery = "insert into my_table(ColumnA,ColumnB,ColumnC,ColumnD,ColumnE,ColumnF,ColumnG)"
            + "values (?,?,?,?,?,?,?)";

    try {

        pstmt = conn.prepareStatement(sqlQuery);

        pstmt.setString(1, "AAA");
        pstmt.setDate(2,
                StringtoDate("AAA", CurrentLine.substring(150, 158)));
        pstmt.setDate(3,
                StringtoDate("AAA", CurrentLine.substring(158, 166)));
        pstmt.setString(4, CurrentLine.substring(24, 34));
        pstmt.setString(5, CurrentLine.substring(37, 45));
        pstmt.setString(6, CurrentLine.substring(147, 150));
        pstmt.setDate(7, headerDate);

        pstmt.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace(System.out);

    } finally {

        pstmt.close();

    }

}

是否可以将 sql 查询排除在 java 代码之外? (例如在属性文件中)

注意:插入查询会根据记录发生变化,如果记录为“AAA”,则应遵循一个插入查询,如果记录不同,则插入查询应更改..

让我知道如何优化我的代码。

【问题讨论】:

  • 您能添加一些这些 SQL 查询的示例吗?你说他们是不同的,但不是多少......
  • 为什么不将此元数据存储在数据库中?
  • 我是 JPA 的忠实粉丝,但在这种情况下,由于我们掌握的信息很少,我不会推荐它。

标签: java oracle jdbc


【解决方案1】:

是的,您应该创建一个包含所有查询的属性文件,并在启动时使用 Properties 对象加载它们,然后使用 Properties 来查找它们。您还可以通过 Spring 将查询注入到您的配置对象中。

我一直在构建数据库对象,将您的代码集成到数据库数据中,并且查询保留在那里,调试和管理要容易得多,因为您需要的一切都在一个地方。

让您的生活变得简单,避免使用 ORM 并调整您的 SQL 查询(或者让 DBA 这样做,这就是他们所做的并且他们擅长此操作)。但是,如果您不喜欢 SQL 或不关心它的效率,那么像 Hibernate 这样的 ORM 可能就是您所需要的。

【讨论】:

  • 使用静态块加载属性文件,并将其中的每个 SQL 查询分配给静态成员变量。
  • +1:这是唯一不认为 ORM 是此类问题的唯一解决方案的答案。
【解决方案2】:

也许这会比其他方法花费更多时间,但它会帮助您优化代码。

每个查询/进程都有共同的属性。

  • SQL 查询
  • 字符串模式
  • 参数

每个参数都有

  • 位置
  • 数据类型

如果您已经在使用 spring,则可以在 config.xml 中将它们定义为 bean。 如果没有,您仍然可以使用 xml 配置(而不是属性文件)

然后,您必须创建一些类来解析这些 bean 并创建自定义查询。

希望对你有帮助。

【讨论】:

【解决方案3】:

尝试使用任何 ORM 框架,如 Hibernate/JPA、Ibatis?

【讨论】:

    【解决方案4】:

    您想使用 JPA。我建议通过一个简单的 JPA 教程,例如:http://glassfish.java.net/javaee5/persistence/persistence-example.html

    该教程将演示如何创建或修改对象并将这些更改保存在数据库中的基础知识。祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 2010-12-20
      • 2021-06-12
      • 2014-07-27
      相关资源
      最近更新 更多