我正在使用MULE将CSV文件导入Mysql数据库。但是,导入CSV时,如果在MySQL中有一个空字段映射到日期字段,则导入失败。
这是Mysql字段:
Description RecDate
---------------------------
Varchar(50) Date
这是CSV文件:
your basic description,,
another description,,
yet another description,,
这是M子配置
<?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,
问题来自:
StringUtils.split(message.payload, ',')
这将产生一个字符串数组。
如果CSV是:
your basic description,,
它将使用一个空字符串作为date字段的值,我认为这还不行。
如果CSV是:
your basic description,NULL,
它将使用其中包含的字符串"NULL"
,这也不是有效的日期。
我建议您将其应用于StringUtils.trimToNull
拆分数组的每个元素,以获取null
日期字段的实际值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句