,在java中,数据库中存储的ip是varbinary类型,读出来不能正常显示,如何读出并正常显示

,在java中,数据库中存储的ip是varbinary类型,读出来不能正常显示,如何读出并正常显示,第1张

数据库中的varbinary 类型 对应到java里面是byte类型, 直接打印出来是内存地址。

所以 new一个String 把拿到的对象放进去。即首先使用byte[]进行接收,接收完成以后使用

new String((byte[]) xxx )获取为String

看看数据库中表空间是否自动扩展的,还有如果是空间的问题会报错的,看看是不是因为重复所以插入不进去。看看应用。。下面为可用表空间代码:

SELECT /+ NO_MERGE(D) NO_MERGE(A) NO_MERGE(F) NO_MERGE(U) NO_MERGE(O) / DTABLESPACE_NAME "表空间名", DBLOCK_SIZE/1024 "块大小(KB)",DINITIAL_EXTENT/1024 "初始分配大小(KB)",

ROUND(NVL(ABYTES /1024 /1024,0) ,2) "大小(MB)",

ROUND(DECODE(DCONTENTS, 'UNDO', NVL(UBYTES, 0) / 1024 / 1024,NVL(ABYTES - NVL(FBYTES, 0), 0) / 1024 / 1024) ,2) "占用量(MB)",

TO_CHAR(ROUND(DECODE(DCONTENTS, 'UNDO', NVL(UBYTES / ABYTES 100, 0),NVL((ABYTES - NVL(FBYTES, 0)) / ABYTES 100, 0)) ,2),'99999')||'%' "占用率(MB)",

ROUND(DECODE(DCONTENTS, 'UNDO', NVL(ABYTES - NVL(UBYTES, 0), 0) / 1024 / 1024,NVL(FBYTES, 0) / 1024 / 1024) ,2) "空闲空间(MB)",

DSTATUS "状态",AAUTOEXTENSIBLE "是否自动扩展",DLOGGING "是否记录日志", ACOUNT "数据文件", DCONTENTS "类型",

DEXTENT_MANAGEMENT "区管理", DSEGMENT_SPACE_MANAGEMENT "段管理"

FROM SYSDBA_TABLESPACES D,

(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES, COUNT(FILE_ID) COUNT,

CASE WHEN SUM(DECODE(AUTOEXTENSIBLE,'YES',10000,'NO',1,AUTOEXTENSIBLE))>=10000 THEN 'YES' ELSE 'NO' END||CASE WHEN MOD(SUM(DECODE(AUTOEXTENSIBLE,'YES',10000,'NO',1,AUTOEXTENSIBLE)),10000)>0 THEN CHR(13)||CHR(38)||CHR(13)||'NO' ELSE '' END AS AUTOEXTENSIBLE

FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) A,

(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F,

(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES

FROM DBA_UNDO_EXTENTS

WHERE STATUS IN ('UNEXPIRED', 'EXPIRED')

GROUP BY TABLESPACE_NAME) U

WHERE DTABLESPACE_NAME = ATABLESPACE_NAME(+) AND DTABLESPACE_NAME = FTABLESPACE_NAME(+)

AND DTABLESPACE_NAME = UTABLESPACE_NAME(+) AND NOT (DEXTENT_MANAGEMENT = 'LOCAL' AND DCONTENTS = 'TEMPORARY')

--AND DTABLESPACE_NAME LIKE '%UNDO%'

UNION ALL

SELECT /+ NO_MERGE(D) NO_MERGE(A) NO_MERGE(T) / DTABLESPACE_NAME "表空间名", DBLOCK_SIZE/1024 "块大小(KB)",DINITIAL_EXTENT/1024 "初始分配大小(KB)",

ROUND(NVL(ABYTES /1024 /1024,0) ,2) "大小(MB)",

ROUND(NVL(TBYTES, 0) / 1024 / 1024 ,2) "占用量(MB)",

TO_CHAR(ROUND(NVL(TBYTES / ABYTES 100, 0) ,2),'99999')||'%' "占用率(MB)",

ROUND((NVL(ABYTES, 0) / 1024 / 1024 - NVL(TBYTES, 0) / 1024 / 1024) ,2) "空闲空间(MB)",

DSTATUS "状态",AAUTOEXTENSIBLE "是否自动扩展",DLOGGING "是否记录日志", ACOUNT "数据文件", DCONTENTS "类型",

DEXTENT_MANAGEMENT "区管理", DSEGMENT_SPACE_MANAGEMENT "段管理"

FROM SYSDBA_TABLESPACES D,

(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES, COUNT(FILE_ID) COUNT,

CASE WHEN SUM(DECODE(AUTOEXTENSIBLE,'YES',10000,'NO',1,AUTOEXTENSIBLE))>=10000 THEN 'YES' ELSE 'NO' END||CASE WHEN MOD(SUM(DECODE(AUTOEXTENSIBLE,'YES',10000,'NO',1,AUTOEXTENSIBLE)),10000)>0 THEN CHR(13)||CHR(38)||CHR(13)||'NO' ELSE '' END AS AUTOEXTENSIBLE

FROM DBA_TEMP_FILES GROUP BY TABLESPACE_NAME) A,

(SELECT SSTABLESPACE_NAME, SUM((SSUSED_BLOCKS TSBLOCKSIZE)) BYTES

FROM GV$SORT_SEGMENT SS, SYSTS$ TS

WHERE SSTABLESPACE_NAME = TSNAME

GROUP BY SSTABLESPACE_NAME) T

WHERE DTABLESPACE_NAME = ATABLESPACE_NAME(+) AND DTABLESPACE_NAME = TTABLESPACE_NAME(+)

AND DEXTENT_MANAGEMENT = 'LOCAL'

AND DCONTENTS = 'TEMPORARY'

--AND DTABLESPACE_NAME LIKE :2

ORDER BY 1 Asc,6 DESC;

ORACLE的数据类型 -- ORACLE的数据类型

常用的数据库字段类型如下:

字段类型 中文说明 限制条件 其它说明

CHAR 固定长度字符串 最大长度2000 bytes

VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749

NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes

NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes

DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 经过严格测试,无千虫问题

LONG 超长字符串 最大长度2G(231-1) 足够存储大部头著作

RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等

LONG RAW 可变长度的二进制数据 最大长度2G 同上

1、字符串前+u,如u"我是张三":

前缀u表示该字符串是unicode编码,在Python2中常被用在中文字符的字符串前,防止因为编码问题所导致的乱码,一般在文件开头标明编码方式采用utf8。在Python3中,所有的字符串默认都是unicode字符串。

2、字符串前+r,如r"\n\n\n\n\n":

表示一个正常的字符串,通常\n被用作换行,而+r后,即表示\n\n\n\n\n,说白了就是去掉反斜杠的转义机制,在普通字符串中,反斜线是转义符,代表一些特殊的内容,常用于特殊的字符,如换行符、正则表达式、文件路径。注意不能在原始字符串结尾输入反斜线,否则Python不知道这是一个字符还是换行符(字符串最后用\表示换行),会报错。

3、字符串前+b,如abc=b'Zhangsan':

b' ':表示这是一个bytes对象,用在Python3中,它默认的str是unicode类,Python2的str本身就是bytes类。

b" ":表示后面字符串是bytes类型。

前缀b表示该字符串是bytes类型,常用在网络编程,服务器和浏览器只认bytes类型的数据,如send函数的参数和recv的函数的返回值都是bytes类型。

4、字符串前+f:

Python36的新加特性,前缀f用来格式化字符串,可以看出f前缀可以更方便地格式化字符串,比format()方法的可读性更高,且使用较方便,在加上f前缀后,支持在大括号内,运行Python表达式,也可以用fr前缀用来表示原生字符串。

常用的数据库字段类型如下:

字段类型 中文说明 限制条件 其它说明

CHAR 固定长度字符串 最大长度2000 bytes

VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749

NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes

NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes

DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 经过严格测试,无千虫问题

LONG 超长字符串 最大长度2G(231-1) 足够存储大部头著作

RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等

LONG RAW 可变长度的二进制数据 最大长度2G 同上

BLOB 二进制数据 最大长度4G

CLOB 字符数据 最大长度4G

NCLOB 根据字符集而定的字符数据 最大长度4G

BFILE 存放在数据库外的二进制数据 最大长度4G

ROWID 数据表中记录的唯一行号 10 bytes 格式,为0或1

NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes

NUMBER(P,S) 数字类型 P为整数位,S为小数位

DECIMAL(P,S) 数字类型 P为整数位,S为小数位

INTEGER 整数类型 小的整数

FLOAT 浮点数类型 NUMBER(38),双精度

REAL 实数类型 NUMBER(63),精度更高

数据类型 参数 描述

char(n) n=1 to 2000字节 定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)

varchar2(n) n=1 to 4000字节 可变长的字符串,具体定义时指明最大长度n,这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。

如果数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调节字段长度,如果你的数据前后有空格,Oracle 8i会自动将其删去。VARCHAR2是最常用的数据类型。可做索引的最大长度3209。

number(m,n) m=1 to 38

n=-84 to 127 可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。

如:number(5,2),则这个字段的最大值是99,999,如果数值超出了位数限制就会被截取多余的位数。

如:number(5,2),但在一行数据中的这个字段输入575316,则真正保存到字段中的数值是57532。

如:number(3,0),输入575316,真正保存的数据是575。

date 无 从公元前4712年1月1日到公元4712年12月31日的所有合法日期,Oracle 8i其实在内部是按7个字节来保存日期数据,在定义中还包括小时、分、秒。

缺省格式为DD-MON-YY,如07-11月-00 表示2000年11月7日。

long 无 可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。long是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。

raw(n) n=1 to 2000 可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle 8i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。

raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。

long raw 无 可变长二进制数据,最大长度是2GB。Oracle 8i用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。

在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。

blob /clob /nclob 无 三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB。

LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。

可以执行读取、存储、写入等特殊 *** 作。

bfile 无 在数据库外部保存的大型二进制对象文件,最大长度是4GB。

这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。

Oracle 8i可以读取、查询BFILE,但是不能写入。

大小由 *** 作系统决定。

SELECT (UR (UPS DBS))/1024 AS "M"

FROM (SELECT value AS UR FROM v$parameter WHERE name = 'undo_retention'),

(SELECT undoblks/((end_time-begin_time)86400) AS UPS

FROM v$undostat

WHERE undoblks = (SELECT MAX(undoblks) FROM v$undostat)),

(SELECT block_size AS DBS

FROM dba_tablespaces

WHERE tablespace_name = (SELECT UPPER(value) FROM v$parameter WHERE name = 'undo_tablespace'));

什么是垃圾:当一个值身上没有人绑定任何变量名(该值的引用计数=0)时,该值就是一个垃圾,会将该值内存空间释放掉。

引用计数增加

age=18 //18的引用计数等于1

x=age //18的引用计数等于2

引用计数减少

age=19 //18的引用计数等于1

del x //解除值与变量名的绑定关系;18的引用计数变为0

1、 为何数据要分不同的类型?

数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示

2、数据类型

数字(整形,长整形,浮点型,复数)

字符串

字节串:在介绍字符编码时介绍字节bytes类型

列表

元组

字典

集合

3、按照以下几个点展开数据类型的学习

==========================基本使用============================

1、用途

2、定义方式

3、常用 *** 作+内置的方法

==========================该类型总结==========================

存一个值or存多个值

有序or无序

可变or不可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

1、整型int

作用:年纪,等级,身份z号,qq号等整型数字相关

定义:age=10 #本质age=int(10)

2、浮点型float

作用:薪资,身高,体重,体质参数等浮点数相关

salary=30003 #本质salary=float(30003)

类型转换

a=('123') //字符串类型

a=int('123') //字符串转成整型类型

a=float('123') //字符串转成浮点型

作用:记录多个值

定义方式:在[ ]内用逗号分隔开多个任意类型的值;原材料可以是字符串,列表,字典;可变类型

1、按索引存取值(正向存取+反向存取);可存也可以修改;对于赋值 *** 作必须是已存在的索引

l=['a','b','c','d','e']

print(l[0]) =a

print(l[-1]) =e

l[0]='A' //修改列表

print(l) =['A','b','c','d','e']

2、切片(顾头不顾尾,步长),步长与字符串一样;原列表不会修改

print(l[1:4]) =['b','c','d']

3、长度

print(len(l)) =5

4、成员运算in和not in

print('a' in l) =True

print('sss' not in l) =True

5、追加&插入

lappend(333) //append最后追加

print(l) =['a','b','c','d','e','333']

linsert(0,111) //第一个位置添加值

print(l) =['111','a','b','c','d','e']

6、删除remove ,有返回值;del也可删,但是没有返回值;pop 剪切一个值,返回剪切的值

lremove('a') //()内为值,不能为索引

print(l) =['b','c','d','e']

del l[0] //[ ] 内为索引

lpop(0) // () 内为索引,不指定索引默认时-1

res=lpop(0)

print(res) =a

7、循环

for item in l

print(item)

1、count 统计次数

print(lcount('a')) =1

2、extend 一次性往列表末尾追加多个值,一个参数:可以被 for 循环的列表

item=[1,2,3,4,5]

lextend(item)

print(l) =['a','b','c','d','e',1,2,3,4,5]

3、index 找索引,以找到的第一个值为准,不存在的值会报错,可以用成员运算判断查找的值是否存在,以避免报错;列表没有find

print(lindex('a')) =0

print(lindex('c',2,5)) =2 //指定查找范围,第二个开始,第五个结束

4、sort 排序,默认从小到大排序

l=[4,6,2,9,10,3,1]

lsort()

print(l) =[1, 2, 3, 4, 6, 9, 10]

lsort(reverse=True) //从大到小排序

print(l) =[10, 9, 6, 4, 3, 2, 1]

作用:就是一个不可变的列表(是可以当做字典的key的),主要是用来读

定义:在()内用逗号分隔开多个任意类型的元素

t=(1,2,3,('a','b'),['q','w','e'])

本质age=tuple(t=(1,2,3,('a','b'),['q','w','e']))

如果元组只有一个值,必须加一个逗号

t=('a',)

元组总结

1、存多个值

2、有序

3、不可变

1、按索引取值(正向取+反向取):只能取,不能添加、减少、修改

t=(1,2,3,('a','b'),['q','w','e'])

print(t[0]) =1

print(t[-1]) =['q','w','e']

2、切片(顾头不顾尾,步长),步长与字符串一致

print(t[1:4]) =(2, 3, ('a', 'b'))

3、长度

print(len(t)) =5

4、成员运算in和not in

print(1 in t) =True

5、循环

for item in t:

print(item)

t=(1,2,3,('a','b'),3,['q','w','e'])

作用:记录多个值,key对应值,key对value有描述性功能;取值速度快

定义:在{ } 内用逗号隔开多个元素,每个元素都是key:value的形式;key必须是不可变类型,value可以是任意类型

info={'name':'egon','age':18,'sex':'male'}

本质

info=dict(name='egon',age=18,sex='male')

info=dict([['name','egon'],('age',18)])

{}fromkeys(('name','age','sex'),None)

总结

1、存多个值

2、无序

3、可变

1、将值导入字典

2、按key存取值:可存可取

dic={'name': 'egon', 'age': '18', 'gender': 'male'}

print(dic['name']) =egon //当key不存在时会报错

print(dicget('name')) =egon

print(dicget('xxx')) =None //当key不存在时会返回一个None

dic['name']='Egon' //修改value

dic['hight']=18 //如果key不存在,就是一个加值的 *** 作

print(dic) ={'name': 'egon', 'age': '18', 'gender': 'male', 'hight': 18}

3、长度len,统计key:value的个数; 不能有重复的key,后面的key会覆盖前面的key

print(len(dic)) =3

4、成员运算in和not in,以字典的key为准

print('name' in dic) =True

print('dasda' not in dic) =True

5、删除

第一种:del dic['name']

第二种:res=dicpop('name') //根据key删除,有返回值,返回值为key对应的value值

第三种:res=dicpopitem() //随机删,返回值是(key:value),返回值格式是元组

6、键keys(),值values(),键值对items()

print(dickeys()) =dict_keys(['name', 'age', 'gender']) //取索引

print(dicvalues()) =dict_values(['egon', '18', 'male']) //取值

print(dicitems()) =dict_items([('name', 'egon'), ('age', '18'), ('gender', 'male')]) //取键值对

7、循环

for item in dic:

print(item) //输出的是key

for item in dicvalues():

print(item) //输出的是值

for item in dicitems():

print(ietm) //输出的是 (key:value) 的元组

1、update 新字典中已经存在的以新的为准,不存在的增加

dic={'name': 'egon', 'age': '18', 'gender': 'male'}

dicupdate({'age':19,'hight':180})

print(dic) ={'name': 'egon', 'age': 19, 'gender': 'male', 'hight': 180}

2、setdefault 加入一个键值对,如果key已存在,则保留字典里的原值,如果key不存在,则加入键值对;返回字典里key对应的value值

作用:关系运算,去重

定义方式:在{ }内用逗号分隔开多个元素,但是元素的特点是

1、每个元素必须是不可变类型(可hash,可作为字典的key)

2、没有重复的元素

3、无序

注意:集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值

类型转换

res=set('hello') //字符串转集合

rds=set([1,'a','b']) //列表转集合

print(res) ={'h', 'l', 'e', 'o'} //去重

print(rds) ={1, 'a', 'b'}

总结:

1、有多个值

2、无序

3、可变

pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}

linuxs={'wupeiqi','oldboy','gangdan'}

1、长度len

2、成员运算in和not in

3、合集

print(pythons | linuxs)

4、&交集

print(pythons & linuxs)

5、两个集合差集,以第一个集合为准

print(pythons - linuxs) //求只报名python的学生

print(linuxs - pythons) //求只报名linux的学生

6、对称差集;求没有报名两门课程的学生

第一种:res=(pythons - linuxs) | (linuxs - pythons)

第二种:res=pythons ^ linuxs

print(res)

7、== ,集合值相等即可,无需顺序一致

s1={1,2,3}

s2={3,2,1}

print(s1 == s2) =True

8、父集:>,>= ;子集:<,<=

s1={1,2,3}

s2={3,2,1,4,6}

print(s2 >= s1) =True

print(s1 <= s2) =True

介绍:计算机系统分为:计算机硬件, *** 作系统,应用程序三部分。

1、什么是文件?

文件是 *** 作系统为应用程序或者用户提供一种 *** 作硬盘的虚拟单位。

window系统默认为GBK编码

2、为什么要用文件?

文件对应的硬盘空间,如果需要考虑永久保存数据那必须使用文件

3、如何用文件?

(1)打开文件

f=open(r'D:\untitled1\atxt',mode='r',encoding='utf-8')

第一个小r,表示原生的字符串,\没有转义的意思,防止\a、\n转义

第二个小r,以读的模式打开,rb以二进制格式读,rt会把文本文件二进制解码成unicode格式存到内存,针对文本文件用rt模式;w为写 *** 作;

赋值给一个变量,变量指定该文件对象,文件对象占的是应用程序的资源

(2)读/写文件

(3)关闭文件

fclose() //向 *** 作系统发送指令,让 *** 作系统关闭打开的文件,回收 *** 作系统资源

1、控制文件读写 *** 作模式

r 只读模式,以该模式打开文件,当文件不存在时报错;

w 只写模式,如果该文件存在则覆盖,如果该文件不存在,创建新文件写入;文件打开不关闭的情况下,连续写入自动追加;

a 追加,如果该文件存在则文件结尾追加内容,如果该文件不存在,创建新文件写入;

w+ 读写,如果该文件存在则覆盖,如果该文件不存在,创建新文件写入

2、控制文件读写内容的模式(不能单独使用,必须与r、w、a连用)

t (默认) 读写只能是文本文件,都是字符串类型,会自动解码文本文件;必须指定encoding参数

b 对于非文本文件,我们只能使用b模式,linux可忽略;"b"表示以字节的方式 *** 作;以b方式打开时,读取到的内容是byte字节类型,写入时也需要提供字节类型,不能指定编码

为了避免打开文件后忘记关闭,可以通过管理上下文,即:

with open('log','r') as f:

3、文件的修改

fseek(3,0) //3指移动的字节数,0是模式

1、三种模式,以字节为单位;只有0模式既可以在t模式下用也可以在b模式下用,而1、2两种模式只能在b模式下用

0 (默认模式):永远参照文件开头往后数

1:参照指针当前所在位置

2:参照文件末尾,倒着数

注意:t 模式下的read(n) 是以字符为单位;意思为从哪个字符开始读

以上就是关于,在java中,数据库中存储的ip是varbinary类型,读出来不能正常显示,如何读出并正常显示全部的内容,包括:,在java中,数据库中存储的ip是varbinary类型,读出来不能正常显示,如何读出并正常显示、请问高手,我在往数据库中插入信息时遇到的问题、如何使用oracle数据库系统中的大对象数据类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/sjk/10173227.html

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

发表评论

登录后才能评论

评论列表(0条)

保存