如何在 Java JAR 内部包含一个 SQL 语句文件?

Posted

技术标签:

【中文标题】如何在 Java JAR 内部包含一个 SQL 语句文件?【英文标题】:How does one include a file of SQL statements internally in Java JAR? 【发布时间】:2014-08-02 22:30:03 【问题描述】:

我正在尝试实现this SO question 的变体

我想对一个数据库运行数十条 SQL 语句。在字符串中构建语句变得很费力。我想到了将它们制作成一个文件(statements.sql),这非常容易编写和调试。

但是我有一个要求,我必须将所有需要的东西都包含在一个可运行的 JAR 中,所以这个 .sql 文件必须是一个内部资源(如 C# 项目)。我不能简单地读取外部文件。

上面的 SO 问题听起来像是我想要的正确想法,但无论我将 .sql 文件(src 包或文件夹本身)放在哪里,或者我是否“添加到构建路径”,我一直在...

java.lang.NullPointerException

...当我运行此代码时...

InputStream input = getClass().getResourceAsStream("/mysql/src/com/package/statements.sql");

我的 Java IDE 是 Eclipse (Luna),在 Debian 7 GNome 上运行,.sql 文件当前位于源代码下的包中。

我只需要一个大字符串中的文件内容来进行解析/处理。如果有更好的方法可以做到这一点,我会很感激朝着正确的方向前进。我认为我的问题可能与我不熟悉如何在 Eclipse 中执行此操作而不是代码问题有关。要获取代码的“路径”字符串,我右键单击 .sql 文件并选择“属性”。文件的路径(相对于项目?)显示在那里,我正在复制/粘贴它。

向 Eclipse 注册此文件并使用它的正确方法是什么?非常感谢。

【问题讨论】:

如果你使用休眠检查docs.jboss.org/hibernate/orm/4.1/javadocs/org/hibernate/tool/…来解析SQL 你可以加一些stacktrace,你用的是什么框架? 您可能会发现java sql properties file 很有用。谷歌这个。这是我搜索的一个链接 - ***.com/questions/1544335/… 不使用任何框架来执行此操作,它现在只是直接使用 java.sql 和 java.io。我会检查你的链接。 看到这个问题***.com/questions/5476530/… 【参考方案1】:

来自this answers

路径要么必须相对于给定的类,但不向后导航树,要么必须是绝对的。

所以你有两个选择:

把文件放到class的同一个位置,得到getClass().getResourceAsStream("statements.sql")的文件 将文件放在根目录下,用getClass().getResourceAsStream("\statements.sql")getClass().getClassLoader().getResourceAsStream("statements.sql")获取

【讨论】:

以上是关于如何在 Java JAR 内部包含一个 SQL 语句文件?的主要内容,如果未能解决你的问题,请参考以下文章

jar包与aar包文件的区别

如何使用参数从 Oracle PL/SQL 执行 Java jar 文件?

如何打开/运行.jar文件(双击不起作用)?

java基础第七天_匿名内部类异常包和jar

如何从包含大罐子列表的控制台运行java? [复制]

一个jar包,其中有个a.class和a$1.class,如何修改