代码之家  ›  专栏  ›  技术社区  ›  David Webb

我应该把SQL文件放在我的Java项目中?

  •  20
  • David Webb  · 技术社区  · 16 年前

    我有一个Java项目,它将包括大量的SQL语句来查询数据库。我的问题是:我应该把它们放在哪里?

    我非常肯定,我希望每个语句都有自己的文本文件,由源代码控制管理。由于Java不支持多行字符串,所以我不能很容易地把SQL放在我的字符串中。 .java 文件,我想我无论如何都不想。在构建时,我可以将这些文本文件放在jar中,并使用 ClassLoader.getResourceAsStream() .

    所以我的问题是我应该把这些文件放在哪个目录中,我应该怎么称呼它们。理想情况下,我希望人们从 .sql Java类使用它的文件。我绝对不想要的是一个目录,里面有很多文件,比如 report1.sql report3.sql 等等。

    我倾向于把它们放在包目录中 爪哇 但是我有个同事不喜欢除了 爪哇 此树中的文件。因此,这导致了一个单独的目录结构的替代方案,该结构反映了Java包,但这似乎是不必要的开销。

    所以我很想知道您如何处理SQL文件。

    我们正在使用NetBeans 6.5,以防影响您的答案。

    ( This question 很相似,但遗憾的是,答案非常具体,这对那个问题有利,但对我不利。)

    5 回复  |  直到 8 年前
        1
  •  17
  •   Community CDub    8 年前

    在Java/Maven设置中,我们使用项目层次结构:

    project/src/main/java/Package/Class.java
    project/src/test/java/Package/ClassTest.java
    project/src/main/resources/Package/resource.properties
    project/src/test/resources/Package/test_resource.properties
    

    为了回答您的问题:我将把SQL文件和资源放在src/main/resources下。

    你可能想看看这个 thread .

        2
  •  5
  •   Olly    16 年前

    我想把SQL查询放在专用的 SQL SRC下的文件夹。这将Java代码与SQL分隔开来:

    + src
      + java 
      + sql
         - Package/Class.sql
    + test
    

    或者,您可以使用上述结构将它们放入简单的属性文件中:

    getUserByName = select * from users where name=?
    
    getUserByEmail = select * from users where email=?
    
    getUserByLongQuery = select * from users where email=? \
       and something = ? \
       where something_else = ?
    

    此外,我认为值得一提的是,如果您喜欢采用这种方式,可以将多行字符串放入Java类中:

    class MyClass {
        MY_QUERY = "select * from users where email = ? " + 
                   "and something_else = ?";
    }
    
        3
  •  2
  •   jon077    16 年前

    我完全同意布塔。Maven为SRC文件夹管理设置了一个很好的标准。您是否考虑过将SQL存储在XML中?将查询保存在单个文件中可能会使管理SQL更加容易。我的第一直觉很简单:

    <?xml version="1.0" encoding="UTF-8"?>
    <queries>
        <query id="getUserByName">
            select * from users where name=?
        </query>
        <query id="getUserByEmail">
            select * from users where email=?
        </query>
    </queries>
    

    要解析该文件,请使用xpath或甚至sax创建由ID键控的查询映射,以便快速查询查找。

        4
  •  1
  •   gavenkoa    8 年前

    与…一致 http://maven.apache.org/pom.html#Resources 这个地方可能是:

    • src/main/sql
    • src/main/upgrade -用于版本之间的升级脚本
    • src/main/db , src/main/schema , src/main/ddl -对于当前项目数据库架构,对于初始项目部署
    • 等等,放在 src/main/NAME 目录

    其他需要考虑的事项:

    请注意,IDE不支持其他侦听目录 src/main/java src/main/resources 在里面 项目查看器 为了这个用途 文件查看器 .

        5
  •  0
  •   Community CDub    8 年前

    这是一个小问题,但可以说,SQL越复杂,它就属于数据库(或服务层),而不是Java代码。

    否则,随着代码的成熟, issues like this 起来。