两张表进行内链查询时,第二张表查询生成的库为默认sys
Opened this issue · 7 comments
Description
查询条件:
{
"[]": {
"join": "&/Tbl_audit_data/pk_uid@",
"Tbl_order_query": {
//通行车牌
"pass_vehicle_plate": "宁E55369",
//通行车牌颜色
"pass_vehicle_color": "黄色",
//实际车牌
"actual_veicle_plate": "宁E55369",
//实际车牌颜色
"actual_vehicle_color": "黄色",
//逃费类型
"ensure_fee_type{}": [
""
],
//发起时间
"start_time%": "2022-09-25 21:23:31,2022-09-25 21:23:31",
//工单编号
"@column": "pk_uid;order_id,pass_vehicle_plate;pass_vehicle_color;pass_vehicle_info;actual_veicle_plate;actual_vehicle_color;actual_vehicle_info;ensure_fee_type;order_desc;date_format(start_time,'%Y-%m-%d %H:%i:%s'):start_time"
},
"Tbl_audit_data": {
"pk_uid@": "/Tbl_order_query/pk_uid",
//数字编号
"pk_data_id": "202209252121140001",
//更新时间
"last_update_time%": "2023-02-12 11:08:18,2023-02-12 11:08:18",
"@column": "last_update_time"
},
// 页码
"page": 0,
//每页数量
"count": 5,
"query": 2
},
//总数量
"total@": "/[]/total"
}
响应:
{
"msg": "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"sys\".\"Tbl_audit_data\" AS \"Tbl_audit_data\" ON `Tbl_audit_data`.`pk_uid` = `Tbl_o' at line 2",
"trace:stack": [
{
"fileName": "SQLError.java",
"nativeMethod": false,
"methodName": "createSQLException",
"className": "com.mysql.cj.jdbc.exceptions.SQLError",
"lineNumber": 120
},
{
"fileName": "SQLError.java",
"nativeMethod": false,
"methodName": "createSQLException",
"className": "com.mysql.cj.jdbc.exceptions.SQLError",
"lineNumber": 97
},
{
"fileName": "SQLExceptionsMapping.java",
"nativeMethod": false,
"methodName": "translateException",
"className": "com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping",
"lineNumber": 122
},
{
"fileName": "ClientPreparedStatement.java",
"nativeMethod": false,
"methodName": "executeInternal",
"className": "com.mysql.cj.jdbc.ClientPreparedStatement",
"lineNumber": 953
},
{
"fileName": "ClientPreparedStatement.java",
"nativeMethod": false,
"methodName": "executeQuery",
"className": "com.mysql.cj.jdbc.ClientPreparedStatement",
"lineNumber": 1003
},
{
"fileName": "AbstractSQLExecutor.java",
"nativeMethod": false,
"methodName": "executeQuery",
"className": "apijson.orm.AbstractSQLExecutor",
"lineNumber": 1363
},
{
"fileName": "SQLExecutor.java",
"nativeMethod": false,
"methodName": "executeQuery",
"className": "apijson.orm.SQLExecutor",
"lineNumber": 70
},
{
"fileName": "AbstractSQLExecutor.java",
"nativeMethod": false,
"methodName": "execute",
"className": "apijson.orm.AbstractSQLExecutor",
"lineNumber": 294
},
{
"fileName": "AbstractParser.java",
"nativeMethod": false,
"methodName": "executeSQL",
"className": "apijson.orm.AbstractParser",
"lineNumber": 2032
},
{
"fileName": "AbstractObjectParser.java",
"nativeMethod": false,
"methodName": "onSQLExecute",
"className": "apijson.orm.AbstractObjectParser",
"lineNumber": 1095
},
{
"fileName": "AbstractObjectParser.java",
"nativeMethod": false,
"methodName": "executeSQL",
"className": "apijson.orm.AbstractObjectParser",
"lineNumber": 933
},
{
"fileName": "AbstractObjectParser.java",
"nativeMethod": false,
"methodName": "executeSQL",
"className": "apijson.orm.AbstractObjectParser",
"lineNumber": 38
},
{
"fileName": "AbstractParser.java",
"nativeMethod": false,
"methodName": "onObjectParse",
"className": "apijson.orm.AbstractParser",
"lineNumber": 1165
},
{
"fileName": "AbstractObjectParser.java",
"nativeMethod": false,
"methodName": "onChildParse",
"className": "apijson.orm.AbstractObjectParser",
"lineNumber": 578
},
{
"fileName": "AbstractObjectParser.java",
"nativeMethod": false,
"methodName": "parse",
"className": "apijson.orm.AbstractObjectParser",
"lineNumber": 282
},
{
"fileName": "AbstractObjectParser.java",
"nativeMethod": false,
"methodName": "parse",
"className": "apijson.orm.AbstractObjectParser",
"lineNumber": 38
},
{
"fileName": "AbstractParser.java",
"nativeMethod": false,
"methodName": "onObjectParse",
"className": "apijson.orm.AbstractParser",
"lineNumber": 1125
},
{
"fileName": "AbstractParser.java",
"nativeMethod": false,
"methodName": "onArrayParse",
"className": "apijson.orm.AbstractParser",
"lineNumber": 1354
},
{
"fileName": "AbstractObjectParser.java",
"nativeMethod": false,
"methodName": "onChildParse",
"className": "apijson.orm.AbstractObjectParser",
"lineNumber": 558
},
{
"fileName": "AbstractObjectParser.java",
"nativeMethod": false,
"methodName": "parse",
"className": "apijson.orm.AbstractObjectParser",
"lineNumber": 282
},
{
"fileName": "AbstractObjectParser.java",
"nativeMethod": false,
"methodName": "parse",
"className": "apijson.orm.AbstractObjectParser",
"lineNumber": 38
},
{
"fileName": "AbstractParser.java",
"nativeMethod": false,
"methodName": "onObjectParse",
"className": "apijson.orm.AbstractParser",
"lineNumber": 1125
},
{
"fileName": "AbstractParser.java",
"nativeMethod": false,
"methodName": "parseResponse",
"className": "apijson.orm.AbstractParser",
"lineNumber": 527
},
{
"fileName": "APIJSONParser.java",
"nativeMethod": false,
"methodName": "parseResponse",
"className": "apijson.framework.APIJSONParser",
"lineNumber": 117
},
{
"fileName": "EagleParser.java",
"nativeMethod": false,
"methodName": "parseResponse",
"className": "com.eagle.tpd.order.crud.framework.config.EagleParser",
"lineNumber": 25
},
{
"fileName": "AbstractParser.java",
"nativeMethod": false,
"methodName": "parseResponse",
"className": "apijson.orm.AbstractParser",
"lineNumber": 442
},
{
"fileName": "AbstractParser.java",
"nativeMethod": false,
"methodName": "parse",
"className": "apijson.orm.AbstractParser",
"lineNumber": 414
},
{
"fileName": "APIJSONController.java",
"nativeMethod": false,
"methodName": "parse",
"className": "apijson.framework.APIJSONController",
"lineNumber": 93
},
{
"fileName": "APIJSONController.java",
"nativeMethod": false,
"methodName": "crud",
"className": "apijson.framework.APIJSONController",
"lineNumber": 121
},
{
"fileName": "CrudController.java",
"nativeMethod": false,
"methodName": "crud",
"className": "com.eagle.tpd.order.crud.controller.CrudController",
"lineNumber": 39
},
{
"fileName": "NativeMethodAccessorImpl.java",
"nativeMethod": true,
"methodName": "invoke0",
"className": "sun.reflect.NativeMethodAccessorImpl",
"lineNumber": -2
},
{
"fileName": "NativeMethodAccessorImpl.java",
"nativeMethod": false,
"methodName": "invoke",
"className": "sun.reflect.NativeMethodAccessorImpl",
"lineNumber": 62
},
{
"fileName": "DelegatingMethodAccessorImpl.java",
"nativeMethod": false,
"methodName": "invoke",
"className": "sun.reflect.DelegatingMethodAccessorImpl",
"lineNumber": 43
},
{
"fileName": "Method.java",
"nativeMethod": false,
"methodName": "invoke",
"className": "java.lang.reflect.Method",
"lineNumber": 498
},
{
"fileName": "InvocableHandlerMethod.java",
"nativeMethod": false,
"methodName": "doInvoke",
"className": "org.springframework.web.method.support.InvocableHandlerMethod",
"lineNumber": 190
},
{
"fileName": "InvocableHandlerMethod.java",
"nativeMethod": false,
"methodName": "invokeForRequest",
"className": "org.springframework.web.method.support.InvocableHandlerMethod",
"lineNumber": 138
},
{
"fileName": "ServletInvocableHandlerMethod.java",
"nativeMethod": false,
"methodName": "invokeAndHandle",
"className": "org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod",
"lineNumber": 104
},
{
"fileName": "RequestMappingHandlerAdapter.java",
"nativeMethod": false,
"methodName": "invokeHandlerMethod",
"className": "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter",
"lineNumber": 892
},
{
"fileName": "RequestMappingHandlerAdapter.java",
"nativeMethod": false,
"methodName": "handleInternal",
"className": "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter",
"lineNumber": 797
},
{
"fileName": "AbstractHandlerMethodAdapter.java",
"nativeMethod": false,
"methodName": "handle",
"className": "org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter",
"lineNumber": 87
},
{
"fileName": "DispatcherServlet.java",
"nativeMethod": false,
"methodName": "doDispatch",
"className": "org.springframework.web.servlet.DispatcherServlet",
"lineNumber": 1039
},
{
"fileName": "DispatcherServlet.java",
"nativeMethod": false,
"methodName": "doService",
"className": "org.springframework.web.servlet.DispatcherServlet",
"lineNumber": 942
},
{
"fileName": "FrameworkServlet.java",
"nativeMethod": false,
"methodName": "processRequest",
"className": "org.springframework.web.servlet.FrameworkServlet",
"lineNumber": 1005
},
{
"fileName": "FrameworkServlet.java",
"nativeMethod": false,
"methodName": "doPost",
"className": "org.springframework.web.servlet.FrameworkServlet",
"lineNumber": 908
},
{
"fileName": "HttpServlet.java",
"nativeMethod": false,
"methodName": "service",
"className": "javax.servlet.http.HttpServlet",
"lineNumber": 665
},
{
"fileName": "FrameworkServlet.java",
"nativeMethod": false,
"methodName": "service",
"className": "org.springframework.web.servlet.FrameworkServlet",
"lineNumber": 882
},
{
"fileName": "HttpServlet.java",
"nativeMethod": false,
"methodName": "service",
"className": "javax.servlet.http.HttpServlet",
"lineNumber": 750
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "internalDoFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 231
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 166
},
{
"fileName": "WsFilter.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.tomcat.websocket.server.WsFilter",
"lineNumber": 53
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "internalDoFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 193
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 166
},
{
"fileName": "AdviceFilter.java",
"nativeMethod": false,
"methodName": "executeChain",
"className": "org.apache.shiro.web.servlet.AdviceFilter",
"lineNumber": 108
},
{
"fileName": "AdviceFilter.java",
"nativeMethod": false,
"methodName": "doFilterInternal",
"className": "org.apache.shiro.web.servlet.AdviceFilter",
"lineNumber": 137
},
{
"fileName": "OncePerRequestFilter.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.shiro.web.servlet.OncePerRequestFilter",
"lineNumber": 125
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "internalDoFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 193
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 166
},
{
"fileName": "AbstractShiroFilter.java",
"nativeMethod": false,
"methodName": "executeChain",
"className": "org.apache.shiro.web.servlet.AbstractShiroFilter",
"lineNumber": 449
},
{
"fileName": "AbstractShiroFilter.java",
"nativeMethod": false,
"methodName": "call",
"className": "org.apache.shiro.web.servlet.AbstractShiroFilter$1",
"lineNumber": 365
},
{
"fileName": "SubjectCallable.java",
"nativeMethod": false,
"methodName": "doCall",
"className": "org.apache.shiro.subject.support.SubjectCallable",
"lineNumber": 90
},
{
"fileName": "SubjectCallable.java",
"nativeMethod": false,
"methodName": "call",
"className": "org.apache.shiro.subject.support.SubjectCallable",
"lineNumber": 83
},
{
"fileName": "DelegatingSubject.java",
"nativeMethod": false,
"methodName": "execute",
"className": "org.apache.shiro.subject.support.DelegatingSubject",
"lineNumber": 387
},
{
"fileName": "AbstractShiroFilter.java",
"nativeMethod": false,
"methodName": "doFilterInternal",
"className": "org.apache.shiro.web.servlet.AbstractShiroFilter",
"lineNumber": 362
},
{
"fileName": "OncePerRequestFilter.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.shiro.web.servlet.OncePerRequestFilter",
"lineNumber": 125
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "internalDoFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 193
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 166
},
{
"fileName": "SimpleCORSFilter.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "com.eagle.tpd.comm.filter.SimpleCORSFilter",
"lineNumber": 23
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "internalDoFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 193
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 166
},
{
"fileName": "ReqLogFilter.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "com.eagle.tpd.order.filter.ReqLogFilter",
"lineNumber": 68
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "internalDoFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 193
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 166
},
{
"fileName": "TokenFilter.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "com.eagle.tpd.user.filter.TokenFilter",
"lineNumber": 99
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "internalDoFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 193
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 166
},
{
"fileName": "SimpleCORSFilter.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "com.eagle.tpd.comm.filter.SimpleCORSFilter",
"lineNumber": 23
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "internalDoFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 193
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 166
},
{
"fileName": "ExceptionFilter.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "com.eagle.tpd.comm.exception.ExceptionFilter",
"lineNumber": 14
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "internalDoFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 193
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 166
},
{
"fileName": "RequestContextFilter.java",
"nativeMethod": false,
"methodName": "doFilterInternal",
"className": "org.springframework.web.filter.RequestContextFilter",
"lineNumber": 99
},
{
"fileName": "OncePerRequestFilter.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.springframework.web.filter.OncePerRequestFilter",
"lineNumber": 118
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "internalDoFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 193
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 166
},
{
"fileName": "FormContentFilter.java",
"nativeMethod": false,
"methodName": "doFilterInternal",
"className": "org.springframework.web.filter.FormContentFilter",
"lineNumber": 92
},
{
"fileName": "OncePerRequestFilter.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.springframework.web.filter.OncePerRequestFilter",
"lineNumber": 118
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "internalDoFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 193
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 166
},
{
"fileName": "HiddenHttpMethodFilter.java",
"nativeMethod": false,
"methodName": "doFilterInternal",
"className": "org.springframework.web.filter.HiddenHttpMethodFilter",
"lineNumber": 93
},
{
"fileName": "OncePerRequestFilter.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.springframework.web.filter.OncePerRequestFilter",
"lineNumber": 118
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "internalDoFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 193
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 166
},
{
"fileName": "CharacterEncodingFilter.java",
"nativeMethod": false,
"methodName": "doFilterInternal",
"className": "org.springframework.web.filter.CharacterEncodingFilter",
"lineNumber": 200
},
{
"fileName": "OncePerRequestFilter.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.springframework.web.filter.OncePerRequestFilter",
"lineNumber": 118
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "internalDoFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 193
},
{
"fileName": "ApplicationFilterChain.java",
"nativeMethod": false,
"methodName": "doFilter",
"className": "org.apache.catalina.core.ApplicationFilterChain",
"lineNumber": 166
},
{
"fileName": "StandardWrapperValve.java",
"nativeMethod": false,
"methodName": "invoke",
"className": "org.apache.catalina.core.StandardWrapperValve",
"lineNumber": 202
},
{
"fileName": "StandardContextValve.java",
"nativeMethod": false,
"methodName": "invoke",
"className": "org.apache.catalina.core.StandardContextValve",
"lineNumber": 96
},
{
"fileName": "AuthenticatorBase.java",
"nativeMethod": false,
"methodName": "invoke",
"className": "org.apache.catalina.authenticator.AuthenticatorBase",
"lineNumber": 490
},
{
"fileName": "StandardHostValve.java",
"nativeMethod": false,
"methodName": "invoke",
"className": "org.apache.catalina.core.StandardHostValve",
"lineNumber": 139
},
{
"fileName": "ErrorReportValve.java",
"nativeMethod": false,
"methodName": "invoke",
"className": "org.apache.catalina.valves.ErrorReportValve",
"lineNumber": 92
},
{
"fileName": "StandardEngineValve.java",
"nativeMethod": false,
"methodName": "invoke",
"className": "org.apache.catalina.core.StandardEngineValve",
"lineNumber": 74
},
{
"fileName": "CoyoteAdapter.java",
"nativeMethod": false,
"methodName": "service",
"className": "org.apache.catalina.connector.CoyoteAdapter",
"lineNumber": 343
},
{
"fileName": "Http11Processor.java",
"nativeMethod": false,
"methodName": "service",
"className": "org.apache.coyote.http11.Http11Processor",
"lineNumber": 408
},
{
"fileName": "AbstractProcessorLight.java",
"nativeMethod": false,
"methodName": "process",
"className": "org.apache.coyote.AbstractProcessorLight",
"lineNumber": 66
},
{
"fileName": "AbstractProtocol.java",
"nativeMethod": false,
"methodName": "process",
"className": "org.apache.coyote.AbstractProtocol$ConnectionHandler",
"lineNumber": 853
},
{
"fileName": "NioEndpoint.java",
"nativeMethod": false,
"methodName": "doRun",
"className": "org.apache.tomcat.util.net.NioEndpoint$SocketProcessor",
"lineNumber": 1587
},
{
"fileName": "SocketProcessorBase.java",
"nativeMethod": false,
"methodName": "run",
"className": "org.apache.tomcat.util.net.SocketProcessorBase",
"lineNumber": 49
},
{
"fileName": "ThreadPoolExecutor.java",
"nativeMethod": false,
"methodName": "runWorker",
"className": "java.util.concurrent.ThreadPoolExecutor",
"lineNumber": 1149
},
{
"fileName": "ThreadPoolExecutor.java",
"nativeMethod": false,
"methodName": "run",
"className": "java.util.concurrent.ThreadPoolExecutor$Worker",
"lineNumber": 624
},
{
"fileName": "TaskThread.java",
"nativeMethod": false,
"methodName": "run",
"className": "org.apache.tomcat.util.threads.TaskThread$WrappingRunnable",
"lineNumber": 61
},
{
"fileName": "Thread.java",
"nativeMethod": false,
"methodName": "run",
"className": "java.lang.Thread",
"lineNumber": 748
}
],
"code": 500,
"data": {
"Tbl_audit_data": {
"last_update_time%": "2023-02-12 11:08:18,2023-02-12 11:08:18",
"pk_uid@": "/Tbl_order_query/pk_uid",
"@column": "last_update_time",
"pk_data_id": "202209252121140001"
},
"query": "2",
"count": 5,
"page": 0,
"join": "&/Tbl_audit_data/pk_uid@",
"Tbl_order_query": {
"ensure_fee_type{}": [
""
],
"start_time%": "2022-09-25 21:23:31,2022-09-25 21:23:31",
"pass_vehicle_color": "黄色",
"actual_vehicle_color": "黄色",
"pass_vehicle_plate": "宁E55369",
"actual_veicle_plate": "宁E55369",
"@column": "pk_uid;order_id,pass_vehicle_plate;pass_vehicle_color;pass_vehicle_info;actual_veicle_plate;actual_vehicle_color;actual_vehicle_info;ensure_fee_type;order_desc;date_format(start_time,'%Y-%m-%d %H:%i:%s'):start_time"
}
},
"trace:throw": "java.sql.SQLSyntaxErrorException",
"total@": "/[]/total",
"depth:count|max": "3|5",
"time:start|duration|end|parse|sql": "1706856326715|251|1706856326966|251|0",
"debug:info|help": "浏览器打开以下链接查看解答 \n\n【Google】:\n https://www.google.com/search?q=You+have+an+error+in+your+SQL+syntax%3B+check+the+manual+that+corresponds+to+your+MySQL+server+version+for+the+right+syntax+to+use+near+%27%22sys%22.%22Tbl_audit_data%22+AS+%22Tbl_audit_data%22+ON+%60Tbl_audit_data%60.%60pk_uid%60+%3D+%60Tbl_o%27+at+line+2 \n\n【百度】:\n https://www.baidu.com/s?ie=UTF-8&wd=You+have+an+error+in+your+SQL+syntax%3B+check+the+manual+that+corresponds+to+your+MySQL+server+version+for+the+right+syntax+to+use+near+%27%22sys%22.%22Tbl_audit_data%22+AS+%22Tbl_audit_data%22+ON+%60Tbl_audit_data%60.%60pk_uid%60+%3D+%60Tbl_o%27+at+line+2\n\n【APIAuto】: \n http://apijson.cn/api?type=JSON&url=http%3A%2F%2F169.254.20.157%3A8086%2Fget&json=%7B%22%5B%5D%22%3A%7B%22Tbl_order_query%22%3A%7B%22pass_vehicle_plate%22%3A%22%E5%AE%81E55369%22%2C%22pass_vehicle_color%22%3A%22%E9%BB%84%E8%89%B2%22%2C%22actual_veicle_plate%22%3A%22%E5%AE%81E55369%22%2C%22actual_vehicle_color%22%3A%22%E9%BB%84%E8%89%B2%22%2C%22ensure_fee_type%7B%7D%22%3A%5B%22%22%5D%2C%22start_time%25%22%3A%222022-09-25+21%3A23%3A31%2C2022-09-25+21%3A23%3A31%22%2C%22%40column%22%3A%22pk_uid%3Border_id%2Cpass_vehicle_plate%3Bpass_vehicle_color%3Bpass_vehicle_info%3Bactual_veicle_plate%3Bactual_vehicle_color%3Bactual_vehicle_info%3Bensure_fee_type%3Border_desc%3Bdate_format%28start_time%2C%27%25Y-%25m-%25d+%25H%3A%25i%3A%25s%27%29%3Astart_time%22%7D%2C%22Tbl_audit_data%22%3A%7B%22pk_uid%40%22%3A%22%2FTbl_order_query%2Fpk_uid%22%2C%22pk_data_id%22%3A%22202209252121140001%22%2C%22last_update_time%25%22%3A%222023-02-12+11%3A08%3A18%2C2023-02-12+11%3A08%3A18%22%2C%22%40column%22%3A%22last_update_time%22%7D%2C%22query%22%3A%222%22%2C%22count%22%3A5%2C%22page%22%3A0%2C%22join%22%3A%22%26%2FTbl_audit_data%2Fpk_uid%40%22%7D%2C%22total%40%22%3A%22%2F%5B%5D%2Ftotal%22%7D \n\n【GitHub】: \n https://www.google.com/search?q=site%3Agithub.com%2FTencent%2FAPIJSON+++You+have+an+error+in+your+SQL+syntax%3B+check+the+manual+that+corresponds+to+your+MySQL+server+version+for+the+right+syntax+to+use+near+%27%22sys%22.%22Tbl_audit_data%22+AS+%22Tbl_audit_data%22+ON+%60Tbl_audit_data%60.%60pk_uid%60+%3D+%60Tbl_o%27+at+line+2 \n\n都没找到答案?打开这个链接 \n https://github.com/Tencent/APIJSON/issues/new?assignees=&labels=&template=--bug.md \n然后提交问题,推荐用以下模板修改,注意要换行保持清晰可读。 \n【标题】:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"sys\".\"Tbl_audit_data\" AS \"Tbl_audit_data\" ON `Tbl_audit_data`.`pk_uid` = `Tbl_o' at line 2 \n【内容】: **环境信息** \n 系统: Windows 10 10.0 \n 数据库: MYSQL 5.7.22 \n JDK: 1.8.0_291 amd64 \n APIJSON: 6.3.0\n\n**问题描述**\nYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"sys\".\"Tbl_audit_data\" AS \"Tbl_audit_data\" ON `Tbl_audit_data`.`pk_uid` = `Tbl_o' at line 2 \n\n<!-- 尽量完整截屏(至少包含请求和回包结果,还可以加上控制台报错日志),然后复制粘贴到这里 --> \n\nPOST http://169.254.20.157:8086/get \n发送请求 Request JSON:\n ```js \n 请填写,例如 { \"Users\":{} } \n``` \n\n返回结果 Response JSON:\n ```js \n 请填写,例如 { \"Users\": {}, \"code\": 401, \"msg\": \"Users 不允许 UNKNOWN 用户的 GET 请求!\" } \n```",
"time": 1706856326966,
"ok": false,
"sql:generate|cache|execute|maxExecute": "1|0|1|1000000"
}
生成的sql:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
已生成 1 条 SQL
execute startTime = 1706856326717
database = ; schema = db_wh_portal_xl; sql =
SELECT count(*) AS count FROM `db_wh_portal_xl`.`Tbl_order_query` AS `Tbl_order_query`
INNER JOIN "sys"."Tbl_audit_data" AS "Tbl_audit_data" ON `Tbl_audit_data`.`pk_uid` = `Tbl_order_query`.`pk_uid`
WHERE ( ( (`Tbl_order_query`.`pass_vehicle_plate` = '宁E55369') AND (`Tbl_order_query`.`pass_vehicle_color` = '黄色') AND (`Tbl_order_query`.`actual_veicle_plate` = '宁E55369') AND (`Tbl_order_query`.`actual_vehicle_color` = '黄色') AND (`Tbl_order_query`.`ensure_fee_type` IN ('')) AND ((`Tbl_order_query`.`start_time` BETWEEN '2022-09-25 21:23:31' AND '2022-09-25 21:23:31')) ) AND ( ( ("Tbl_audit_data"."pk_data_id" = '202209252121140001') AND (("Tbl_audit_data"."last_update_time" BETWEEN '2023-02-12 11:08:18' AND '2023-02-12 11:08:18')) ) ) )
"sys"."Tbl_audit_data" 这里应该为db_wh_portal_xl.Tbl_audit_data才对。
请问是哪里写错了?
发下 DemoSQLConfig 的配置,数据库的 dbUri, dbAccount, dbPassword 等敏感信息可以改为 *** 或截屏打马赛克。
目前看 Tbl_audit_data 对应配置的默认 schema 是 sys,数据库不是 MySQL, TDengine 等以 `反引号` 包裹表名、字段名的类型
重写的 APIJSONObjectParser newSQLConfig方法,以下是关键信息:
//数据源未成功设置,则使用默认
if (!isConfig) {
logger.debug("使用默认数据源!!!!!!!");
//默认使用master数据源
DruidDataSource druidDataSource = getDruidDataSource("master");
if(druidDataSource != null){
dsUrl = druidDataSource.getUrl();
dsUserName = druidDataSource.getUsername();
dsPassword = druidDataSource.getPassword();
logger.info("url:{},用户名:{},密码:{}",dsUrl,dsUserName,dsPassword);
isConfig = true;
}
}
if(!isConfig){
logger.error(">>>>>>>>>>>>>>>>>>>>>>>>>>>> 未匹配到正确数数据源,请检查!!!!!!!!!!!!!!!");
return eagleSqlConfig;
}
int i = dsUrl.lastIndexOf("/");
int j = dsUrl.lastIndexOf("?");
String start = dsUrl.substring(0, i);
String end = dsUrl.substring(j);
String schema = dsUrl.substring(i + 1, j);
System.out.println("数据库名称:" + schema);
System.out.println("数据库地址:" + dsUrl);
eagleSqlConfig.setDb(start + end, dsUserName, dsPassword, schema,DATABASE_MYSQL);
System.out.println(eagleSqlConfig.getSchema());
return eagleSqlConfig;
获取数据源信息后,对APIJSONSQLConfig进行赋值操作。打印是正确的。如果是配置的数据源不对,主表却是正确的。交换主副表后,依旧是主表正常,生成的sql副标的确不是反引号包括的。
另外,这是config配置:
public class EagleSQLConfig extends APIJSONSQLConfig {
private String database;
private String url;
private String username;
private String password;
private String schema;
public EagleSQLConfig() {
super();
}
public EagleSQLConfig(RequestMethod method, String table) {
super(method, table);
}
@Override
public String getSchema() {
return schema;
}
public void setDb(String url, String username, String password, String schema,String database) {
this.url = url;
this.username = username;
this.password = password;
this.schema = schema;
this.database = database;
}
@JSONField(serialize = false) // 不在日志打印 账号/密码 等敏感信息
@Override
public String getDBUri() {
return url;
}
@JSONField(serialize = false) // 不在日志打印 账号/密码 等敏感信息
@Override
public String getDBAccount() {
return username;
}
@JSONField(serialize = false) // 不在日志打印 账号/密码 等敏感信息
@Override
public String getDBPassword() {
return password;
}
@JSONField(serialize = false) // 不在日志打印 账号/密码 等敏感信息
@Override
public String getSQLDatabase() {
return database;
}
设置DEFAULT_SCHEMA 默认为 db_wh_portal_xl 后,生成的sql中副表的确对了,但是别名和参数中都没有用反引号包括,查询依旧错误。
DEFAULT_SCHEMA = DATABASE_MYSQL 试试。
另外所有自定义 SQLConfig 都需要注册才能保证各处都使用同一个 class:
APIJSONApplication.DEFAULT_APIJSON_CREATOR = new APIJSONCreator<Long>() {
@Override
public SQLConfig createSQLConfig() {
return new EagleSQLConfig();
}
};
相关 issue:
#363
debug 了一下源码发现是重写getSQLDatabase方法的问题,在生成sql时调用了该方法,但是该方法返回了null。删除该方法即可
getSQLDatabase 的返回值是最终使用执行 SQL 的数据库类型