- 浏览: 743168 次
- 性别:
- 来自: 长春
文章分类
最新评论
-
qq591628420:
正解!!!!!!!!!!!!!!!!!!!!!!!!!! ...
ibatis配置log4j输出sql语句等日志信息 -
joy1982109:
我在was下发现一个同名的xml文件,是不是就是这个呢。不过没 ...
让webshere(was)发布程序编译jsp为java文件,java文件位置 -
xiaoqing2305:
...
jbuilder 2006中添加不支持的文件类型,不支持的不显示问题 -
metallicats:
非常感谢博主!
weblogic访问ORACLE,thin连接方式存取BLOB和CLOB字段(原创) -
lailaiping:
谢谢作者了
让webshere(was)发布程序编译jsp为java文件,java文件位置
tos版本4.0.2
最近同事在弄数据交换,用的是talend open studio(tos),在一个数据库的情况下,使用toracleoutput控件可以实现blob的导入导出。但是在两个数据库的情况下执行涉及好的过程就报错了,报没有表或者视图。很怪异的报错。
我经过查看数据交换工具生成的运行期代码,发现,blob的处理方式是用jdbc 的setObject(blob)方法
原代码如下
pstmt_tOracleOutput_3.setObject(6, rs.getObject(6));
这个方法在两个库之间是不行的。
改用如下代码,可以通过
java.sql.Blob oblob = (java.sql.Blob) (rs.getObject(6)); pstmt_tOracleOutput_3.setObject(6, oblob.getBytes(1, (int) oblob.length()));
通过修改tos下面
TOS-Win32-r43696-V4.0.2\plugins\org.talend.designer.components.localprovider_4.0.2.r43696\components\templates下的db_output_bulk.skeleton文件
generateSetStmt方法,添加else分支
public String generateSetStmt(String typeToGenerate, String dbType, Column column, int index, String incomingConnName, String cid, int actionType) { boolean isObject = false; String prefix = null; if(actionType == NORMAL_TYPE) { prefix = "pstmt_"; } else if(actionType == INSERT_TYPE) { prefix = "pstmtInsert_"; } else if(actionType == UPDATE_TYPE) { prefix = "pstmtUpdate_"; } StringBuilder setStmt = new StringBuilder(); if(typeToGenerate.equals("Character")) { isObject = true; setStmt.append("if(" + incomingConnName + "." + column.getName() + " == null) {\r\n"); setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.CHAR);\r\n"); } else if(typeToGenerate.equals("Date")) { isObject = true; setStmt.append("if(" + incomingConnName + "." + column.getName() + " == null) {\r\n"); setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.DATE);\r\n"); } else if(typeToGenerate.equals("byte[]")) { isObject = true; setStmt.append("if(" + incomingConnName + "." + column.getName() + " == null) {\r\n"); if(dbType != null && (dbType.equals("LONG RAW") || dbType.equals("RAW"))) { setStmt.append(prefix + cid + ".setBytes(" + index + ", null);\r\n"); } else { setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.ARRAY);\r\n"); } } else if(typeToGenerate.equals("Long") || typeToGenerate.equals("Byte") || typeToGenerate.equals("Integer") || typeToGenerate.equals("Short")) { isObject = true; setStmt.append("if(" + incomingConnName + "." + column.getName() + " == null) {\r\n"); setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.INTEGER);\r\n"); } else if(typeToGenerate.equals("String")) { isObject = true; setStmt.append("if(" + incomingConnName + "." + column.getName() + " == null) {\r\n"); if(dbType != null && dbType.equals("CLOB")) { setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.CLOB);\r\n"); } else { setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.VARCHAR);\r\n"); } } else if(typeToGenerate.equals("Object")) { isObject = true; setStmt.append("if(" + incomingConnName + "." + column.getName() + " == null) {\r\n"); if(dbType != null && dbType.equals("BLOB")) { setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.BLOB);\r\n"); } else if("CLOB".equals(dbType)){ setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.CLOB);\r\n"); } else { setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.OTHER);\r\n"); } } else if(typeToGenerate.equals("Boolean")) { isObject = true; setStmt.append("if(" + incomingConnName + "." + column.getName() + " == null) {\r\n"); setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.BOOLEAN);\r\n"); } else if(typeToGenerate.equals("Double")) { isObject = true; setStmt.append("if(" + incomingConnName + "." + column.getName() + " == null) {\r\n"); setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.DOUBLE);\r\n"); } else if(typeToGenerate.equals("Float")) { isObject = true; setStmt.append("if(" + incomingConnName + "." + column.getName() + " == null) {\r\n"); setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.FLOAT);\r\n"); } if(isObject) { setStmt.append("} else {"); } typeToGenerate = getGenerateType(typeToGenerate); if(typeToGenerate.equals("Char") || typeToGenerate.equals("Character")) { if(isObject) { setStmt.append("if(" + incomingConnName + "." + column.getName() + " == null) {\r\n"); } else { setStmt.append("if(String.valueOf(" + incomingConnName + "." + column.getName() + ").toLowerCase().equals(\"null\")) {\r\n"); } setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.CHAR);\r\n"); setStmt.append("} else if(" + incomingConnName + "." + column.getName() + " == '\0'){\r\n"); setStmt.append(prefix + cid + ".setString(" + index + ", \"\");\r\n"); setStmt.append("} else {\r\n"); setStmt.append(prefix + cid + ".setString(" + index + ", String.valueOf(" + incomingConnName + "." + column.getName() + "));\r\n"); setStmt.append("}"); } else if(typeToGenerate.equals("Date")) { setStmt.append("if(" + incomingConnName + "." + column.getName() + " != null) {\r\n"); setStmt.append(prefix + cid + ".setTimestamp(" + index + ", new java.sql.Timestamp(" + incomingConnName + "." + column.getName() + ".getTime()));\r\n"); setStmt.append("} else {\r\n"); setStmt.append(prefix + cid + ".setNull(" + index + ", java.sql.Types.DATE);\r\n"); setStmt.append("}\r\n"); } else if(typeToGenerate.equals("Bytes") && (dbType != null && (dbType.equals("LONG RAW") || dbType.equals("RAW")))) { setStmt.append(prefix + cid + ".setBytes(" + index + ", " + incomingConnName + "." + column.getName() + ");\r\n"); } else if(typeToGenerate.equals("String") && (dbType != null && dbType.equals("CLOB"))) { setStmt.append(prefix + cid + ".setCharacterStream(" + index + ", new java.io.StringReader(" + incomingConnName + "." + column.getName() + "), " + incomingConnName + "." + column.getName() + ".length());\r\n"); } else if (typeToGenerate.equals("Bytes") && (dbType != null && dbType.equals("BLOB"))) { setStmt.append(prefix + cid + ".setBinaryStream(" + index + ", new java.io.ByteArrayInputStream((byte[])" + incomingConnName + "." + column.getName() + "), ((byte[])" + incomingConnName + "." + column.getName() + ").length);\r\n"); } else if (typeToGenerate.equals("Object") && (dbType != null && dbType.equals("BLOB"))) {//添加的else代码 setStmt.append("java.sql.Blob oblob = (java.sql.Blob)(" + incomingConnName + "." + column.getName()+");\r\n"); setStmt.append(prefix + cid + ".set" + typeToGenerate + "(" + index + ", oblob.getBytes(1, (int)oblob.length()));\r\n"); } else { setStmt.append(prefix + cid + ".set" + typeToGenerate + "(" + index + ", " + incomingConnName + "." + column.getName() + ");\r\n"); } if(isObject) { setStmt.append("}\r\n"); } return setStmt.toString(); }
发表评论
-
talend open studio 连接access时,需要用32位的软件
2019-04-11 11:18 472mdb文件是32位的,建立系统odbc数据源或者用文件直连的 ... -
XML内容中不能有&字符
2017-06-25 17:27 2380&是xml中的转义字符的开头,如果xml内容中有ur ... -
天成公司产品开发部“错题本”
2017-05-12 15:57 5111、页面写死IP地址等信息 造成问题:实施人员不容易维护 ... -
windows和linux下使用命令查找端口对应的进程pid并杀死进程
2017-01-02 09:46 3501windows下命令,8080是要杀死进程的端口,这个命令 ... -
wmware12 共享目录不好使,不能安装wmwarre tools
2016-10-25 12:14 991表现是这样的,按照网上设置了共享目录后,做映射时就是看不到 ... -
java.lang.Exception: XML文档格式不正确:prolog 中不允许有内容
2016-10-09 09:30 1635在进行xml开发的过程中,调用对方webservice,接口 ... -
关于URIEncoding设置规则
2016-03-19 13:34 3674<!--[if !supportLists]--> ... -
js文件压缩成gzjs格式的方法和工具
2015-01-30 10:15 18081、解压 解压可以直接用winrar工具打开gzjs文件 ... -
tomcat的server.xml里面配置URIEncoding的问题,导致post和get访问编码不一致
2014-10-28 16:52 4574原来的发送短信的包都是好用的,post方式和get方式提交数 ... -
windows远程桌面强制登录,当用户满的时候
2014-10-27 13:16 3201windows远程桌面强制登录,如果用户满了,会提示超出最 ... -
oracle数据恢复
2013-11-29 15:51 1034这些恢复都是在数据库启用了undo表空间的情况下才好使的,并 ... -
java HashMap存值巧遇,key不同但是却覆盖了之前的值
2013-09-27 17:16 2654情况是这样的 一个空的HashMap testHM; t ... -
查看windows系统进程的详细信息,任务管理器看不到的
2013-07-12 13:01 9360任务管理器的显示东西太简单了,想看到一个进程的详细路径和启 ... -
oracle 检索数据的时候报ORA-01722: 无效数字
2013-07-11 17:18 4196sql语句如下 select * from yhb_ ... -
java高效代码优化方案
2013-04-10 23:31 2521将类尽可能的设置为Final,更深入点说,如果类是fina ... -
利用winrar给已经压缩好的压缩包加密码,和压缩前添加密码
2013-01-06 10:14 5036其实很简单,但是我用了好久的winrar才知道这个功能,一般都 ... -
nginx 操作,启动、停止、重启
2012-11-01 16:47 44954查看nginx进程看看有没有启动,并可以查看进程ID [r ... -
vnc 常用操作笔记,启动vncserver,指定端口
2012-10-16 15:50 15887linux下启动vnc [root@anhnfts n ... -
eclipse jee 版,项目图标上总有一个红色的叉子
2012-10-08 15:39 12579eclipse 使用的时候项目 ... -
websphere6,7上修改类装载顺序为应用程序优先
2012-09-29 15:28 5909看附件吧,写在word里了, 想弄到这里太费劲了,不支持 ...
相关推荐
Talend Open Studio5.0 用户手册 介绍如何使用Talend
文档首先说明了数据大势,数据处理,而后衍生出各种ETL工具,最后详细介绍了talend的使用,主要介绍了JOB的创建以及一系列组件的使用,图文讲解,入门级的好帮手
talend open studio for big data v5.5.2下载地址详见txt文件
talend open studio v5.6.3网盘下载地址
talend open studio for big data v5.6.3下载地址详见txt
talend open studio for big data v6.2.1下载地址详见txt文件
talend open studio for big data v6.1.2下载地址详见txt
文档里有针对Talend Open Studio For Data integration (ETL) 的高清视频教程下载地址。有需要的人可以自行下载。
talend open studio for big data v6.0.1下载地址详见txt
使用Open Studio for Data Integration与最新的云应用程序和平台或传统数据库和应用程序一起使用,以通过图形工具,本机代码生成以及数百个预建组件和连接器快速设计和部署。 Open Studio for Data Integration是...
talend open studio for big data v6.3.0下载地址见txt文件
Talend Open Studio 是开源的数据分析平台,用于etl相当好用。优势是java平台的开放性可以让你随心所欲地进行数据分析。对于对java熟悉的人员做etl相当适合
talend open studio for big data v6.1.1下载地址在文本内,请注意
实现在Windows 下进行 Talend ESB 数据抽取的定时任务。
使用适用于ESB的Open Studio扩展您的开源堆栈,并将更新传递给MDM,以分发到连接的系统。 Talend是Apache项目的积极贡献者,下载了数百万次下载,并提供了各种功能强大的开源集成软件工具,Talend是云和大数据集成...
Open Studio for Data Quality可以轻松连接到数百个数据源并生成分析,以帮助定义下一步清洁数据的步骤。 根据自定义阈值评估数据质量,并衡量是否符合内部标准(例如SKU)或外部标准(例如邮政编码)。 了解如何将...
成千上万的开发人员使用Talend Open Studio轻松与任何应用程序,数据库,API或Web服务集成。 嵌入现有的Java代码库或利用社区组件和代码来扩展您的项目。 Talend拥有数百万的下载量,并提供各种功能强大的开源集成...
集成方案强大灵活 Talend Open Studio是可以满足企业所有集成需求的解决方案,它的强大与灵活主要体现 在: • 数据库同步(synchronization)或复制(replication) • 数据righttime交换或batch交换 • ETL(Extract...
Open Studio for Big Data 是完全开源的,因此您可以查看代码并使用它。 嵌入现有 Java 代码库、创建您自己的组件或利用社区组件和代码来扩展您的项目。 作为 Apache 项目的积极贡献者,拥有数百万次下载和全系列的...