Mycat之String msg = "can't find table define in schema "+ tableName + " schema:" + schema.getName();
错误位置如下:RouterUtil 类中的tryRouteForTables方法
1、正常情况可以查询数据
2、别名查询出现错误
Mycat 怎么就通过不了呢
2017-03-01 20:13:19,812 [WARN ][$_NIOREACTOR-2-RW] ServerConnection [id=4, schema=TESTDB, host=127.0.0.1, user=root,txIsolation=3, autocommit=true, schema=TESTDB]SELECT address as address FROM `t_gaojs` err:java.sql.SQLNonTransientException: can't find table define in schema ADDRESS schema:TESTDB java.sql.SQLNonTransientException: can't find table define in schema ADDRESS schema:TESTDB
at io.mycat.route.util.RouterUtil.tryRouteForTables(RouterUtil.java:1002)
at io.mycat.route.parser.druid.impl.DruidSelectParser.tryRoute(DruidSelectParser.java:412)
at io.mycat.route.parser.druid.impl.DruidSelectParser.changeSql(DruidSelectParser.java:287)
at io.mycat.route.parser.druid.impl.DefaultDruidParser.parser(DefaultDruidParser.java:67)
找到报错原因 ---》 表名字解析错误
错误位置:
RouterUtil 类中的tryRouteForTables方法
/**
* 多表路由
*/
public static RouteResultset tryRouteForTables(SchemaConfig schema, DruidShardingParseInfo ctx,
RouteCalculateUnit routeUnit, RouteResultset rrs, boolean isSelect,
LayerCachePool cachePool)
throws SQLNonTransientException {
List<String> tables = ctx.getTables();
if(schema.isNoSharding()||(tables.size() >= 1&&isNoSharding(schema,tables.get(0)))) {
return routeToSingleNode(rrs, schema.getDataNode(), ctx.getSql());
}
//只有一个表的
if(tables.size() == 1) {
return RouterUtil.tryRouteForOneTable(schema, ctx, routeUnit,
tables.get(0), rrs, isSelect, cachePool);
}
Set<String> retNodesSet = new HashSet<String>();
//每个表对应的路由映射
Map<String,Set<String>> tablesRouteMap = new HashMap<String,Set<String>>();
//分库解析信息不为空
Map<String, Map<String, Set<ColumnRoutePair>>> tablesAndConditions = routeUnit.getTablesAndConditions();
if(tablesAndConditions != null && tablesAndConditions.size() > 0) {
//为分库表找路由
RouterUtil.findRouteWithcConditionsForTables(schema, rrs, tablesAndConditions,
tablesRouteMap, ctx.getSql(), cachePool, isSelect);
if(rrs.isFinishedRoute()) {
return rrs;
}
}
//为全局表和单库表找路由
for(String tableName : tables) {
TableConfig tableConfig = schema.getTables().get(tableName.toUpperCase());
if(tableConfig == null) {
String msg = "can't find table define in schema "+ tableName + " schema:" + schema.getName();
LOGGER.warn(msg);
throw new SQLNonTransientException(msg);
}
if(tableConfig.isGlobalTable()) {//全局表
if(tablesRouteMap.get(tableName) == null) {
tablesRouteMap.put(tableName, new HashSet<String>());
}
tablesRouteMap.get(tableName).addAll(tableConfig.getDataNodes());
} else if(tablesRouteMap.get(tableName) == null) { //余下的表都是单库表
tablesRouteMap.put(tableName, new HashSet<String>());
tablesRouteMap.get(tableName).addAll(tableConfig.getDataNodes());
}
}
//此处省略如下代码
}
相关推荐
Mycat-Server-1.6 源码,可调试
mycat2 install-template(mycat2-install-template-1.20.zip)
mycat2 install-template(mycat2-install-template-1.21.zip)
Mycat-server-1.6.6.1-release-20180908155252-linux.tar.gz
Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz版本下载
最新版linux Mycat-server-1.6.7.5-release-20200410174409-linux.tar.gz
Mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz
Mycat-server-1.6.7.3-release-20190809210613-linux.tar.gz
mycat2(mycat2-1.21-release-jar-with-dependencies.jar)
MyCat - 数据库中间件 活跃的、性能好的开源数据库中间件!
mycat2(original-mycat2-1.22-release-jar-with-dependencies.jar)
MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 MySQL 协议的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协议与多个 ...
Mycat-server-1.5.1-RELEASE-20160405120037-linux.tar.gz
window版本:Mycat-server-1.6-RELEASE-20161028204710-win.tar.gz
mycat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC...
Mycat-server-1.5-RELEASE-20160301083012-linux.tar.gz
该资源为mycat 1.6.7.1 的windows版,可实现数据库的读写分离、以及分库分表等操作
Mycat-server-1.6.7.6-release.jar 源码所需的pom.xml文件
Mycat是一个广受好评的数据库中间件。支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法。
Mycat2 v1.21-2022-4-7源码(Mycat2-1.21-2022-4-7.zip)