java中通过jacob调用dts进行数据导入导出
在一个项目中需要金蝶软件对接,但是业务服务器和财务服务器相隔很远(中间经过好几台服务器,有内网也有外网),从一个内网向另一个内网中传输时,需要外网辅助,因为不让原始数据受污染,使用了DTS数据同步到另一台服务器,然后再上传至外网。
sqlserver下 调用dts
EXEC master.dbo.xp_cmdshell 'dtsrun /S /E /N"MyPack" /A"begintime":8=2013-06-01 /A"endtime":8=2013-08-20'
create table dtsSync(
beginDate datetime,
endDate datetime,
execDate datetime primary key
)
insert into dtsSync values('2013-08-01', '2013-08-23', getdate()); declare @beginDate varchar(10), @endDate varchar(10), @command varchar(255)
select @beginDate=convert(varchar(10), max(endDate) + 1,120) from dtsSync
set @endDate=convert(varchar(10),getdate(),120)
set @command='dtsrun /S /E /N"MyPack" /A"begintime":8=' + @beginDate + ' /A"endtime":8=' + @endDate
print @command
EXEC master.dbo.xp_cmdshell @command
select @endDate=convert(varchar(10),max(dt_signDate),120) from rpt_xiaoshou
insert into dtsSync values(@beginDate, @endDate, getdate())
第一步:
下载jacob
http://danadler.com/jacob/jacobBin_17.zip
解压后将dll文件放到%JAVA_HOME%\jre\bin
和 %JAVA_HOME%\bin(如果不放:java.lang.UnsatisfiedLinkError: no jacob in java.library.path)
目录下,将jar文件放到%JAVA_HOME%\jre\lib\ext目录下(各种报错,还是放到工程中吧),不用再配置环境变量
第二步:
创建dts文件
直接用sqlserver2000的导入导出工具创建一个dts任务,并保存为存储结构文件,放到比如d:\temp\dts\dts_test.dts
第三步:
通过java调用dts文件执行数据导入导出
package dbf; import java.text.SimpleDateFormat;
import java.util.Date;
import com.jacob.activeX.*;
import com.jacob.com.*; public class ExportDts {
public void exportdbf() { SimpleDateFormat localTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String importFileName = "D:/temp/dbf"; //这里导出的DBF要存放的路径
String DtsPath = "D:/temp/dts/dts_test.dts"; //这里是DTS文件的路径 try {
System.out.println("start:" + localTime.format(new Date())); ActiveXComponent app = new ActiveXComponent("DTS.Package2"); Dispatch.callN(app, "LoadFromStorageFile",new Variant[] {new Variant(DtsPath),new Variant("")}); //重新设置路径
Dispatch DTSconns = Dispatch.get(app,"Connections").toDispatch();
Dispatch DTSconn = Dispatch.callN(DTSconns,"Item",new Variant[]{new Variant(2)}).toDispatch();
Dispatch.put(DTSconn,"DataSource",new String(importFileName)); //执行
Dispatch.callN(app, "Execute", new Variant[] {}); //得到执行的结果
Dispatch DTSsteps = Dispatch.get(app,"Steps").toDispatch();
Dispatch DTSstep = Dispatch.callN(DTSsteps,"Item",new Variant[]{new Variant(1)}).toDispatch();
Variant ResultValue = Dispatch.get(DTSstep,"ExecutionResult"); if(ResultValue.toInt()==0){
System.out.println("导出成功"); }else{
System.out.println("导出失败"); }
System.out.println("end:" + localTime.format(new Date()));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
java中通过jacob调用dts进行数据导入导出的更多相关文章
- Java中是否可以调用一个类中的main方法?
前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...
- java中,字符串类型的时间数据怎样转换成date类型。
将字符串类型的时间转换成date类型可以使用SimpleDateFormat来转换,具体方法如下:1.定义一个字符串类型的时间:2.创建一个SimpleDateFormat对象并设置格式:3.最后使用 ...
- java 中使用ajax调用后台方法注意事项
java 中使用ajax调用后台方法注意事项,后台方法一定要加@ResponseBody jQuery.validator.addMethod("checkRuleName",fu ...
- JAVA中方法的调用主要有以下几种
JAVA中方法的调用主要有以下几种: 1.非静态方法 非静态方法就是没有 static 修饰的方法,对于非静态方法的调用,是通过对 象来调用的,表现形式如下. 对象名.方法() eg: public ...
- Java实现大批量数据导入导出(100W以上) -(一)导入
最近业务方有一个需求,需要一次导入超过100万数据到系统数据库.可能大家首先会想,这么大的数据,干嘛通过程序去实现导入,为什么不直接通过SQL导入到数据库. 大数据量报表导出请参考:Java实现大批量 ...
- Java实现大批量数据导入导出(100W以上) -(二)导出
使用POI或JXLS导出大数据量(百万级)Excel报表常常面临两个问题: 1. 服务器内存溢出: 2. 一次从数据库查询出这么大数据,查询缓慢. 当然也可以分页查询出数据,分别生成多个Excel打包 ...
- Access中一句查询代码实现Excel数据导入导出
摘 要:用一句查询代码,写到vba中实现Excel数据导入导出,也可把引号中的SQL语句直接放到查询分析器中执行正 文: 导入数据(导入数据时第一行必须是字段名): DoCmd.RunSQL &quo ...
- 数据库数据导入/导出报错:无法在只读列“Id”中插入数据。
本文仅供小白参考,大佬请随意...... 本例是:从vs 2017自带的localDB数据库的数据---导出到---->Sql Server 2008中的相应数据库中 1. 导出数据库: 2. ...
- Java实现大批量数据导入导出(100W以上) -(三)超过25列Excel导出
前面一篇文章介绍大数据量导出实现: Java实现大批量数据导入导出(100W以上) -(二)导出 这篇文章在Excel列较少时,按以上实际验证能很快实现生成.但如果列较多时用StringTemplat ...
随机推荐
- E: Sub-process /usr/bin/dpkg returned an error code (1)解决办法
解决方法: 先将info文件夹更名 sudo mv /var/lib/dpkg/info /var/lib/dpkg/info.bk 新建一个新的info文件夹 sudo mkdir /var/lib ...
- Vue+Iview+Node 登录demo
1.相关组件安装 axios iview js-cookie crypto-js 2.子父组件传值.监听窗体大小改变.记住密码 .自定义组件(事件 .props) created:实例已经创建完 ...
- 获取AndroidManifest.xml中的meta-data元素
android 开发中: 在AndroidManifest.xml中,<meta-data>元素可以作为子元素, 被包含在<activity>.<application& ...
- C#winform datagridview单元格的单击处理
首先看看效果图: 需求:要求是的在datagridview里面绑定数据后,可以任意点击想要点击的某列的单元格进行改变数据.需要在datagridview里面写3个事件 1.RowPrePaint事件: ...
- JAVA判断一个对象生存还是死亡
JAVA中判断一个对象是否死亡的算法有两种: 引用计数算法 可达性分析算法 一.引用计数算法所谓引用计数算法就是,给一个对象定义一个引用计数器,每当该对象被引用一次引用计数器就加1,如果一个对象的引用 ...
- VMware Workstation 10 简体中文安装教程
分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 分享到 一键分享 QQ ...
- Ubuntu环境下Error: Invalid or corrupt jarfile xxx.jar
一.问题描述 Ubuntu环境下将Maven项目打包成jar包后,运行一下指令: $ java -jar my.jar 发生错误: Error: Invalid or corrupt jarfile ...
- 【期望DP】[poj2096]Collecting Bugs
偷一波翻译: 工程师可以花费一天去找出一个漏洞——这个漏洞可以是以前出现过的种类,也可能是未曾出现过的种类,同时,这个漏洞出现在每个系统的概率相同.要求得出找到n种漏洞,并且在每个系统中均发现漏洞的期 ...
- JavaScript设置body高度为浏览器高度的方法
document.getElementsByTagName('body')[0].style.height = window.innerHeight+'px';
- thinkphp 模板主题
一个模块如果需要支持多套模板文件的话,就可以使用模板主题功能. 默认情况下,没有开启模板主题功能,如果需要开启,设置 DEFAULT_THEME 参数即可: 大理石平台精度等级 // 设置默认的模板主 ...