使用 Sql_variant 数据类型Using Sql_variant data type

08/12/2019

本文内容

从版本 6.3.0 开始,JDBC 驱动程序支持 sql_variant 数据类型。As of version 6.3.0, the JDBC driver supports the sql_variant datatype. 使用表值参数和 BulkCopy 等功能时,也支持 Sql_variant,本页后面部分将提到一些限制。Sql_variant is also supported when using features such as Table-Valued Parameters and BulkCopy with some limitations mentioned later on this page. 并非所有数据类型都可以存储在 sql_variant 数据类型中。Not all data types can be stored in the sql_variant data type. 有关 sql_variant 支持的数据类型列表,请查看 SQL Server Docs。For a list of supported data types with sql_variant, check the SQL Server Docs.

填充和检索表:Populating and retrieving a table:

假设一个表中包含 sql_variant 列,如下所示:Assuming one has a table with a sql_variant column as:

CREATE TABLE sampleTable (col1 sql_variant)

使用语句插入值的示例脚本:A sample script to insert values using statement:

try (Statement stmt = connection.createStatement()){

stmt.execute("insert into sampleTable values (1)");

}

使用预定义语句插入值:Inserting value using prepared statement:

try (PreparedStatement preparedStatement = con.prepareStatement("insert into sampleTable values (?)")) {

preparedStatement.setObject(1, 1);

preparedStatement.execute();

}

如果所传递的数据的基础类型已知,则可以使用相应的资源库。If the underlying type of the data being passed is known, the respective setter can be used. 例如,在插入整数值时,可以使用 preparedStatement.setInt()。For instance, preparedStatement.setInt() can be used when inserting an integer value.

try (PreparedStatement preparedStatement = con.prepareStatement("insert into table values (?)")) {

preparedStatement.setInt (1, 1);

preparedStatement.execute();

}

若要从表中读取值,可以使用相应的 getter。For reading values from the table, the respective getters can be used. 例如,如果来自服务器的值已知,则可以使用 getInt() 或 getString() 方法:For example, getInt() or getString() methods can be used if the values coming from the server are known:

try (SQLServerResultSet resultSet = (SQLServerResultSet) stmt.executeQuery("select * from sampleTable ")) {

resultSet.next();

resultSet.getInt(1); //or rs.getString(1); or rs.getObject(1);

}

使用带有 sql_variant 的存储过程:Using stored procedures with sql_variant:

具有如下所示的存储过程:Having a stored procedure such as:

String sql = "CREATE PROCEDURE " + inputProc + " @p0 sql_variant OUTPUT AS SELECT TOP 1 @p0=col1 FROM sampleTable ";

必须注册输出参数:Output parameters must be registered:

try (CallableStatement callableStatement = con.prepareCall(" {call " + inputProc + " (?) }")) {

callableStatement.registerOutParameter(1, microsoft.sql.Types.SQL_VARIANT);

callableStatement.execute();

}

sql_variant 限制:Limitations of sql_variant:

当使用 TVP 用存储在 sql_variant 中的 datetime/smalldatetime/date 值填充表时,在 ResultSet 上调用 getDateTime()/getSmallDateTime()/getDate() 将无效,并且会引发以下异常:When using TVP to populate a table with a datetime/smalldatetime/date value stored in a sql_variant, calling getDateTime()/getSmallDateTime()/getDate() on a ResultSet does not work and throws the following exception:

Java.lang.String cannot be cast to java.sql.Timestamp

解决方法:改为使用 getString() 或 getObject()。Workaround: use getString() or getObject() instead.

不支持使用 TVP 来填充表并在 sql_variant 中发送 null 值,并且会引发以下异常:Using TVP to populate a table and sending a null value in a sql_variant is not supported and throws an exception:

Inserting null value with column type sql_variant in TVP is not supported.

另请参阅See also

java variant类型_使用 Sql_variant 数据类型相关推荐

  1. java 判断类型_如何快速入门Java编程学习(干货)

    一.初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮>起床>洗漱>出宿舍>>吃早餐>到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 ...

  2. java 基本类型内存_java基本数据类型、内存分析、装包拆包

    2019-09-13   18:01:23 idea快捷键: file->settings->Keymap->搜索关键字 Increase Font Size   增大字体    c ...

  3. mysql中xml类型_使用 SQLXML 数据类型

    使用 SQLXML 数据类型 适用于数据库 XML 类型的 Java 数据类型 Deepak Vohra 2006 年 6 月 10 日发布 概述 J2EE 开发人员通常需要在关系数据库中存储 XML ...

  4. java switch 类型_Java switch case数据类型原理解析

    这篇文章主要介绍了Java switch case数据类型原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Java 中 switch cas ...

  5. oracle number对应java什么类型_JVM系列之数据类型

    码神手记--资深攻城狮的私房笔记.微信公众平台/知乎/头条/简书同步发文,关注.转发.收藏. 数据类型.类加载机制.JVM内存模型,很多人在面试中都会遇到这一类的问题.大部分人都是死记硬背,背完就忘. ...

  6. 数据库decimal对应java什么类型_数据库字段类型和Java的对应关系

    1.CHAR.VARCHAR .LONGVARCHAR 可映射为 String 或 char[],但 String 更适合于一般用法 2.BINARY.VARBINARY 和 LONGVARBINAR ...

  7. c#和mysql之间的类型_【SqlServer数据类型、C#数据类型、SqlDbType】对应关系及转换...

    // sql server数据类型(如:varchar) // 转换为SqlDbType类型 public static SqlDbType SqlTypeString2SqlType(string ...

  8. nsdata是java什么类型_Swift中基本数据类型与NSData转换

    Swift中基本数据类型与NSData转换 最近由于程序的需要,要与JAVA的服务端进行Socket的交互,那么这就牵涉到了数据的交互.Socket的数据交互一般都是直接采用二进制Bytes的方式来传 ...

  9. bigint对应java什么类型_「JAVA」从格式化输出到扫描输入,深究Java正则表达式匹配之道

    字符串是不可变的 字符串是不可变的,也就是说当字符串的内容发生改变的时候,会创建一个新的String对象:但是如果内容没有发生改变的时候,String类的方法会返回原字符串对象的引用. 而正则表达式往 ...

最新文章

  1. JAVA之JVM分代垃圾回收策略(一)
  2. 【Python-ML】SKlearn库集成学习器Boosting
  3. android弹幕开发,android弹幕框架
  4. 11个非常漂亮动物为主题的高品质图标集
  5. Nagios显示器mysql定从库: libmysqlclient.so.18: cannot open shared object file: No such
  6. Linux安装setuptools
  7. 【电商AI】商业情境中的机器学习|湾区人工智能
  8. 使用JDK中的 keytool【创建证书】・【查看】・【使用】
  9. 对联广告(jQuery)
  10. WebRTC学习与DEMO资源一览
  11. 五环打击理论的主要原则
  12. 51nod 1108.距离之和最小 V2 - 曼哈顿距离
  13. 推荐一个博客:香樟小院-大宝系列,博主多年来坚持记录了一只叫大宝的野猫的生活点滴,大宝后来还有了个小宝.......
  14. 如何搭建适合自己团队的构建部署平台
  15. 谈商业软件的发展趋势
  16. 毫米波雷达ADC数据采集
  17. 反射型XSS实战演练
  18. 特征选择之方差选择法VarianceThreshold
  19. Video4Linux下USB摄像头驱动和视频采集的实现
  20. 流量控制算法-----令牌桶------CBS---CIR

热门文章

  1. 【招聘直通车】美团地图服务部招聘啦!
  2. HP惠普服务器驱动下载地址_php_sir_新浪博客
  3. yarn link 用法
  4. antisamy XML 简介
  5. json qbytearray 串 转_Qt之JSON教程-使用篇
  6. 动态监听DOM元素的高度
  7. python学习学习笔记二
  8. 【Redis版】spring boot高性能实现二维码扫码登录(中)
  9. 2002飞越海峡活动策划方案
  10. 蓝桥杯2023年真题 python B组