简单jar打包示例 合并第三方jar包打包操作
涉及到的编译和打包问题
1.类在包中,如何批量编译包中的类
2.访问数据库要用到 驱动jar包,如何正确将驱动jar包也合并到自己定义的jar包中,而每次执行不需要额外的配置
环境 JDK 1.6 数据库SQL SERVER 2005 jar包 sqljdbc.jar
要求 登录名和密码为 sa,sa ,所有内容都在最后附件中(包含截图,数据库,源码,SQL jar) 可下载尝试
第一部分是图片和步骤说明,特地截图一步一步说明,第二部分是源码贴出,有几个简单的类都在staff包中.
先看第一部分:
1)目录说明:
D:\com 目录下存放我的源代码,这些源代码的包都是 package staff;从源码可以看到.
2)因为需要用到SQL SERVER2005的驱动,因此把sqljdbc.jar也放入 d:\com目录下,并点击右键解压缩(就如同解压.rar文件一样),就能看到有一个 sqljdbc的文件产生
3)sqljdbc文件夹中有一个com文件夹,把com文件夹剪切出来 放到源码区(即d:\com目录下)
说明sqljdbc文件下的com文件夹很显然就是com.microsoft.sqlserver.jdbc 的根目录,最底下 全是.class文件 .
4)在D:\com 目录源码区 再创建一个名称为 menifest的文件,注意不需要后缀
5)用编辑工具打开 menifest ,加入下面内容



package staff;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;/** * 数据访问操作对象 执行相应的增 删 改 查操作 * @author Simon Lv * */public class DataAccessManager {/**数据库对象管理类对象*/ConnectionManager connManager = new ConnectionManager();/**数据库连接对象*/Connection connection;/**SQL执行对象*/PreparedStatement pStatement;/**结果集对象*/ResultSet rSet;/**员工实体类*/Staff staff;/** * 执行数据库的增 删 改 操作的方法 1 * @param sql 增 删 改的SQL * @return 受影响的行数 */public int executeSQL(String sql){int res=0; //默认受影响的行数为0try {connection = connManager.getConnection(); //得到数据库连接pStatement = connection.prepareStatement(sql); //得到SQL操作对象res = pStatement.executeUpdate(); //执行返回受影响行数 的 增 删 改操作} catch (Exception e) {System.out.println("执行数据库 增 删 改操作时发生错误!");//程序调试阶段可使用 下面的方法System.out.println("相应的SQL:"+sql);}finally{connManager.closeAllResource(connection, pStatement, rSet);}return res;}/** * 执行数据库的增 删 改 操作的方法 2 * @param sql 增 删 改的SQL * @param param [] 参数 * @return 受影响的行数 */public int executeSQL(String sql,String param[]){int res=0; //默认受影响的行数为0try {connection = connManager.getConnection(); //得到数据库连接pStatement = connection.prepareStatement(sql); //得到SQL操作对象if (param!=null) {//循环放入相应的参数for (int i = 0; i < param.length; i++) {pStatement.setString(i+1, param[i]);}}res = pStatement.executeUpdate(); //执行返回受影响行数 的 增 删 改操作} catch (Exception e) {System.out.println("执行数据库 增 删 改操作时发生错误!");//程序调试阶段可使用 下面的方法System.out.println("相应的SQL:"+sql);}finally{connManager.closeAllResource(connection, pStatement, rSet);}return res;}/** * 执行数据库的增 删 改 操作的方法 3 * @param sql 增 删 改的SQL 数组 * @param param [] 参数 数组 * @return 受影响的行数 数组 */public int executeSQL(String sql,String param[][]){int res=0; //受影响的行数try {connection = connManager.getConnection(); //得到数据库连接pStatement = connection.prepareStatement(sql);//创建Statement对象if (param!=null) {//循环加入要更新的SQL 语句 增 删 改 语句for (int i = 0; i < param.length; i++) {//同时为这些SQL 语句 添加参数for (int j = 0; j < param[i].length; j++) {pStatement.setString(j+1, param[i][j]);}pStatement.addBatch();//批量}}res = pStatement.executeBatch().length; //批量成功后所影响的行数} catch (Exception e) {e.printStackTrace();System.out.println("执行数据库 增 删 改操作时发生错误!");//程序调试阶段可使用 下面的方法System.out.println("相应的SQL:"+sql);}finally{connManager.closeAllResource(connection, pStatement, rSet);}return res;}/** * 得到员工信息一条或多条 * @param sql 查询语句 * @param param 参数数组 * @return 含有员工信息的集合 */public ArrayList<Staff> getStaffInfo(String sql,String param[]){//创建Staff集合 将查询出来的内容放入这个集合中ArrayList<Staff> list = new ArrayList<Staff>();try {connection = connManager.getConnection(); //得到数据库连接pStatement = connection.prepareStatement(sql);//创建Statement对象if (param!=null) {//循环放入相应的参数for (int i = 0; i < param.length; i++) {pStatement.setString(i+1, param[i]);}}//得到结果集rSet = pStatement.executeQuery();//循环遍历内容 并将内容放入实体类对象 并封装在集合中while (rSet.next()) {//每一行就是一条员工记录staff = new Staff();staff.setId(rSet.getInt(1));//IDstaff.setName(rSet.getString(2)); //名称staff.setSex(rSet.getString(3)); //性别staff.setAge(rSet.getInt(4)); //年龄staff.setRegTime(rSet.getString(5)); //录入时间//封装到集合中list.add(staff);}} catch (Exception e) {e.printStackTrace();System.out.println("执行数据库 增 删 改操作时发生错误!");//程序调试阶段可使用 下面的方法System.out.println("相应的SQL:"+sql);}finally{connManager.closeAllResource(connection, pStatement, rSet);}return list;}}