《oracle马拉松》基础语法篇-字段类型

发布时间 2023-04-05 17:10:25作者: Fusio

常见字段类型

原文链接:https://www.cnblogs.com/zhouweiye/p/3594268.html

1.字符型
CHAR型:定长字符串,短则用空格填充,长则出错。
VARCHAR2型:变长字符串。字段长度根据实际字符串长度自动调整,不用空格填充。

2.数值型NUMBER(PRECISION,SCALE)
精度PRECISION指定所有数字位的个数,范围SCALE指定小数的位数,两个参数均是可选的。如果插入的字段数据超过指定位数,将自动四舍五入。

3.日期时间数据类型DATE
可以存储日期和时间的组合数据。ORACLE默认的日期格式是 DD-MON-YY。

4.LOB数据类型
用于大型的、未被结构化的数据,如二进制文件、图片文件等。LOB数据类型又分为BLOB、CLOB和BFILE三种。
BLOB类型:用于存储二进制对象。如图像、音频、视频。
CLOB类型:用于存储字符格式的大型对象。Oracle将数据转换成Unicode格式。
BFILE类型:将二进制文件作为操作系统文件存储在数据库外部,BFILE类型的字段仅保存二进制文件的指针。

5.ROWID类型
亦称伪列类型,用于保存表中每条记录的物理地址。每条记录都唯一的rowid。ORACLE自动为每个表建立名称为ROWID的字段。可以对该字段进行查询。
rowid确定了每条记录属于哪一个数据对象、数据文件、块、行。是基于64位编码的18个字符显示。

char、varchar和varchar2

原文链接:https://baijiahao.baidu.com/s?id=1697536902944501753&wfr=spider&for=pc

varchar 和 varchar2

varchar 和varchar2的区别很好理解,只需要记住这句话:varchar是标准sql中定义的,而varchar2是oracle所提供的独有的数据类型。
两种数据类型在存放数据时也有所区别。
varchar对于汉字、全角等字符占两个字节,对于数字,英文字符是一个字节,占的内存小。varchar存放固定长度的字符串,最大长度是2000,对于空串,varchar仍按空串处理。
varchar2一般情况下把所有字符都占两字节处理,具体要看字符集情况。比如GBK,汉字就会占两个字节,英文1个;如果是UTF-8,汉字一般占3个字节,英文还是1个。 但一般情况下,我们都认为是两个字节处理,因为oracle安装时候默认我们都选择GBK的编码格式。varchar2是存放可变长度的字符串,最大长度是4000。VARCHAR2把空串等同于null处理。

char 和 varchar

char是一种固定长度的类型,无论存储的数据多少都会固定长度,如果插入的长度小于定义长度,则可以用空格进行填充。所以char可能更会浪费空间。
而varchar是一种可变长度的类型,当插入的长度小于定义的长度是,插入多上就存多长。

clob

原文链接:https://www.cnblogs.com/liqun-12345/p/5569569.html

  • BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的。
  • 其实两个是可以互换的的,或者可以直接用LOB字段代替这两个。但是为了更好的管理ORACLE数据库,通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便。

1.为何实用Clob:
oracle数据库当需要存入大数据量(大于4000)时,varchar2不够用,可以使用clob,本文描述clob怎么和Hibernate一起使用。

2.Clob类型的属性的赋值方式—— String转Clob:

String content = request.getParameter("content");//1.从request请求中取值(String类型的)
Clob clob = Hibernate.createClob(content);//2.通过hibernate将string转化为clob
news.setContent(clob);//3.给实体类对应属性赋值

3.Clob类型的属性的取值方式—— Clob转String:

List<News> list = query.addEntity(News.class).list();//1.从数据库取值
News news = (News)list.get(0);//2.取News对象
String content = ClobUtil.ClobToString(news.getContent());//3.将news对象中的clob类型的content转化为String字符串

4.clob默认不能插入空值,如何处理?

使用java + oracle插入clob类型的数据,需要用以下的步骤:
1、将数据插入数据库,对于clob字段,使其为空clob数据。例如:

insert into test values(1,empty_clob())";

2、从数据库中取出插入的clob字段,并将其赋值给oracle.sql.clob类型的变量。例如

String sqll="select content from test where id=1 for update";
  ResultSet rss=stmt.executeQuery(sqll);
  if(rss.next()){
   CLOB clob = ((OracleResultSet)rss).getCLOB(1);

3、给clob数据重新赋值,然后更新到数据库中。
例如:

clob.putString(1,"ddddddddddddddddddddddddddddddddddd");
   sql="update test set content=? where id=1";
   PreparedStatement pstmt=con.prepareStatement(sql);
   pstmt.setClob(1,clob);
   pstmt.executeUpdate();