net如何取出CLOB类型字段的数据

net如何取出CLOB类型字段的数据,第1张

最近在做项目中用到Clob这个字段,Clob是存储无限长字符的Oracle字段,用的时候网上找资料找了好久,内容不是很多,大部分都不能用,当然也有可以用的,测试了不同版本,整理了一下,给大家在做项目的时候以参考。

表 *** 作

第一种方案很简单,是数据库表中的某个字段是Clob类型,需要对这个表进行增加修改,网上有很多版本,我试了一种最简单的:

new OracleParameter(":Test", OracleTypeClob,SystemTextEncodingUnicodeGetByteCount(modelTest)),

就是在创建参数的时候指定一个长度,为什么这样写,不是很清楚,我试过超过4000字符存储和修改是没什么问题的。下面给参数赋值直接赋值就行了,就那么简单!

参数 *** 作

第一种是对表中Clob的 *** 作,还有一种情况是,在Oracle中定义的存储过程和函数,参数的类型是Clob类型,如果用第一种方式的话就会报错,字符超过最大,我想是虽然参数类型是Clob但是传过去的是字符,Oracle默认应该是把传过来的值当做字符看待了,第一种不行,就找了另一种实现方法,我们看下:

public static OracleLob GetOracleClob(string strValue)

{            using (OracleConnection connection = new OracleConnection(connectionString))

{                try

{

connectionOpen();                    string str = strValue;                    byte[] array = EncodingUnicodeGetBytes(str);                    if (arrayLength % 2 != 0)

{

array = EncodingUnicodeGetBytes(str + ' ');

}

OracleCommand lobCmd = connectionCreateCommand();                    // 为访问表定义一个游标 clobvar

string cmdSql = "DECLARE clobvar CLOB;";

cmdSql += " begin ";

cmdSql += " dbms_lobcreatetemporary(clobvar, false, 0); :tempLob:= clobvar; ";

cmdSql += " end;";

lobCmdCommandText = cmdSql;

lobCmdParametersAdd(new OracleParameter("tempLob", OracleTypeClob))Direction = ParameterDirectionOutput;

lobCmdExecuteNonQuery();                    // 利用事务处理(必须)

OracleTransaction tx = connectionBeginTransaction();

lobCmdTransaction = tx;                    // 定义一个临时变量

OracleLob tempLob = (OracleLob)lobCmdParameters["tempLob"]Value;

tempLobBeginBatch(OracleLobOpenModeReadWrite);

tempLobWrite(array, 0, arrayLength);

tempLobEndBatch();                    // 提交事务                    txCommit();                    return tempLob;

}                catch (Exception e)

{                    throw e;

}

}

}

调用:

parameters[0]Value = DbHelperOraGetOracleClob(TestString);

大家看代码可能明白一些,这里我说下自己的理解,先定义一个Byte,然后拼一个输出Clob类型的字符串,在Oracle执行后输出,然后把Byte写入输出的Clob变量,然后提交事务,我觉得得到的这个Clob类型才是真正的Clob类型,是和Oracle那边是一致的。这边有一个重要的是字符的编码,注意下要和Oracle那边要一致!

SQL数据类型和Java数据类型的对应关系

integer、int ---> int

tinyint、smallint ---> short

bigint ---> long

decimal、numeric ---> javamathBigDecimal

float ---> float

double ---> double

char、varchar ---> String

boolean、bit ---> boolean

date ---> javasqlDate

time ---> javasqlTime

timestamp ---> javasqlTimestamp

blob ---> javasqlBlob

clob ---> javasqlClob

array ---> javasqlArray

以上就是关于net如何取出CLOB类型字段的数据全部的内容,包括:net如何取出CLOB类型字段的数据、mybatis bigdecimal 对应什么类型、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9617415.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存