返回顶部
首页 > 资讯 > 精选 >怎么使用shardingsphere对SQLServer坑进行解决
  • 262
分享到

怎么使用shardingsphere对SQLServer坑进行解决

2023-06-29 18:06:29 262人浏览 泡泡鱼
摘要

这篇“怎么使用shardingsphere对sqlServer坑进行解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使

这篇“怎么使用shardingsphere对sqlServer坑进行解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用shardingsphere对SQLServer坑进行解决”文章吧。

背景:最近一个使用SQLServer的项目,业务量太大,开始对业务有影响了,因此用户要求升级改造,技术上采用shardingsphere进行分库分表。

经过一系列调研,设计。。。哐哐一顿操作之后开始动刀改造。pom依赖如下:

        <!--sharding-->        <dependency>            <groupId>org.apache.shardingsphere</groupId>            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>            <version>4.0.1</version>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid-spring-boot-starter</artifactId>            <version>1.2.8</version>        </dependency>

改造后查询和写入都各种报错:

Caused by: org.apache.ibatis.type.TypeException: Error setting non null for parameter #2 with JdbcType NVARCHAR . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLFeatureNotSupportedException: setNString
    at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:75)
    at org.apache.ibatis.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:87)
    ... 47 common frames omitted
Caused by: java.sql.SQLFeatureNotSupportedException: setNString
    at org.apache.shardingsphere.shardingjdbc.jdbc.unsupported.AbstractUnsupportedOperationPreparedStatement.setNString(AbstractUnsupportedOperationPreparedStatement.java:57)
    at org.apache.ibatis.type.NStringTypeHandler.setNonNullParameter(NStringTypeHandler.java:31)
    at org.apache.ibatis.type.NStringTypeHandler.setNonNullParameter(NStringTypeHandler.java:26)
    at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:73)
    ... 48 common frames omitted

核心错误:Caused by: java.sql.SQLFeatureNotSupportedException: setNString

问题分析:

网上寻了千百度,蓦然回首,还是没有找到问题,(┭┮﹏┭┮)  最后debug断点跟了源码发现:

操作数据库的PreparedStatement 是ShardingPreparedStatement

怎么使用shardingsphere对SQLServer坑进行解决

 然后setNString支持SQLServerPreparedStatement 不支持ShardingPreparedStatement(改造前没问题,改造后出问题的原因)

怎么使用shardingsphere对SQLServer坑进行解决

问题解决:

找到问题了,下面就是解决问题了,既然没有setNString的实现,那就实现一个呗;

第一步 实现NVarcharTypeHandler:

package cn.preserve.config.mybatis;  import org.apache.ibatis.type.BaseTypeHandler;import org.apache.ibatis.type.JdbcType;import org.apache.ibatis.type.MappedJdbcTypes;import org.apache.ibatis.type.TypeException;import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException; @MappedJdbcTypes(JdbcType.NVARCHAR)public class NVarcharTypeHandler extends BaseTypeHandler<String> {     @Override    public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {        if(parameter == null) {            if(jdbcType == null) {                throw new TypeException("JDBC requires that the JdbcType must be specified for all nullable parameters.");            }             try {                ps.setNull(i, jdbcType.TYPE_CODE);            } catch (SQLException var7) {                throw new TypeException("Error setting null for parameter #" + i + " with JdbcType " + jdbcType + " . " + "Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. " + "Cause: " + var7, var7);            }        } else {            try {                this.setNonNullParameter(ps, i, parameter, jdbcType);            } catch (Exception var6) {                throw new TypeException("Error setting non null for parameter #" + i + " with JdbcType " + jdbcType + " . " + "Try setting a different JdbcType for this parameter or a different configuration property. " + "Cause: " + var6, var6);            }        }    }         @Override    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {        ps.setString(i, parameter);    }        @Override    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {        return rs.getString(columnName);    }     @Override    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {        return rs.getString(columnIndex);    }     @Override    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {        return cs.getString(columnIndex);    }  }

第二步 实现加入数据库配置:

由于我是代理实现的数据库,所有在代码中加入即可

@Configurationpublic class DataSourceConfig {     @Bean(name = "sqlSessionFactory")    @Primary    public SqlSessionFactory memberDb1SqlSessionFactory(DataSource dataSource)            throws Exception {        SqlSessionFactoryBean bean = getSqlSessionFactoryBean(dataSource);        bean.setTypeHandlers(new TypeHandler[] {new NVarcharTypeHandler()});        return bean.getObject();    }    // ******* 其他实现}

PS:如果是配置只修要在mybatis-config.xml中配置一下

<typeHandlers><typeHandler handler="cn.preserve.config.mybatis.NVarcharTypeHandler"/></typeHandlers>

配置完成后,测试以前功能全部正常(#^.^#)

如果嫌麻烦,有另外一种解决方案:将mapper.xml中的NVARCHAR替换从VARCHAR也可以哦

以上就是关于“怎么使用shardingsphere对SQLServer坑进行解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: 怎么使用shardingsphere对SQLServer坑进行解决

本文链接: https://lsjlt.com/news/326000.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么使用shardingsphere对SQLServer坑进行解决
    这篇“怎么使用shardingsphere对SQLServer坑进行解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使...
    99+
    2023-06-29
  • 使用shardingsphere对SQLServer坑的解决
    背景:最近一个使用SQLServer的项目,业务量太大,开始对业务有影响了,因此用户要求升级改造,技术上采用shardingsphere进行分库分表。 经过一系列调研,设计。。。哐哐...
    99+
    2024-04-02
  • 使用Flutter怎么对JSON进行解析
    本篇文章为大家展示了使用Flutter怎么对JSON进行解析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Dart实体类格式class CategoryMo { Str...
    99+
    2023-06-14
  • ParallelStream使用的坑怎么解决
    今天小编给大家分享一下ParallelStream使用的坑怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。比如下面的代...
    99+
    2023-06-17
  • 使用aot的坑怎么解决
    本篇内容主要讲解“使用aot的坑怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用aot的坑怎么解决”吧!启动参数固定化jaotc可以通过加-J参数来指定jvm的启动参数。我们尝试使用c...
    99+
    2023-06-03
  • Mybatis Plus使用@TableId坑怎么解决
    这篇文章主要讲解了“Mybatis Plus使用@TableId坑怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mybatis Plus使用@TableId坑怎么...
    99+
    2023-06-21
  • 在Mybatis使用Integer与''进行比较的坑及解决
    目录使用Integer与''进行比较的坑Integer类型参数在Mybatis中的比较问题案例原因分析总结最后使用Integer与''进行比较的坑 前...
    99+
    2023-05-13
    Mybatis使用Integer Integer与''比较 Mybatis Integer
  • new中无法使用@autowired进行对象bean注入怎么解决
    这篇文章主要介绍“new中无法使用@autowired进行对象bean注入怎么解决”,在日常操作中,相信很多人在new中无法使用@autowired进行对象bean注入怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希...
    99+
    2023-06-29
  • sqlserver对象名无效怎么解决
    如果SQL Server报告对象名无效错误,可能是由于以下原因: 对象名拼写错误:检查对象名是否拼写正确,确保大小写一致。 ...
    99+
    2024-04-09
    sqlserver
  • SQLServer数据库无法进行远程连接怎么解决
    SQLServer数据库无法进行远程连接怎么解决,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。SQLServer数据库远程连接...
    99+
    2024-04-02
  • 在Mybatis使用Integer与''进行比较的坑如何解决
    这篇文章主要介绍“在Mybatis使用Integer与''进行比较的坑如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“在Mybatis使用Integer与''进...
    99+
    2023-07-05
  • 使用MyBatis怎么对Spring进行无缝对接
    本篇文章给大家分享的是有关使用MyBatis怎么对Spring进行无缝对接,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.为什么会出现MyBatis-SpringSpring...
    99+
    2023-05-31
    mybatis spring
  • 使用JDBC怎么对ORACLE进行连接
    本篇文章给大家分享的是有关使用JDBC怎么对ORACLE进行连接,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。格式一: Oracle JDBC...
    99+
    2024-04-02
  • 使用zabbix怎么对mysql进行监控
    今天就跟大家聊聊有关使用zabbix怎么对mysql进行监控,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。zabbix 监控 mysql1、监控规划...
    99+
    2024-04-02
  • 使用javascript怎么对css进行修改
    这篇文章给大家介绍使用javascript怎么对css进行修改,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。javascript 动态修改css样式方法汇总(四种方法)在很多情况下,都需要对网页上元素的样式进行动态的修...
    99+
    2023-06-14
  • 使用Python怎么对Excel进行处理
    本篇文章为大家展示了使用Python怎么对Excel进行处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本...
    99+
    2023-06-07
  • 使用java怎么对elasticsearch进行操作
    这期内容当中小编将会给大家带来有关使用java怎么对elasticsearch进行操作,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java操作es集群步骤1:配置集群对象信息;2:创建客户端;3:查看集...
    99+
    2023-05-30
  • 使用Hibernate怎么对Session进行获取
    这期内容当中小编将会给大家带来有关使用Hibernate怎么对Session进行获取,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Session:是应用程序与数据库之间的一个会话,是Hibernate运作...
    99+
    2023-05-30
    hibernate session
  • 使用shiro怎么对INI进行配置
    这期内容当中小编将会给大家带来有关使用shiro怎么对INI进行配置,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。根对象SecurityManager从之前的Shiro架构图可以看出,Shiro是从根对象...
    99+
    2023-05-31
    shiro ini
  • 使用spring怎么对mybatis进行整合
    本篇文章为大家展示了使用spring怎么对mybatis进行整合,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1 数据库连接配置信息jdbc.properties#mysql version dat...
    99+
    2023-05-31
    spring mybatis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作