- 浏览: 749965 次
- 性别:
- 来自: 长春
文章分类
最新评论
-
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 568mdb文件是32位的,建立系统odbc数据源或者用文件直连的 ... -
XML内容中不能有&字符
2017-06-25 17:27 2482&是xml中的转义字符的开头,如果xml内容中有ur ... -
天成公司产品开发部“错题本”
2017-05-12 15:57 5461、页面写死IP地址等信息 造成问题:实施人员不容易维护 ... -
windows和linux下使用命令查找端口对应的进程pid并杀死进程
2017-01-02 09:46 3580windows下命令,8080是要杀死进程的端口,这个命令 ... -
wmware12 共享目录不好使,不能安装wmwarre tools
2016-10-25 12:14 1032表现是这样的,按照网上设置了共享目录后,做映射时就是看不到 ... -
java.lang.Exception: XML文档格式不正确:prolog 中不允许有内容
2016-10-09 09:30 1682在进行xml开发的过程中,调用对方webservice,接口 ... -
关于URIEncoding设置规则
2016-03-19 13:34 3749<!--[if !supportLists]--> ... -
js文件压缩成gzjs格式的方法和工具
2015-01-30 10:15 19471、解压 解压可以直接用winrar工具打开gzjs文件 ... -
tomcat的server.xml里面配置URIEncoding的问题,导致post和get访问编码不一致
2014-10-28 16:52 4605原来的发送短信的包都是好用的,post方式和get方式提交数 ... -
windows远程桌面强制登录,当用户满的时候
2014-10-27 13:16 3239windows远程桌面强制登录,如果用户满了,会提示超出最 ... -
oracle数据恢复
2013-11-29 15:51 1076这些恢复都是在数据库启用了undo表空间的情况下才好使的,并 ... -
java HashMap存值巧遇,key不同但是却覆盖了之前的值
2013-09-27 17:16 2693情况是这样的 一个空的HashMap testHM; t ... -
查看windows系统进程的详细信息,任务管理器看不到的
2013-07-12 13:01 9429任务管理器的显示东西太简单了,想看到一个进程的详细路径和启 ... -
oracle 检索数据的时候报ORA-01722: 无效数字
2013-07-11 17:18 4322sql语句如下 select * from yhb_ ... -
java高效代码优化方案
2013-04-10 23:31 2558将类尽可能的设置为Final,更深入点说,如果类是fina ... -
利用winrar给已经压缩好的压缩包加密码,和压缩前添加密码
2013-01-06 10:14 5173其实很简单,但是我用了好久的winrar才知道这个功能,一般都 ... -
nginx 操作,启动、停止、重启
2012-11-01 16:47 45024查看nginx进程看看有没有启动,并可以查看进程ID [r ... -
vnc 常用操作笔记,启动vncserver,指定端口
2012-10-16 15:50 16053linux下启动vnc [root@anhnfts n ... -
eclipse jee 版,项目图标上总有一个红色的叉子
2012-10-08 15:39 12644eclipse 使用的时候项目 ... -
websphere6,7上修改类装载顺序为应用程序优先
2012-09-29 15:28 5949看附件吧,写在word里了, 想弄到这里太费劲了,不支持 ...
相关推荐
Talend Open Studio是一款企业级开源ETL(Extract, Transform, Load)工具,用于数据集成和数据管理任务。该软件允许开发者通过拖放的方式来构建数据集成流程,并且支持广泛的集成场景,包括数据清洗、数据转换、...
《Talend Open Studio用户手册》是一份详细指导用户如何操作和利用Talend Open Studio进行数据集成和处理的文档。这份手册适用于Talend Open Studio的5.0版本,旨在帮助用户掌握这款强大的开源集成工具,从而实现...
### Talend Open Studio V5.6.3 版本概览与下载指南 #### 一、Talend Open Studio 简介 Talend Open Studio 是一款强大的数据集成工具,它提供了一系列用于数据清洗、转换和加载等功能的组件,帮助企业用户轻松...
talend open studio for big data v5.6.3下载地址详见txt
文档里有针对Talend Open Studio For Data integration (ETL) 的高清视频教程下载地址。有需要的人可以自行下载。
talend open studio for big data v5.5.2下载地址详见txt文件
这一点对于那些已经熟悉Java语言的开发者来说,是一个非常大的优势,他们可以利用已有的Java知识快速上手Talend Open Studio,从而在数据整合领域取得更大的竞争力。 Talend Open Studio支持多种数据源,包括关系型...
### Talend Open Studio for Big Data V6.1.2 #### 概述 Talend Open Studio for Big Data是一款强大的开源数据集成工具,专为处理大规模数据集而设计。该软件支持多种大数据处理技术,包括但不限于Hadoop ...
talend open studio for big data v6.2.1下载地址详见txt文件
3. **异构IT环境支持**:Talend Open Studio for ESB支持多种数据源和系统之间的集成,无论是同构还是异构的IT环境,TOS-ESB都能够提供有效的解决方案。 ### Talend Open Studio for ESB的功能架构 TOS-ESB的功能...
talend open studio for big data v6.0.1下载地址详见txt
使用Open Studio for Data Integration与最新的云应用程序和平台或传统数据库和应用程序一起使用,以通过图形工具,本机代码生成以及数百个预建组件和连接器快速设计和部署。 Open Studio for Data Integration是...
成千上万的开发人员使用Talend Open Studio轻松与任何应用程序,数据库,API或Web服务集成。 嵌入现有的Java代码库或利用社区组件和代码来扩展您的项目。 Talend拥有数百万的下载量,并提供各种功能强大的开源集成...
talend open studio for big data v6.3.0下载地址见txt文件
talend open studio for big data v6.1.1下载地址在文本内,请注意
使用适用于ESB的Open Studio扩展您的开源堆栈,并将更新传递给MDM,以分发到连接的系统。 Talend是Apache项目的积极贡献者,下载了数百万次下载,并提供了各种功能强大的开源集成软件工具,Talend是云和大数据集成...
Open Studio for Data Quality可以轻松连接到数百个数据源并生成分析,以帮助定义下一步清洁数据的步骤。 根据自定义阈值评估数据质量,并衡量是否符合内部标准(例如SKU)或外部标准(例如邮政编码)。 了解如何将...
假设我们需要从源数据库的“Orders”表中抽取订单数据,并将其加载到目标数据库的两个表“Orders_A”和“Orders_B”中。 1. **配置源数据库连接**:在Talend Studio中配置源数据库连接,如MySQL。 2. **配置目标...