Mule使用NULL日期将CSV导入Mysql

时间:2015-06-05 13:01:45

标签: mule esb mule-studio

我使用MULE将CSV文件导入Mysql数据库。但是,在导入CSV时,如果有一个空字段映射到Mysql中的日期字段,则导入失败。

这是Mysql字段:

Description     RecDate
---------------------------
Varchar(50)     Date

以下是CSV文件:

 your basic description,,
 another description,,
 yet another description,,

这是Mule Config

 <?xml version="1.0" encoding="UTF-8"?>
 <mule xmlns:jdbc-ee="http://www.mulesoft.org/schema/mule/ee/jdbc"     xmlns:file="http://www.mulesoft.org/schema/mule/file"  xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.6.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans        
http://www.springframework.org/schema/beans/spring-beans-current.xsd http://www.mulesoft.org/schema/mule/corejttp://www.mulesoft.org/schema/mule/core/current/mule.xsdjttp://www.mulesoft.org/schema/mule/filejttp://www.mulesoft.org/schema/mule/file/current/mule-file.xsdjttp://www.mulesoft.org/schema/mule/ee/trackingjttp://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsdjttp://www.mulesoft.org/schema/mule/ee/jdbc jttp://www.mulesoft.org/schema/mule/ee/jdbc/current/mule-jdbc-ee.xsd">

<configuration doc:name="Configuration">
<expression-language autoResolveVariables="true">
<import class="org.mule.util.StringUtils" />
</expression-language>
</configuration>
<jdbc-ee:mysql-data-source name="MySQL_Data_Source" user="XXX" password="XXX" url="jdbc:mysql://127.0.0.1:3306/XXX" transactionIsolation="UNSPECIFIED" doc:name="MySQL Data Source"/>
<jdbc-ee:connector name="Database" dataSource-ref="MySQL_Data_Source" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database"/>
<flow name="csvFlow1" >
<file:inbound-endpoint path="C:\Users\XXX\Desktop\Mule_Testing" pollingFrequency="5000" doc:name="Source" responseTimeout="10000" tracking:enable-default-events="true"/>
<file:filename-wildcard-filter caseSensitive="false" pattern="CRM_UPDATES.csv"/>
<object-to-string-transformer doc:name="Object to String"/>
<splitter expression="#[StringUtils.split(message.payload, '\n\r')]" doc:name="Splitter"/>
<expression-transformer expression="#[StringUtils.split(message.payload, ',')]" doc:name="Expression"/>
<logger level="DEBUG" doc:name="Logger" message="Payload is: #[message.payload]"/>
<jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="InsertRecord" queryTimeout="-1" connector-ref="Database" doc:name="MyDB">
        <jdbc-ee:query key="InsertRecord" value="INSERT INTO `XXX` (`Description`,`RecDate`) VALUES (#[message.payload[0]],#[message.payload[1]])"/>

</jdbc-ee:outbound-endpoint>
</flow>
</mule>  

每当我将CSV文件更改为以下内容时:

  your basic description,0000-00-00,
  another description,0000-00-00,
  yet another description,0000-00-00,

导入将起作用。 如果我将CSV日期字段更改为NULL,则导入将失败:

   your basic description,NULL,
   another description,NULL,
   yet another description,NULL,

1 个答案:

答案 0 :(得分:1)

问题来自:

StringUtils.split(message.payload, ',')

这会生成一个字符串数组。

如果CSV为:

your basic description,,

它会使用一个空字符串作为日期字段的值,我认为不行。

如果CSV为:

your basic description,NULL,

它将使用带有"NULL"的字符串,这也不是有效日期。

我建议您将StringUtils.trimToNull应用于split数组的每个元素,以获取日期字段的实际null值。