shardingsphere oracle各种问题总结( 三 )
connection.getMetaData().getTables这个返回的第二个参数
getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types)throws SQLException
第二个参数:模式名称的模式;它必须与存储在数据库中的模式名称匹配;该参数为 "" 表示获取没有模式的那些描述;为 null 则表示该模式名称不应该用于缩小搜索范围
在oracle中这个参数如果传的null 那么相当于查询all_users表也就是当前用户及可见用户的所有表 。 问题就出在这里 , 接着我们看JdbcUtil.getSchema这个方法
文章插图
如果是oracle直接就返回null 也就是上面说的 , 获取all_users能查询到的当前用户及可见用户下的所有表 。 在oracle中要访问其他用户下的表 , 是需要加上用户名的 xxx.tableName;
实际代码中是没有加上用户名的 , 这样系统在启动查询每个表的Meta信息的时候就会报 表或视图不存在的错误 。
验证重写JdbcUtil这个类中的方法 。
在当前项目中建和这个类一样的包
package org.apache.shardingsphere.sql.parser.binder.metadata.util;import java.sql.Connection;import java.sql.SQLException;public class JdbcUtil {/*** Get schema.** @param connection connection* @return schema*/public static String getSchema(final Connection connection, final String databaseType) {String result = null;try {result = connection.getSchema();} catch (final SQLException ignore) {}return result;}}
访问类的时候 当前classes中的类优先级高于lib中的 。
在这里我把那个if判断去掉了 。 然后在启动服务器 , 正常了 。
接下来继续各种测试
保存操作:
文章插图
没问题 。
查询操作:
不分页的:
文章插图
控制台没有错误 , 但是返回的结果是两个null , 没有找到原因 。
分页的:
文章插图
表或者视图不存在 。。
查看日志:
文章插图
发现表名是我们配置的逻辑表 , 并没有被替换成真实的表 , 这里也没有找到原因 。
这两个问题各种查阅1天时间也么解决 。
注意:上面两个问题在mysql数据库中没有任何问题 , 一切正常 。
开始换shardingsphere的版本4.1.0、4.0.1、4.0.0 , 4.0.0-RC3 , 4.0.0-RC2这几个版本都有不同的问题 。
这几个版本的问题主要是如下:
1、java.lang.IllegalStateException: Must have sharding column with subquery.
2、无效字符
有知道原因的大神还请告知下 。
最终4.0.0-RC1这个版本终于没有问题了 , 没有修改任何配置和代码 , 测试通过了 。
但有个这样的问题:
具体代码就补贴了 , 看下Mapper.xml
SELECT X.ID, X.NAME, X.PRICE, Y.CONTENT FROM T_PRODUCT X JOIN T_COMMENT Y ON (X.ID = Y.PID)
我有一个主子表在做关联查询的时候:on条件 我习惯都是用括号的 (X.ID = Y.PID)
结果问题就出在这里 , 报错了:
文章插图
这里报括号去掉就正常了 , ε=(′ο`*)))唉 。
推荐阅读
- keytypes(org.Hs.eg.db)基因的各种样子
- 如果你的手机出现“3大症状”,说明被“监听”了!请尽快自查
- 更新小彩蛋:iOS 14.3可让Siri播放各种动物和乐器的声音
- 不懂参数,不懂硬件,新手小白如何选购合适各种需要的电脑主机
- “闪修侠”上门换电池,修完后出现各种问题?
- SQL竞争对手简史
- 小程序开发行业各种“低价乱飞”,该怎么面对低价竞争?
- Oracle Linux希望吸引正寻找替代方案的CentOS用户
- Windows 10用户报告奇怪的蓝屏故障 各种原因都有
- 币价创新高,显卡都卖疯了,那么各种显卡的收益有多少呢