首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JdbcMetadataStore -bad SQL语法

JdbcMetadataStore -bad SQL语法
EN

Stack Overflow用户
提问于 2020-01-19 11:34:23
回答 2查看 558关注 0票数 0

我想让ftp适配器使用持久元数据存储。我创建了FtpPersistentAcceptOnceFileListFilter bean以便自动处理并在流定义中使用,如下所示:

代码语言:javascript
运行
复制
    @Bean
    fun ftpPersistentAcceptOnceFileListFilter (dataSource: DataSource): FtpPersistentAcceptOnceFileListFilter {
        return FtpPersistentAcceptOnceFileListFilter(JdbcMetadataStore(dataSource), "clientOrderfile")
    }

当我运行这个应用程序时,我反复得到

代码语言:javascript
运行
复制
2020-01-19 12:15:39.291 ERROR 5112 --- [ask-scheduler-4] o.s.integration.handler.LoggingHandler   : org.springframework.messaging.MessagingException: Problem occurred while synchronizing 'order' to local directory; nested exception is org.springframework.messaging.MessagingException: Failed to execute on session; nested exception is org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [INSERT INTO %sMETADATA_STORE(METADATA_KEY, METADATA_VALUE, REGION) SELECT ?, ?, ? FROM %sMETADATA_STORE WHERE METADATA_KEY=? AND REGION=? HAVING COUNT(*)=0]; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "INSERT INTO %[*]SMETADATA_STORE(METADATA_KEY, METADATA_VALUE, REGION) SELECT ?, ?, ? FROM %SMETADATA_STORE WHERE METADATA_KEY=? AND REGION=? HAVING COUNT(*)=0"; expected "identifier"; SQL statement:
INSERT INTO %sMETADATA_STORE(METADATA_KEY, METADATA_VALUE, REGION) SELECT ?, ?, ? FROM %sMETADATA_STORE WHERE METADATA_KEY=? AND REGION=? HAVING COUNT(*)=0 [42001-200]
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.synchronizeToLocalDirectory(AbstractInboundFileSynchronizer.java:355)
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizingMessageSource.doReceive(AbstractInboundFileSynchronizingMessageSource.java:265)
    at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizingMessageSource.doReceive(AbstractInboundFileSynchronizingMessageSource.java:66)
    at org.springframework.integration.endpoint.AbstractFetchLimitingMessageSource.doReceive(AbstractFetchLimitingMessageSource.java:45)
    at org.springframework.integration.endpoint.AbstractMessageSource.receive(AbstractMessageSource.java:167)
    at org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage(SourcePollingChannelAdapter.java:250)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:359)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.pollForMessage(AbstractPollingEndpoint.java:328)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.lambda$null$1(AbstractPollingEndpoint.java:275)
    at org.springframework.integration.util.ErrorHandlingTaskExecutor.lambda$execute$0(ErrorHandlingTaskExecutor.java:57)
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
    at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:55)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.lambda$createPoller$2(AbstractPollingEndpoint.java:272)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

我使用的是由spring提供的默认数据存储+ H2数据库。

出什么事了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-19 11:49:35

我通过使JdbcMetadataStore成为一个bean来修正它,所以初始化方法被称为.

代码语言:javascript
运行
复制
    @Bean
    fun ftpPersistentAcceptOnceFileListFilter(jdbcMetadataStore: JdbcMetadataStore) =
            FtpPersistentAcceptOnceFileListFilter(jdbcMetadataStore, "inboundFile")

    @Bean
    fun jdbcMetadataStore(dataSource: DataSource) = JdbcMetadataStore(dataSource)
票数 3
EN

Stack Overflow用户

发布于 2020-01-19 11:40:50

从您的堆栈跟踪中我看到了以下问题:

代码语言:javascript
运行
复制
Syntax error in SQL statement
"INSERT INTO %[*]SMETADATA_STORE(METADATA_KEY,
           METADATA_VALUE, REGION) SELECT ?, ?, ? 
    FROM %SMETADATA_STORE 
    WHERE METADATA_KEY=? AND REGION=? 
    HAVING COUNT(*)=0"; expected "identifier";

似乎没有正确初始化表参见this post

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59809620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档