问题
goldendb版本:6.1.03
shardingsphere版本:4.1.1
使用sharding-jdbc连接goldendb报"where 1!=1 "异常;
check the manual that corresponds to your MySOL server version for the right syntax to use near '"table_name"' WHERE 1!=1 at line 1
原因
shardingsphere4.1.1版本中org.apache.shardingsphere.underlying.common.database.type.DatabaseTypes中的DATABASE_TYPES初始化之后只有
goldendb默认是不支持的
public static DatabaseType getDatabaseTypeByURL(final String url) {
return DATABASE_TYPES.values().stream().filter(each -> matchStandardURL(url, each) || matchURLAlias(url, each)).findAny().orElse(DATABASE_TYPES.get("SQL92"));
}
会根据传入的url来和数据库类型来判断是否存在,不存在则使用SQL92协议
解决
升级sharding版本
2、将url中jdbc:goldendb改成jdbc:mysql可以规避。
或者使用SPI机制可以很好的对ShardingSphere进行扩展,重写适配goldendb的shardingsphere方言
1、实现BranchDatabaseType
2、实现DataSourceMetaData
3、在resources下添加META-INF/services/org.apache.shardingsphere.spi.database.type.DatabaseType并将GoldenDbDatabaseType路径添加到org.apache.shardingsphere.spi.database.type.DatabaseType文件中