当我们使用spring-jdbc来做持久化时(注意不是spring-data-jbc),有时候一些特殊字符存入数据库时会用到nvarchar、nvarchar2这种类型(比如存放化学式,如CO₂等),默认会直接按照String类型来处理字段类型映射,如果要最终让使用ps.setNString这种,一般有几种办法。

  1. 当使用JdbcTemplate时,可以自己在参数列表中设置数据类型为-9(即java.sql.Types.NVARCHAR)即可
  2. 当使用NamedParameterJdbcTemplate时,入参可以使用SqlParameterValue来设置,同时设置类型为-9
  3. 当使用NamedParameterJdbcTemplate,入参是Bean时,可以创建一个类,继承
    BeanPropertySqlParameterSource、然后定义一个注解,在需要nvarchar处理的字段上加上改注解。然后就可以直接使用,比如namedParameterJdbcTemplate.update(sql, new CustomerBeanPropertySqlParameterSource(...))
  4. import org.apache.commons.lang3.reflect.FieldUtils;
    import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource; import java.sql.Types; public class CustomerBeanPropertySqlParameterSource extends BeanPropertySqlParameterSource { public CustomerBeanPropertySqlParameterSource(Object object) {
    super(object);
    FieldUtils.getFieldsListWithAnnotation(object.getClass(), NvarcharTypeHandler.class)
    .forEach(field -> registerSqlType(field.getName(), Types.NVARCHAR));
    }
    } @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.FIELD)
    public @interface NvarcharTypeHandler {
    } public class Demo{
    @NvarcharTypeHandler
    private String cont;
    }

      

  5. 对于使用mybatis来说,参数的jdbcType指定为NVARCHAR即可,(要注意版本,3.5以上应该没问题)

springjdbc处理nvarchar的更多相关文章

  1. SpringJDBC源码解析

    读完本篇文章需要很长很长时间.... 传统JDBC 相信大家对传统的jdbc已经很熟悉了,无非就是下面这个流程 1234567891011 //1.加载驱动程序Class.forName(" ...

  2. SQL中varchar和nvarchar的区别

    varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为输入数据的字节的实际长度,而不是 n 个字节. nvar ...

  3. Oracle中varchar,varchar2,nvarchar,nvarchar2的区别及其它数据类型描述

    --varchar,varchar2 联系: 1.varchar/varchar2用于存储可变长度的字符串 比如varchar(20),存入字符串'abc',则数据库中该字段只占3个字节,而不是20个 ...

  4. sql中NVARCHAR(MAX) 性能和占空间分析 varchar(n),nvarchar(n) 长度性能及所占空间分析

    varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...

  5. SQl中的char,varcher,nvarchar,txt

    CHAR    char是定长的,在字段建立时,空间就固定了,不管是否插入值(NULL也包含在内),都占用字符的空间.例如: char(8),输入字符小于8,后面补空值.输入字符大于8时,会截取.CH ...

  6. char、varchar、text和nchar、nvarchar、ntext的区别

    1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的 ...

  7. 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;

    http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用) ...

  8. varchar(n),nvarchar(n) 长度、性能、及所占空间的说明

    varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...

  9. --查询nvarchar(max)的表和字段

    --查询nvarchar(max)的表和字段 select 'insert into #tempTabelInfo select '''+d.name+''', '''+a.name+''', max ...

  10. Spring-JDBC实现Contact的CRUD

    Spring-JDBC完成Contact的CRUD. 两点注意: 1.log4j.properties文件不能少 2.注意导入的包之间的依赖关系以及版本要求. 项目结构: 主要文件: 建表脚本: CR ...

随机推荐

  1. 域套接字sendto errno -11分析

    sendto errno -11代码分析 errno -11在内核代码中代表EAGAIN(再试⼀次),域套接字sendto过程中 sendto->sock_sendmsg->unix_dg ...

  2. oeasy教您玩转vim - 46 - # 范围控制

    ​ 范围控制 回忆上节课内容 这次我们主要就是看命令行 首先是选择一个 [range] 这个范围 然后进行相应的操作 :11,30d :2,7y 还可以指定寄存器 :"a3,40y :&qu ...

  3. 【VMware VCF】VMware Cloud Foundation Part 01:概述。

    VMware Cloud Foundation(简称 VCF)是 VMware 打造的一套用于 Software Defined Data Center(SDDC)软件定义数据中心的全栈云平台解决方案 ...

  4. 学习笔记--区分Java中类与对象

    区分Java中类与对象 你能接受 String 吗? 如果能,以下内容可进行类比 编写 User 类 public class User{ // 用户编号 // int 是一种基础数据类型 // id ...

  5. Flink 架构学习总结

    Flink是一个分布式系统,要求有效地分配和管理计算资源以执行流式应用程序.它集成了所有常见的集群资源管理器,如Hadoop YARN和Kubernetes,但也可以设置为作为standalone甚至 ...

  6. 记一次 Redisson 线上问题 → 你怎么能释放别人的锁

    开心一刻 今天,我的又一个好哥们脱单了,只剩下我自己单身了 我向一个我喜欢的女生吐苦水 我:我这辈子是找不到女朋友了 她:怎么可能,你很优秀的,会有很多女孩子愿意当你女朋友的 我内心窃喜,问道:那你愿 ...

  7. 从菜鸟到大牛!嵌入式完整学习路线:STM32单片机-RTOS-Linux(文末领取开发板全套资料)

    ​ 嵌入式系统是许多现代电子设备和智能系统的核心,掌握嵌入式系统,意味着能够设计和开发更加智能化的产品.本文为所有想进入嵌入式领域的初学者提供一个完整系统学习的路线图,按照 "STM32单片 ...

  8. 硬件开发笔记(二十八):TPS54331电源设计(一):5V电源供电原理图设计

    前言   电源供电电路设计很重要,为了更好的给对硬件设计有需求的人,特意将电源设计的基础过程描述出来.  本篇描述设计常用的12V转5V电路3A.   TPS54331(DC-DC稳压器) 概述    ...

  9. RDD入门了解

    RDD即resilient distributed dataset 弹性分布式数据集,简单来说就是数据集,可以类比python的list dict:但是数据是分布式存储的,可用于分布式计算:可以存在内 ...

  10. python_xecel

    移动并重命名工作簿 1 from pathlib import Path # 导入pathlib模块的path类 2 import time 3 4 # Press the green button ...