mycat源码解读-凯发k8国际

`
gaojingsong
  • 浏览: 1124912 次
  • 性别:
  • 来自: 深圳
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 文章分类
    社区版块
    • ( 4)
    • ( 0)
    • ( 80)
    存档分类
    最新评论

    mycat源码解读--错误之【can't find table define in schema 】

     

    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 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 retnodesset = new hashset();

             //每个表对应的路由映射

             map> tablesroutemap = new hashmap>();

     

            //分库解析信息不为空

              map>> 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());

                  }

               tablesroutemap.get(tablename).addall(tableconfig.getdatanodes());

         } else if(tablesroutemap.get(tablename) == null) { //余下的表都是单库表

                 tablesroutemap.put(tablename, new hashset());

                tablesroutemap.get(tablename).addall(tableconfig.getdatanodes());

           }

    }

                 //此处省略如下代码

                   

    }

     

     

    • 大小: 39.9 kb
    • 大小: 40.5 kb
    • 大小: 40.7 kb
    • 大小: 113.4 kb
    0
    0
    分享到:
    |
    评论
    1 楼 hdd901002 2018-05-17  
    光说明错误在哪里有什么用,解决方法啊。。。
    我也碰到了,一条join语句,后来两张表join先后调换位置就好了

    相关推荐

      mycat-server-1.6 源码,可调试

      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版本下载

      mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz

      mycat2 install-template(mycat2-install-template-1.20.zip)

      mycat - 数据库中间件 活跃的、性能好的开源数据库中间件!

      mycat2(original-mycat2-1.22-release-jar-with-dependencies.jar)

      最新版linux mycat-server-1.6.7.5-release-20200410174409-linux.tar.gz

      ### **数据量大的几种凯发k8国际娱乐官网入口的解决方案** - mysql集群, 主从,读写分离 - 冷热分离,部分冷数据(不经常使用的数据)移...- 分库分表 mycat/ shadingjdbc - newsql数据库,hbase 没有1个积分的私聊我哈,我给你免费。。。。。

       mycat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 mysql 协议的服务器,前端用户可以把它看作是一个数据库代理,用 mysql 客户端工具和命令行访问,而其后端可以用 mysql 原生协议与多个 ...

      mycat2(mycat2-1.21-release-jar-with-dependencies.jar)

      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)

    global site tag (gtag.js) - google analytics
    网站地图