shardingsphere oracle各种问题总结( 三 )


connection.getMetaData().getTables这个返回的第二个参数
getTables(String catalog,String schemaPattern,String tableNamePattern,String[] types)throws SQLException第二个参数:模式名称的模式;它必须与存储在数据库中的模式名称匹配;该参数为 "" 表示获取没有模式的那些描述;为 null 则表示该模式名称不应该用于缩小搜索范围
在oracle中这个参数如果传的null 那么相当于查询all_users表也就是当前用户及可见用户的所有表 。 问题就出在这里 , 接着我们看JdbcUtil.getSchema这个方法
shardingsphere oracle各种问题总结文章插图
如果是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判断去掉了 。 然后在启动服务器 , 正常了 。
接下来继续各种测试
保存操作:
shardingsphere oracle各种问题总结文章插图
没问题 。
查询操作:
不分页的:
shardingsphere oracle各种问题总结文章插图
控制台没有错误 , 但是返回的结果是两个null , 没有找到原因 。
分页的:
shardingsphere oracle各种问题总结文章插图
表或者视图不存在 。。
查看日志:
shardingsphere oracle各种问题总结文章插图
发现表名是我们配置的逻辑表 , 并没有被替换成真实的表 , 这里也没有找到原因 。
这两个问题各种查阅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)
结果问题就出在这里 , 报错了:
shardingsphere oracle各种问题总结文章插图
这里报括号去掉就正常了 , ε=(′ο`*)))唉 。