
这个是mysql下存取blob字段的一个很简单的类,跟据自己的需要改改就行了 / Title: BlobProsjava Project: test Description: 把存入mysql中的blob字段,并取出 Call Module: mtools数据库中的tmp表 File: C:\downloads\luozsh
按类型分为:字符串类型、数字类型、日期类型、LOB类型、LONG RAW& RAW类型、ROWID & UROWID类型。
在讲叙字符串类型前,先要讲一下编码。字符串类型的数据可依编码方式分成数据库字符集(CHAR/VARCHAR2/CLOB/LONG)和国际字符集(NCHAR/NVARCHAR2/NCLOB)两种。数据库中的字符串数据都通过字符集将字符转换为数字后(二进制),才存储到数据块中。通过不同的编码集转换,即便是相同的字符,也可能会转换成不同的二进制编码。这也是产生乱码的原因。数据库的编码格式一般是在创建数据库时指定的。当然也可以修改数据库的编码。
一 字符串类型
11:CHAR类型 CHAR(size [BYTE | CHAR])
CHAR类型,定长字符串,会用空格填充来达到其最大长度。非NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2,000字节的信息。如果创建表时,不指定CHAR长度,则默认为1。另外你可以指定它存储字节或字符,例如 CHAR(12 BYTYE) CHAR(12 CHAR)一般来说默认是存储字节
注意:数据库的NLS_CHARACTERSET 为AL32UTF8,即一个汉字占用三到四个字节。如果NLS_CHARACTERSET为ZHS16GBK,则一个字符占用两个字节。
12: NCHAR类型
这是一个包含UNICODE格式数据的定长字符串。NCHAR字段最多可以存储2,000字节的信息。它的最大长度取决于国家字符集。
13 VARCHAR类型
不要使用VARCHAR数据类型。使用VARCHAR2数据类型。
14: VARCHAR2类型
变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多可以存储4,000字节的信息。
15: NVARCHAR2类型
这是一个包含UNICODE格式数据的变长字符串。 NVARCHAR2最多可以存储4,000字节的信息。
二 数字类型
21 NUMBER类型
NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10130~10126(不包含此值),需要1~22字节(BYTE)不等的存储空间。
P 是Precison的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字
S是Scale的英文缩写,可以使用的范围为-84~127。Scale为正数时,表示从小数点到最低有效数字的位数,它为负数时,表示从最大有效数字到小数点的位数
下面是官方文档的示例
Actual Data Specified As Stored As
12389 NUMBER 12389
12389 NUMBER(3) 124
12389 NUMBER(6,2) 12389
12389 NUMBER(6,1) 1239
12389 NUMBER(3) 124
12389 NUMBER(4,2) exceeds precision
12389 NUMBER(6,-2) 100
01234 NUMBER(4,5)01234
00012 NUMBER(4,5) 00012
000127 NUMBER(4,5) 00013
0000012 NUMBER(2,7) 0000012
00000123 NUMBER(2,7) 0000012
12e-4 NUMBER(2,5) 000012
12e-5 NUMBER(2,5) 000001
22 INTEGER类型
INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。
23 浮点数
Oracle 数据库提供了专为浮点数的两种数值数据类型:
BINARY_FLOAT
BINARY_FLOAT 是 32 位、 单精度浮点数字数据类型。可以支持至少6位精度,每个 BINARY_FLOAT 的值需要 5 个字节,包括长度字节。
BINARY_DOUBLE
BINARY_DOUBLE 是为 64 位,双精度浮点数字数据类型。每个 BINARY_DOUBLE 的值需要 9 个字节,包括长度字节。
在数字的列中,浮点数有小数精度。在 BINARY_FLOAT 或 BINARY_DOUBLE 的列中,浮点数有二进制的精度。二进制浮点数支持的特殊值无穷大和 NaN (不是数字)。
25 FLOAT类型
FLOAT类型也是NUMBER的子类型。
Float(n),数 n 指示位的精度,可以存储的值的数目。N 值的范围可以从 1 到 126。若要从二进制转换为十进制的精度,请将 n 乘以 030103。要从十进制转换为二进制的精度,请用 332193 乘小数精度。126 位二进制精度的最大值是大约相当于 38 位小数精度。
三 日期类型
日期类型用于存储日期数据,但是并不是使用一般的格式(2012-08-08)直接存储到数据库的。
31 DATE类型
DATE是最常用的数据类型,日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息,但是日期数据类型具有特殊关联的属性。为每个日期值,Oracle 存储以下信息: 世纪、 年、 月、 日期、 小时、 分钟和秒。一般占用7个字节的存储空间。
32 TIMESTAMP类型
这是一个7字节或12字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒,带小数秒的TIMESTAMP在小数点右边最多可以保留9位
33 TIMESTAMP WITH TIME ZONE类型
这是TIMESTAMP类型的变种,它包含了时区偏移量的值
34 TIMESTAMP WITH LOCAL TIME ZONE类型
35 INTERVAL YEAR TO MOTH
36 INTERVAL DAY TO SECOND
四 LOB类型
内置的LOB数据类型包括BLOB、CLOB、NCLOB、BFILE(外部存储)的大型化和非结构化数据,如文本、图像、视屏、空间数据存储。BLOB、CLOB、NCLOB类型
41 CLOB 数据类型
它存储单字节和多字节字符数据。支持固定宽度和可变宽度的字符集。CLOB对象可以存储最多 (4 gigabytes-1) (database block size) 大小的字符
42 NCLOB 数据类型
它存储UNICODE类型的数据,支持固定宽度和可变宽度的字符集,NCLOB对象可以存储最多(4 gigabytes-1) (database block size)大小的文本数据。
43 BLOB 数据类型
它存储非结构化的二进制数据大对象,它可以被认为是没有字符集语义的比特流,一般是图像、声音、视频等文件。BLOB对象最多存储(4 gigabytes-1) (database block size)的二进制数据。
44 BFILE 数据类型
二进制文件,存储在数据库外的系统文件,只读的,数据库会将该文件当二进制文件处理
五 RAW & LONG RAW类型
51 LONG类型
它存储变长字符串,最多达2G的字符数据(2GB是指2千兆字节, 而不是2千兆字符),与VARCHAR2 或CHAR 类型一样,存储在LONG 类型中的文本要进行字符集转换。ORACLE建议开发中使用CLOB替代LONG类型。支持LONG 列只是为了保证向后兼容性。CLOB类型比LONG类型的限制要少得多。 LONG类型的限制如下:
1一个表中只有一列可以为LONG型。(Why有些不明白)
2LONG列不能定义为主键或唯一约束,
3不能建立索引
4LONG数据不能指定正则表达式。
5函数或存储过程不能接受LONG数据类型的参数。
6LONG列不能出现在WHERE子句或完整性约束(除了可能会出现NULL和NOT NULL约束)
52 LONG RAW 类型,能存储2GB 的原始二进制数据(不用进行字符集转换的数据)
53 RAW类型
用于存储二进制或字符类型数据,变长二进制数据类型,这说明采用这种数据类型存储的数据不会发生字符集转换。这种类型最多可以存储2,000字节的信息
六 ROWID & UROWID类型
在数据库中的每一行都有一个地址。然而,一些表行的地址不是物理或永久的,或者不是ORACLE数据库生成的。
例如,索引组织表行地址存储在索引的叶子,可以移动。
例如,外部表的ROWID(如通过网关访问DB2表)不是标准的ORACLE的rowid。
ORACLE使用通用的ROWID(UROWIDs)的存储地址的索引组织表和外表。索引组织表有逻辑urowids的,和国外表的外urowids。UROWID这两种类型的存储在ROWID伪(堆组织的表的物理行id)。
创建基于逻辑的rowid在表中的主键。逻辑的rowid不会改变,只要主键不改变。索引组织表的ROWID伪UROWID数据类型。你可以访问这个伪列,你会堆组织表的ROWID伪(即使用一个SELECT …ROWID语句)。如果你想存储的rowid索引组织表,那么你就可以定义一列的表型UROWID到列检索值的ROWID伪。
本文将给大家讲解关于oracle数据库blob类型如何转换为varchar2 : 据说没有数据的时候可以直接转换,试过了也可以,但是一般都是由数据了才会去修改,麻烦产生,直接修改不了,只能通过函数来解决;总的思路是:创建临时字段B→将要转换的字段A放在临时字段中(使用函数转换)→删除A→将B名称改为A创建转换函数create or replace FUNCTION blob_to_varchar (blob_in IN BLOB)RETURN VARCHAR2ISv_varchar VARCHAR2(2000);v_start PLS_INTEGER := 1;v_buffer PLS_INTEGER := 2000;BEGINif DBMS_LOBGETLENGTH(blob_in) is null thenreturn empty_clob();end if;DBMS_OUTPUTput_line('TEST:' || CEIL(DBMS_LOBGETLENGTH(blob_in)));FOR i IN 1CEIL(DBMS_LOBGETLENGTH(blob_in) / v_buffer)LOOPv_varchar := UTL_RAWCAST_TO_VARCHAR2(utl_rawconvert(DBMS_LOBSUBSTR(blob_in, v_buffer, v_start),'AMERICAN_THE NETHERLANDSUTF8', 'AMERICAN_THE NETHERLANDSUTF8'));v_start := v_start + v_buffer;END LOOP;RETURN v_varchar;end blob_to_varchar;开始修改表数据:ALTER TABLE requestion ADD INTRODUCE_TEMP VARCHAR2(2000);UPDATE requestion SET INTRODUCE_TEMP=blob_to_varchar(INTRODUCE);ALTER TABLE requestion DROP COLUMN INTRODUCE;ALTER TABLE requestion RENAME COLUMN INTRODUCE_TEMP TO INTRODUCE;Drop FUNCTION blob_to_varchar;这个过程中可能会出现乱码问题,需要调整下编码当然,如果blob转换成varchar的函数还需要的话就不要删除了
呵呵,这个是没有办法接受哦。
requestsetCharacterEncoding("UTF-8");
responsesetContentType("image/jpeg");
responsegetOutputStream()write(bytes);
这几个参数是把这个直接发给浏览器,说白了就直接把当成文件让浏览器下载。
解决办法:
<img border=0 src="localhost:8080/Pic" />
localhost:8080是你配置WEBXML
Pic是你的Servlet类名。
_RecordsetPtr pRecordset = m_connGetRecordSet(strSql);
// strPicContent 插入数据指针
if (pRecordset->RecordCount != 0)
{
pRecordset->MoveLast();
}
pRecordset->AddNew();
pRecordset->PutCollect(_T("Field1"), _variant_t(strPicPath));
pRecordset->PutCollect(_T("Field2"), _variant_t(strPicType));
pRecordset->PutCollect(_T("Field3"), _variant_t(nPicIndex));
pRecordset->PutCollect(_T("Field4"), _variant_t(strFirstUrl));
pRecordset->PutCollect(_T("Field5"), _variant_t(strParentUrl));
VARIANT varBLOB;
SAFEARRAY psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0]lLbound = 0;
rgsabound[0]cElements = (ULONG)llPicCapacity;
// 创建SAFEARRAY对象
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)llPicCapacity; i++)
{
// 将strPicContent指向的二进制数据保存到SAFEARRAY对象psa中
SafeArrayPutElement(psa, &i, strPicContent+i);
}
// 将varBLOB的类型设置为BYTE类型的数组
varBLOBvt = VT_ARRAY | VT_UI1;
// 为varBLOB变量赋值
varBLOBparray = psa;
// 加入BLOB类型的数据
pRecordset->GetFields()->GetItem("Field6")->AppendChunk(varBLOB);
::VariantClear(&varBLOB);
pRecordset->PutCollect(_T("Field7"),
_variant_t((long long)llPicCapacity));
int nCount = pRecordset->RecordCount;
pRecordset->Update();
处理blob类型数据
对于大二进制数据 在PB Script中是用blob数据类型表示并加以处理 标准SQL语句中的select insert和update语句无法直接查询blob类型的数据 在PB中 *** 作blob类型的数据只能用专用的语句 从数据库中查询blob类型的数据的命令是
selectblob restofselectstatement {using transactionobject}
更新数据库中blob类型数据的格式是
updateblob tablename set blobcolumn = blobvariblerestofupatestatement {using transctionobject}
如连接的数据库是sybase或者Sql 则selectblob和updateblob语句要求数据库的自动提交方式为true 所以在在每次调用selectblob和updateblob语句以前必须用命令 Sqlca automit=true 把数据库的自动提交方式设置为true 在updateblob语句的结束后 再用命令Sqlca automit = false 把自动提交方式设置为false 索数据的参数(如flag) 然后在可修改列的Protect后的框中输入(user_name是该DataWindow中的一列 代表输入者的名称)
数据窗口的blob列
数据窗口blob列的功能
在PB 的datawindow画板中DBOLE控件允许用户利用这个控件浏览和 *** 作数据库中的大二进制数据 即通过DBOLE控件可以作如下 *** 作
往数据库中存储大二进制数据 如 excel工作表 word文档 视频文件 文件等各种格式的文件
从数据库中检索数据到datawindow对象
使用OLE服务器程序察看修改数据
将修改后的数据保存回数据库
在数据窗口中添加blob列的的步骤
)选择具有二进制字段的数据表作为数据源建立一新的数据窗口(该窗口可以至少需要包含非数据库表的标识列)
)选择insert control OLE database blob 菜单 在数据窗口的detail节中要插入blob列的位置单击鼠标 这时将显示如图 所示的对话框
下面解释这些属性的具体含义
)client class 客户类名 默认为datawindow
)client name 客户名 默认为untitled
)table: 选择含有blob列的数据库表 所选表的字段将出现在右侧的large binary/text column列表框中
)large binary/text column 选择一个blob类型的字段列
)key clause 检索和更新blob数据的关键字表达式其中使用带冒号前缀的变量指出是数据窗口对象的列 如 表达式 id=:id id是数据库表中的列 变量指出数据窗口对象的列
)filetemplate 如果需要OLE应用服务器每次打开相同的文件 则在filetemplate框中输入文件名
)OLE class 如果不需要OLE应用服务器每次打开相同的文件 则在OLE class框中选择一个OLE类 如Pbrush
)Client name expression 显示在OLE服务器应用程序窗口标题的文字 可以输入为 对应记录的id号是 +id
单击ok按钮关闭对话框 将dbole列添加到适当的位置 保存数据窗口
lishixinzhi/Article/program/SQL/201311/16229
二进制不能直接转化,blob可能存放的是普通文件,比如,txt,等,也可以存储纯文本(当然这种情况下就没必要用blob了), 需要通过外部程序进行处理,使用blob是不得已的情况下才用的,比如要存储文件,因为有时候会造成很大的不方便,比如使用dblink就不能查询blob字段,这点要注意
以上就是关于Mysql中是blob类型,实体类定义为string,怎么取值全部的内容,包括:Mysql中是blob类型,实体类定义为string,怎么取值、oracle 数据类型、oracle数据库之如何将blob类型转换为varchar2等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)