如何在 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 语句文件?的主要内容,如果未能解决你的问题,请参考以下文章