safishhh opened a new issue, #5235:
URL: https://github.com/apache/linkis/issues/5235

   ### Search before asking
   
   - [x] I searched the [issues](https://github.com/apache/linkis/issues) and 
found no similar issues.
   
   
   ### Linkis Component
   
   linkis-public-enhancements
   
   ### Steps to reproduce
   
   版本Linkis1.4.0 + Exchangis1.1.2 
   
   使用Exchangis创建任务时, 新建子任务页面加载弹窗报错`获取字段列表失败`
   
   ## 日志
   
   ```shell
   2025-05-30 11:47:52.445 [ERROR] [qtp1877161234-24                        ] 
o.a.l.m.q.c.s.AbstractCacheMetaService (158) [getConnAndRun] [JobId-] - Error 
to invoke meta service java.lang.RuntimeException: Fail to get Sql 
columns(获取字段列表失败)
        at 
org.apache.linkis.metadata.query.service.MysqlMetaService.queryColumns(MysqlMetaService.java:107)
 ~[linkis-metadata-query-service-jdbc-1.4.0.jar:1.4.0]
        at 
org.apache.linkis.metadata.query.service.MysqlMetaService.queryColumns(MysqlMetaService.java:39)
 ~[linkis-metadata-query-service-jdbc-1.4.0.jar:1.4.0]
        at 
org.apache.linkis.metadata.query.common.service.AbstractDbMetaService.lambda$getColumns$4(AbstractDbMetaService.java:79)
 ~[linkis-metadata-query-common-1.4.0.jar:1.4.0]
        at 
org.apache.linkis.metadata.query.common.service.AbstractCacheMetaService.run(AbstractCacheMetaService.java:182)
 ~[linkis-metadata-query-common-1.4.0.jar:1.4.0]
        at 
org.apache.linkis.metadata.query.common.service.AbstractCacheMetaService.getConnAndRun(AbstractCacheMetaService.java:149)
 ~[linkis-metadata-query-common-1.4.0.jar:1.4.0]
        at 
org.apache.linkis.metadata.query.common.service.AbstractDbMetaService.getColumns(AbstractDbMetaService.java:79)
 ~[linkis-metadata-query-common-1.4.0.jar:1.4.0]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
~[?:1.8.0_451]
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
~[?:1.8.0_451]
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 ~[?:1.8.0_451]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_451]
        at 
org.apache.linkis.metadata.query.server.loader.MetaClassLoaderManager.lambda$getInvoker$5(MetaClassLoaderManager.java:245)
 ~[linkis-metadata-query-server-1.4.0.jar:1.4.0]
        at 
org.apache.linkis.metadata.query.server.service.impl.MetadataQueryServiceImpl.invokeMetaMethod(MetadataQueryServiceImpl.java:867)
 ~[linkis-metadata-query-server-1.4.0.jar:1.4.0]
        at 
org.apache.linkis.metadata.query.server.service.impl.MetadataQueryServiceImpl.getColumnsByDsId(MetadataQueryServiceImpl.java:291)
 ~[linkis-metadata-query-server-1.4.0.jar:1.4.0]
        at 
org.apache.linkis.metadata.query.server.restful.MetadataCoreRestful.getColumns(MetadataCoreRestful.java:295)
 ~[linkis-metadata-query-server-1.4.0.jar:1.4.0]
        at 
org.apache.linkis.metadata.query.server.restful.MetadataCoreRestful$$FastClassBySpringCGLIB$$185c4cdc.invoke(<generated>)
 ~[linkis-metadata-query-server-1.4.0.jar:1.4.0]
        at 
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) 
~[spring-core-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
 ~[spring-aop-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
 ~[spring-aop-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
 ~[spring-aop-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)
 ~[spring-aop-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.apache.linkis.server.restful.SpringRestfulCatchAOP.$anonfun$dealResponseRestful$1(SpringRestfulCatchAOP.scala:43)
 ~[linkis-module-1.4.0.jar:1.4.0]
        at org.apache.linkis.common.utils.Utils$.tryCatch(Utils.scala:49) 
~[linkis-common-1.4.0.jar:1.4.0]
        at org.apache.linkis.server.package$.catchMsg(package.scala:76) 
~[linkis-module-1.4.0.jar:1.4.0]
        at org.apache.linkis.server.package$.catchIt(package.scala:116) 
~[linkis-module-1.4.0.jar:1.4.0]
        at 
org.apache.linkis.server.restful.SpringRestfulCatchAOP.dealResponseRestful(SpringRestfulCatchAOP.scala:42)
 ~[linkis-module-1.4.0.jar:1.4.0]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
~[?:1.8.0_451]
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
~[?:1.8.0_451]
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 ~[?:1.8.0_451]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_451]
        at 
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
 ~[spring-aop-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
 ~[spring-aop-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
 ~[spring-aop-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
 ~[spring-aop-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
 ~[spring-aop-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
 ~[spring-aop-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
 ~[spring-aop-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
 ~[spring-aop-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
 ~[spring-aop-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.apache.linkis.metadata.query.server.restful.MetadataCoreRestful$$EnhancerBySpringCGLIB$$6efc0261.getColumns(<generated>)
 ~[linkis-metadata-query-server-1.4.0.jar:1.4.0]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
~[?:1.8.0_451]
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
~[?:1.8.0_451]
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 ~[?:1.8.0_451]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_451]
        at 
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
 ~[spring-web-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
 ~[spring-web-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
 ~[spring-webmvc-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
 ~[spring-webmvc-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
 ~[spring-webmvc-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
 ~[spring-webmvc-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1043)
 ~[spring-webmvc-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
 ~[spring-webmvc-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
 ~[spring-webmvc-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
 ~[spring-webmvc-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:497) 
~[jakarta.servlet-api-4.0.4.jar:4.0.4]
        at 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
 ~[spring-webmvc-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) 
~[jakarta.servlet-api-4.0.4.jar:4.0.4]
        at 
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) 
~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656)
 ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:292)
 ~[websocket-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) 
~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
 ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.apache.linkis.server.security.SecurityFilter.doFilter(SecurityFilter.scala:124)
 ~[linkis-module-1.4.0.jar:1.4.0]
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) 
~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
 ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
 ~[spring-web-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
 ~[spring-web-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) 
~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
 ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
com.github.xiaoymin.knife4j.spring.filter.ProductionSecurityFilter.doFilter(ProductionSecurityFilter.java:45)
 ~[knife4j-spring-2.0.9.jar:?]
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) 
~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
 ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
 ~[spring-web-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
 ~[spring-web-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) 
~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
 ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
 ~[spring-web-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
 ~[spring-web-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) 
~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
 ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:97)
 ~[spring-boot-actuator-2.3.12.RELEASE.jar:2.3.12.RELEASE]
        at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
 ~[spring-web-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) 
~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
 ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
 ~[spring-web-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
 ~[spring-web-5.2.23.RELEASE.jar:5.2.23.RELEASE]
        at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) 
~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
 ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) 
~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) 
~[jetty-security-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) 
~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
 ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
 ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
 ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
 ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
 ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) 
~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
 ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
 ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
 ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) 
~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at org.eclipse.jetty.server.Server.handle(Server.java:516) 
~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) 
~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) 
~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) 
~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) 
~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
 ~[jetty-io-9.4.48.v20220622.jar:9.4.48.v20220622]
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) 
~[jetty-io-9.4.48.v20220622.jar:9.4.48.v20220622]
        at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) 
~[jetty-io-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
 ~[jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
 ~[jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
 ~[jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:137)
 ~[jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
 ~[jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
        at 
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
 ~[jetty-util-9.4.48.v20220622.jar:9.4.48.v20220622]
        at java.lang.Thread.run(Thread.java:750) ~[?:1.8.0_451]
   Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 
Incorrect database name ''
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 
Method) ~[?:1.8.0_451]
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
 ~[?:1.8.0_451]
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
 ~[?:1.8.0_451]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
~[?:1.8.0_451]
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:389) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at com.mysql.jdbc.Util.getInstance(Util.java:372) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:980) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3835) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3771) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2531) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2489) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1446) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at 
com.mysql.jdbc.DatabaseMetaData$7.forEach(DatabaseMetaData.java:3683) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at 
com.mysql.jdbc.DatabaseMetaData$7.forEach(DatabaseMetaData.java:3673) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at com.mysql.jdbc.IterateBlock.doForAll(IterateBlock.java:50) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at 
com.mysql.jdbc.DatabaseMetaData.getPrimaryKeys(DatabaseMetaData.java:3671) 
~[mysql-connector-java-5.1.35.jar:5.1.35]
        at 
org.apache.linkis.metadata.query.service.AbstractSqlConnection.getPrimaryKeys(AbstractSqlConnection.java:107)
 ~[linkis-metadata-query-service-jdbc-1.4.0.jar:1.4.0]
        at 
org.apache.linkis.metadata.query.service.mysql.SqlConnection.getColumns(SqlConnection.java:107)
 ~[linkis-metadata-query-service-jdbc-1.4.0.jar:1.4.0]
        at 
org.apache.linkis.metadata.query.service.MysqlMetaService.queryColumns(MysqlMetaService.java:105)
 ~[linkis-metadata-query-service-jdbc-1.4.0.jar:1.4.0]
        ... 116 more
   ```
   
   ## 原因
   
   尝试在日志打印的 database ,可以获取到,但在实际执行 `getPrimaryKeys` 时,最终 MySQL 报错是空字符串
   
   ```shell
   Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 
Incorrect database name ''
   ```
   
   #### 源码定位
   
   
`linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/AbstractSqlConnection.java`
   
   ```java
     public List<String> getPrimaryKeys(String table) throws SQLException {
       ResultSet rs = null;
       List<String> primaryKeys = new ArrayList<>();
       try {
         DatabaseMetaData dbMeta = conn.getMetaData();
         rs = dbMeta.getPrimaryKeys(null, null, table);
         while (rs.next()) {
           primaryKeys.add(rs.getString("column_name"));
         }
         return primaryKeys;
       } finally {
         if (null != rs) {
           rs.close();
         }
       }
     }
   ```
   
   其中
   
   ```java
   metaData.getPrimaryKeys(null, null, table)
   ```
   
   - 第一个参数 `catalog`(数据库名),被传成了 `null`,按 JDBC 标准应该写成实际的 database 
   - 传 `null` 时,发现部分 MySQL (MySQL: 5.7.44 , jdbc: 
mysql-connector-java-5.1.35.jar)版本会自动用当前连接的 database,但**部分驱动会传递空字符串**,导致该处报错
   
   ## 修改
   
   - 方法签名加 database 参数
   - 调用时传 database 参数
   
   AbstractSqlConnection.java
   
   ```java
         rs = dbMeta.getPrimaryKeys(database, null, table);
   ```
   
   getColumns 方法的调用getPrimaryKeys同步调整
   
   
`linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/mysql/SqlConnection.java`
   
   ```java
         List<String> primaryKeys = getPrimaryKeys(database,table);
   ```
   
   
   
   ### Expected behavior
   
   null
   
   ### Your environment
   
   <!-- Please describe the linkis version you are using and basic environment 
information -->
   <!-- 请描述您使用的linkis版本和基本环境信息 -->
   - Linkis version used: 1.4.0
   
   
   
   ### Anything else
   
   _No response_
   
   ### Are you willing to submit a PR?
   
   - [x] Yes I am willing to submit a PR!


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@linkis.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@linkis.apache.org
For additional commands, e-mail: dev-h...@linkis.apache.org

Reply via email to