我使用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,
答案 0 :(得分:1)
问题来自:
StringUtils.split(message.payload, ',')
这会生成一个字符串数组。
如果CSV为:
your basic description,,
它会使用一个空字符串作为日期字段的值,我认为不行。
如果CSV为:
your basic description,NULL,
它将使用带有"NULL"
的字符串,这也不是有效日期。
我建议您将StringUtils.trimToNull
应用于split数组的每个元素,以获取日期字段的实际null
值。