`
zjx2388
  • 浏览: 1330832 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

SQL Server数据类型转换(摘)

阅读更多

简化 Java 编程语言数据类型到 SQL Server 数据类型的转换,Microsoft SQL Server JDBC Driver 根据 JDBC 规范的要求提供了数据类型转换。为了提高灵活性,所有类型都可以与 ObjectStringbyte[] 数据类型相互转换。

Getter 方法转换

基于 SQL Server 的数据类型,以下图表包含 SQLServerResultSet 类的 get<Type>() 方法的 JDBC Driver 转换图,以及 SQLServerCallableStatement 类的 get<Type> 方法支持的转换。

JDBCGetterConversions

JDBC Driver 的 getter 方法支持三类转换:

  • 非丢失 (x):适用于 getter 类型与基础服务器类型相同或者小于基础服务器类型时的转换。例如,对基础服务器十进制数列调用 getBigDecimal 时,无需进行转换。
  • 已转换 (y):从数值服务器类型转换为 Java 语言类型,其中转换是常规的并遵循 Java 语言转换规则。对于这些转换,总是直接截取有效位数(从不四舍五入),而溢出则按目标类型取模处理,以较小者为准。例如,对于包含“1.9999”的基础 decimal 列调用 getInt 时将返回“1”,或者,如果基础 decimal 值为“3000000000”,则 int 值溢出为“-1294967296”。
  • 依赖于数据 (z):如果从基础字符类型转换到数值类型,则要求字符类型包含可转换为数值类型的值。不执行其他转换。如果值对于 getter 类型过大,则该值无效。例如,如果对包含“53”的 varchar(50) 列调用 getInt,则值将作为 int 返回;如果基础值为“xyz”或“3000000000”,则将引发错误。

如果对 binaryvarbinaryvarbinary(max)image 列数据类型调用 getString,则值将作为十六进制字符串值返回。

Updater 方法转换

对于传递给 SQLServerResultSet 类的 update<Type>() 方法的 Java 类型的数据,可应用下列转换。

JDBCUpdaterConversions

JDBC Driver 的 updater 方法支持三类转换:

  • 非丢失 (x):适用于 updater 类型与基础服务器类型相同或者小于基础服务器类型时的转换。例如,对基础服务器十进制数列调用 updateBigDecimal 时,无需进行转换。
  • 已转换 (y):从数值服务器类型转换为 Java 语言类型,其中转换是常规的并遵循 Java 语言转换规则。对于这些转换,总是直接截取有效位数(从不四舍五入),而溢出则按目标(较小者)类型取模处理。例如,对包含“1.9999”的基础 int 列调用 updateDecimal 时将返回“1”,如果基础 decimal 值为“3000000000”,则 int 值溢出为“-1294967296”。
  • 依赖于数据 (z):如果从基础源数据类型转换到目标数据类型,则要求源数据类型包含可转换为目标数据类型的值。不执行其他转换。如果值对于 getter 类型过大,则该值无效。例如,如果对包含“53”的 int 列调用 updateString,更新将成功;如果基础字符串值为“foo”或“3000000000”,将引发错误。

binaryvarbinaryvarbinary(max)image 列数据类型调用 updateString 时,会将字符串值作为十六进制字符串值进行处理。

当 SQL Server 列的数据类型为 XML 时,数据值必须是有效的 XML。调用 updateBytesupdateBinaryStreamupdateBlob 方法时,数据值应为 XML 字符的十六进制字符串表示形式。 例如:

<hello>world</hello> = 0x3C68656C6C6F3E776F726C643C2F68656C6C6F3E 

请注意,如果 XML 字符使用特殊的字符编码,则需要字节顺序标记 (BOM)。

Setter 方法转换

对于传递给 SQLServerPreparedStatement 类和 SQLServerCallableStatement 类的 set<Type>() 方法的 Java 类型的数据,可应用下列转换。

JDBCSetterConversions

服务器会尝试所有转换,并在失败时返回错误。

对于 String 数据类型,如果值超过了 VARCHAR 的长度,则将映射为 LONGVARCHAR。同样,对于 NVARCHAR 数据类型,如果值超过了 NVARCHAR 的支持长度,则将映射为 LONGNVARCHAR。这同样适用于 byte[]。比 VARBINARY 长的值将成为 LONGVARBINARY

JDBC Driver 的 setter 方法支持两类转换:

  • 非丢失 (x):适用于 setter 类型与基础服务器类型相同或者小于基础服务器类型时的数值转换。例如,当对基础服务器 decimal 列调用 setBigDecimal 时,不需要进行转换。对于数值转换为字符的情形,Java numeric 数据类型转换为 String。例如,使用值“53”对 varchar(50) 列调用 setDouble 时将在该目标列中生成字符值“53”。
  • 已转换 (y):从 Java numeric 类型转换为更小的基础服务器 numeric 类型。该转换为常规转换,并且遵循 SQL Server 转换约定。总是直接截取有效位数(从不四舍五入),而溢出将引发“不支持的转换”错误。例如,通过值“1.9999”对基础整数列使用 updateDecimal 时,将在目标列中生成“1”;但如果传递的值为“3000000000”,驱动程序将引发错误。
  • 依赖于数据 (z):从 Java String 类型转换到基础 SQL Server 数据类型取决于以下条件:如有必要,驱动程序会将 String 值发送给 SQL Server,SQL Server 再执行转换。如果 sendStringParametersAsUnicode 设置为 True,并且基础 SQL Server 数据类型为 image,SQL Server 将不允许将 nvarchar 转换为 image并会引发 SQLServerException。如果 sendStringParametersAsUnicode 设置为 False,并且基础 SQL Server 数据类型为 image,SQL Server 将允许将 varchar 转换为 image,而不会引发异常。

SQL Server 执行转换,并在出现问题时将错误传回 JDBC Driver。

当 SQL Server 列的数据类型为 XML 时,数据值必须是有效的 XML。调用 updateBytesupdateBinaryStreamupdateBlob 方法时,数据值应为 XML 字符的十六进制字符串表示形式。 例如:<hello>world</hello> = 0x3C68656C6C6F3E776F726C643C2F68656C6C6F3E

请注意,如果 XML 字符使用特殊的字符编码,则需要字节顺序标记 (BOM)。

setObject 的转换

对于传递给 SQLServerPreparedStatement 类的 setObject(<Type>) 方法的 Java 类型的数据,可应用下列转换。

JDBCSetObjectConversions

没有指定目标类型的 setObject 方法将使用默认映射。对于 String 数据类型,如果值超过了 VARCHAR 的长度,则将映射为 LONGVARCHAR。同样,对于 NVARCHAR 数据类型,如果值超过了 NVARCHAR 的支持长度,则将映射为 LONGNVARCHAR。这同样适用于 byte[]。比 VARBINARY 长的值将成为 LONGVARBINARY

JDBC Driver 的 setObject 方法支持三类转换:

  • 非丢失 (x):适用于 setter 类型与基础服务器类型相同或者小于基础服务器类型时的数值转换。例如,当对基础服务器 decimal 列调用 setBigDecimal 时,不需要进行转换。对于数值转换为字符的情形,Java numeric 数据类型转换为 String。例如,使用值“53”对 varchar(50) 列调用 setDouble 时将在该目标列中生成字符值“53”。
  • 已转换 (y):从 Java numeric 类型转换为更小的基础服务器 numeric 类型。该转换为常规转换,并且遵循 SQL Server 转换约定。总是直接截取有效位数(从不四舍五入),而溢出将引发不支持转换的错误。例如,通过值“1.9999”对基础整数列使用 updateDecimal 时,将在目标列中生成“1”;但如果传递的值为“3000000000”,驱动程序将引发错误。
  • 依赖于数据 (z):从 Java String 类型转换到基础 SQL Server 数据类型取决于以下条件:如有必要,驱动程序会将 String 值发送给 SQL Server,SQL Server 再执行转换。如果 sendStringParametersAsUnicode 连接属性设置为 True,并且基础 SQL Server 数据类型为 image,SQL Server 将不允许将 nvarchar 转换为 image 并会引发 SQLServerException。如果 sendStringParametersAsUnicode 设置为 False,并且基础 SQL Server 数据类型为 image,SQL Server 将允许将 varchar 转换为 image,而不会引发异常。

SQL Server 执行大部分设置转换,并且在出现问题时将错误传回 JDBC Driver。客户端转换是例外情况,仅在值为 datetimetimestampBooleanString 的情况下才执行。

当 SQL Server 列的数据类型为 XML 时,数据值必须是有效的 XML。调用 setObject(byte[], SQLXML)、setObject(inputStream, SQLXML) 或 setObject(Blob, SQLXML) 方法时,数据值应为 XML 字符的十六进制字符串表示形式。例如:<hello>world</hello> = 0x3C68656C6C6F3E776F726C643C2F68656C6C6F3E

请注意,如果 XML 字符使用特殊的字符编码,则需要字节顺序标记 (BOM)。

 

 

摘自:http://msdn.microsoft.com/zh-cn/library/ms378680.aspx

分享到:
评论

相关推荐

    sql server 数据类型

    SQL Server 数据类型是数据库管理系统中用于定义和存储数据的基础组件,它们决定了数据的结构和特性。在SQL Server 2000中,数据类型的选择至关重要,因为它直接影响到数据的存储方式、大小以及处理效率。 首先,让...

    sqlserver 数据类型转换小实验

    SQL Server 数据类型转换小实验 在本实验中,我们将探索 SQL Server 中的数据类型转换机制,并通过实践验证数据类型转换的实现方式。 数据类型转换的概念 在 SQL Server 中,数据类型转换是指将一种数据类型转换...

    Microsoft Access数据类型与SQL Server数据类型的区别

    ### Microsoft Access 数据类型与 SQL Server 数据类型的主要区别 在数据库设计和开发过程中,选择合适的数据类型对于确保数据的准确性和优化存储空间至关重要。Microsoft Access 和 SQL Server 虽然都是微软旗下的...

    SQL Server数据类型转换方法

    下面分别对这两种数据类型转换进行简要的说明: 1 显式转换 显示转换是将某种数据类型的表达式显式转换为另一种数据类型。常用的是CAST 和 CONVERT 函数。  CAST: CAST ( expression AS data_type )  CONVERT: ...

    sql server日期格式转换方法大全

    在SQL Server中,日期和时间数据类型的处理是数据库操作中的常见任务。无论是为了报表、数据分析还是用户界面展示,我们经常需要将日期格式进行转换。本文将深入探讨SQL Server中多种日期格式转换的方法。 1. `...

    SQL Server转换为MySQL工具

    2. 数据迁移:工具会逐条读取SQL Server中的记录,根据字段映射规则将其转换为符合MySQL数据类型的格式,然后插入到对应的MySQL表中。这一步骤需要注意数据类型不兼容的问题,例如,SQL Server的datetime与MySQL的...

    数据库技术sql数据类型转换

    SQL Server 提供了两种常用的数据类型转换方式:`CAST()` 和 `CONVERT()` 函数。这两种方法各有特点,能够帮助用户灵活地处理各种类型的数据。 #### 一、`CAST()` 函数 `CAST()` 是 SQL-92 标准中定义的函数,用于...

    SQL数据类型与C#数据类型转换

    ### SQL数据类型与C#数据类型的转换 在开发过程中,我们经常会遇到需要将数据库中的数据类型映射到编程语言中的情况。特别是在使用SQL Server作为后端数据库与C#进行交互时,了解这两种环境下的数据类型及其对应...

    ACCESS 与SQL SERVER数据库数据相互转换,ACCESS,SQL SERVER

    在进行数据转换时,需要注意数据类型匹配、字段大小、编码格式等问题,确保数据的一致性和完整性。同时,对于大量数据的迁移,应考虑性能优化,如分批处理、索引重建等。 总的来说,ACCESS和SQL Server在数据处理...

    sqlserver-oracle 数据类型对照

    本文将详细比较SQL Server和Oracle数据库之间的数据类型对应以及常用函数的转换。 首先,我们来看SQL Server和Oracle的数据类型对照: 1. **数值类型**: - `bigint`在SQL Server中对应Oracle的`NUMBER(19)`,...

    sql server 和oracle 中数据类型的区别

    本文将深入探讨SQL Server与Oracle中的数据类型区别,并通过具体的例子来说明这两种系统之间的转换方法。 ### SQL Server 数据类型 SQL Server 是微软开发的一款关系型数据库管理系统,它支持多种数据类型,可以...

    sql server数据类型大全

    例如,将`numeric`数据类型转换为`integer`会丢失小数部分,如15.415会被四舍五入成15。 4. **查询表结构获取数据类型**: 使用`sys.objects`和`sys.columns`系统视图可以查询SQL Server表中各列的数据类型。`TYPE...

    SQL Server 数据转换图文教程.rar

    在SQL Server中,数据类型包括数值型、字符型、日期/时间型等。有时需要将数据从一种类型转换为另一种。这可以通过`CAST`或`CONVERT`函数实现。例如,将字符串转换为整数,或者将日期字符串转换为日期类型。 3. **...

    通过Oracle的透明网关和dblink直接取sqlserver表中的数据

    "通过Oracle的透明网关和DBLink直接取SQL Server表中的数据" 本文主要讲述了如何使用Oracle的透明网关和DBLink直接从SQL Server数据库中提取数据。首先,需要安装Oracle的透明网关软件win64_11gR2_gateways,接着...

    sql server中的image类型的数据导出到oracle的clob字段中

    在进行数据库迁移或数据交换时,需要将不同数据库管理系统之间的数据类型进行转换。在本文中,我们将讨论如何将 SQL Server 中的 Image 类型数据导出到 Oracle 的 CLOB 字段中。 Image 类型在 SQL Server 中的应用 ...

    sqlserver自动生成sql语句工具sqlserver转oracle

    1. 数据类型映射:SQL Server和Oracle的数据类型可能存在差异,如SQL Server的`datetime`对应Oracle的`timestamp`,`varchar2`对应`nvarchar2`等,工具会自动进行转换,但也可能需要手动调整。 2. 函数和过程转换:...

    SQL Server 2000数据转换服务(PDG)

    - **转换组件**:处理数据流,包括数据类型转换、过滤、排序、合并等。这些组件可以在数据流中嵌入,以实现复杂的数据处理逻辑。 **3. DTS 设计与实施** 设计 DTS 包时,用户可以通过 SQL Server Management ...

    SQL Server中T-SQL 数据类型转换详解

    在SQL Server中,数据类型转换是数据库操作中的常见任务,用于将一种数据类型转换为另一种。T-SQL提供了多种函数来实现这一目标,确保数据在不同的场景下能正确处理和展示。本文主要介绍SQL Server中常用的转换函数...

    SQLServer2000数据库与Excel数据表转换C#实现

    以下是一个简单的示例代码片段,展示了如何将SQL Server数据导出到Excel: ```csharp using System.Data.SqlClient; using Excel = Microsoft.Office.Interop.Excel; // 创建数据库连接 SqlConnection conn = new ...

Global site tag (gtag.js) - Google Analytics