如何保持sql查询不受java代码的影响

时间:2013-02-13 16:39:42

标签: java oracle jdbc

我写了一个代码如下的小代码:

  1. 阅读输入文件
  2. 阅读其中的第一行并检查是否存在 在特定位置具有值AAA
  3. 如果它满足 condition调用方法insertAAAmethod并将数据加载到 oracle table
  4. 如果是记录BBB,请阅读下一行,调用具有不同插入查询的insertBBBrmethod
  5. 问题是输入文件中有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”,则插入查询会根据记录进行更改,如果记录不同,则插入查询应该更改。

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

4 个答案:

答案 0 :(得分:2)

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

我总是构建数据库对象,将您的代码集成到数据库中,并且查询保存在那里,调试和管理更容易,因为您需要的所有内容都在一个地方。

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

答案 1 :(得分:1)

这可能比其他方法花费更多时间,但它可以帮助您进行代码优化。

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

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

并且每个参数都有

  • 位置
  • 数据类型

如果您已经使用spring,那么您将能够在config.xml中将这些定义为bean。 如果没有,你可以使用xml配置(而不是属性文件)

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

希望它有所帮助。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您想使用JPA。我建议您阅读以下简单的JPA教程:http://glassfish.java.net/javaee5/persistence/persistence-example.html

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