昨天在写工具的时候遇到要将java程序打成jar文件的若干小问题,因为自己之前完全没有接触,现在总结下这个过程中遇到的问题方便自己以后查阅,也希望帮到有这个需求的菜鸟们,节约查阅资料的时间。
现将问题列出如下:
Q1:JAVA代码调用数据库存储过程问题
Answer:不说那么多,直接上代码,一看就明白(前后的一些其他部分省略):
//getBillResult:存储过程名,?为参数
String sql1 = "{call getBillResult(?)}";
CallableStatement statement = null;
statement = conn.prepareCall(sql1);
statement.setString(1, strings);//设置传入参数的值
rst2 = statement.executeQuery();
OK ,大概就是这样的一个过程。如果详细想了解CallableStatement对象的可以参看这篇文章《
CallableStatement的用法 》;如果存储过程中定义有输出参数,不是我这种直接的select返回结果集的,在设置输出参数的时候会用到
callableStatement.registerOutParameter(?,?)这个方法,这个也可以看看这篇博客《
jdbc调用带输出参数的存储过程》。
Q2:java文件导出成可执行的jar
Answer:使用fatjar,这个是Eclipse的一个插件,下载地址我也放了一个我资源里面,fatjar_0.0.31。插件的安装方式很多,我觉得最简单的就是将解压到的jar文件(不包含任何文件夹)直接放到Eclipse的plugins目录下重启完成即可。成功安装完成后,右键项目的时候就会有如图的变化:
后面导出的步骤就简单啦,根据提示找到main-class,然后next后根据需要选择output,一般默认就OK,然后就finish了。导出的jar默认是在自己的project下的
Q3:jar文件需要使用可改动的配置文件
Answer:例如我们链接数据库的配置文件,需要放在外面方便更改。一般项目的时候配置文件我们都会放在src目录或者专门的resource目录下,在编译的时候最终都是直接放到了classpath的目录下,jvm也是从这个目录去找然后加载。下面是我们一般的写法:
<strong>properties.load(DBUtil.class.getClassLoader().getResourceAsStream("/db.properties"));</strong>
当我们需要将jar文件放在同一个目录下,方便改动,代码如下:
<strong>properties.load(new FileInputStream("db.properties"));</strong>
OK,至此我们的这个需求就完成了。同时需要注意的一点是当我们自己开发JDK 的版本高于用户的版本的时候,本地执行没问题,客户执行jar文件可能会报main class not found的异常,这个我是将自己的版本降下来重新编译导出新的jar。