当前位置: 首页 > 知识库问答 >
问题:

Oracle CLOB和NCLOB需要偶数字节

督德泽
2023-03-14

提前致谢

编辑:现在,我只是在流长度为奇数的情况下将缓冲区的大小增加1,然后将流以其自己的长度写入缓冲区,从而默认缓冲区的最后一个字节。请告知这样做的任何潜在错误:

var buffer=新字节[(stream.length%2>0?stream.length+1:stream.length)];
stream.read(buffer,0,(int)stream.length);
clob.write(buffer,0,buffer.length);

再次感谢

编辑:以前的解决方案不起作用。新的方法包括将流传递给string,在字符串末尾添加空格,然后再次转换为stream。到现在都很好。很抱歉我不能发布代码...只是我不知道如何克服StackOverflow中代码的4个空格的策略

共有1个答案

金泉
2023-03-14

我假设您使用的是System.Data.OracleClient类(与Oracle的ODP.NET相反)。

OracleLob类没有用于编写字符串的方法,我希望它能够处理CLOB。相反,文档中说:

用于Oracle的.NET Framework数据提供程序将所有CLOB和NCLOB数据处理为Unicode。因此,在访问CLOB和NCLOB数据类型时,总是要处理字节数,其中每个字符为2字节。例如,如果在字符集为每个字符4字节的Oracle服务器上将包含三个字符的文本字符串保存为NCLOB,并且执行写操作,则将字符串的长度指定为6字节,尽管该字符串在服务器上存储为12字节。

在这里,Unicode指的是UTF-16编码,大多数字符需要2个字节,辅助平面中的字符需要4或6个字节。

因此,如果您有一个字符串,您必须首先将其转换为UTF-16:

byte[] utf16Bytes = Encoding.Unicode.GetBytes(str);
clob.Write(utf16Bytes, 0, utf16Bytes.Lenght);

也可以使用StreamWriter实现相同的功能:

OracleLob clob = ...
using (StreamWriter writer = new StreamWriter(clob, Encoding.Unicode))
{
    writer.Write(str);
}
byte[] utf8Data = ...
byte[] utf16Data = Encoding.Convert(Encoding.UTF8, Encoding.Unicode, utf8Data);
clob.Write(utf16Data, 0, utf16Data.Length);
 类似资料:
  • 我用java随机生成了3位数字。util。随机()。系统打印的随机3位数字的数量由用户输入控制。以下是代码: 基本上,我希望代码添加从随机数生成器打印的DIGITS。例如,如果ranNum输出是111和111,我希望变量和等于6,而不是222。对于我现在的代码,它只添加每个数字的最后一位,(在这种情况下,1 1=2)。

  • 问题内容: 您能说出CLOB和NCLOB之间有什么区别吗? 问题答案: CLOB存储以数据库字符集编码的字符数据。NCLOB存储以国家字符集编码的字符数据 将显示数据库和数据库的国家字符集。

  • 本文向大家介绍在C ++中找到偶数和奇数位数的数字总和,包括了在C ++中找到偶数和奇数位数的数字总和的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个整数N,我们必须找到奇数位和偶数位的和。因此,如果数字是153654,则odd_sum = 9,even_sum = 15。 为了解决这个问题,我们可以从最后一位提取所有数字,如果原始数字的位数是奇数,则最后一位必须是奇数位,否则将是偶数位。

  • 本文向大家介绍Java程序查找数字的偶数因数之和,包括了Java程序查找数字的偶数因数之和的使用技巧和注意事项,需要的朋友参考一下 Java程序查找数字的偶数因数之和,代码如下- 示例 输出结果 一个名为Demo的类包含一个名为factor_sum的函数。这个函数查找一个数的因子,并将偶数因子相加,然后返回这个值作为输出。在main函数中,定义了需要找到偶因数的数,并对该数调用函数。相关的消息显示

  • 问题内容: 我正在尝试使用post请求将用户保存到mongodb数据库,如下所示,但我收到错误bcrypt错误:需要数据和哈希参数。这是代码的非常简单的设置,但我不知道它有什么问题。models / users.js 路线/users.js 服务器正在运行,但是在使用邮递员chrome后显示请求错误,并且服务器停止工作,如图中所示。 问题答案: 错误来自方法。就您而言,您具有以下代码段: 我认为您

  • 问题内容: 从DB2表中,我有一个Blob,我正在将其转换为字节数组,以便可以使用它。我需要采取字节数组并创建它。 这就是我所拥有的: 但是它创建的是不正确的,它上面有一束黑线。 实际上,通过使用基本上相同的过程编写Web应用程序,我能够创建正确的代码。Web应用程序和有关代码的主要区别在于以下这一行: 所以我知道字节数组是一个并且可以完成,但是我的代码不会创建clean 。 关于如何使它起作用的