JAVAOracle.docx

上传人:b****5 文档编号:6488243 上传时间:2023-01-07 格式:DOCX 页数:37 大小:980.79KB
下载 相关 举报
JAVAOracle.docx_第1页
第1页 / 共37页
JAVAOracle.docx_第2页
第2页 / 共37页
JAVAOracle.docx_第3页
第3页 / 共37页
JAVAOracle.docx_第4页
第4页 / 共37页
JAVAOracle.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

JAVAOracle.docx

《JAVAOracle.docx》由会员分享,可在线阅读,更多相关《JAVAOracle.docx(37页珍藏版)》请在冰豆网上搜索。

JAVAOracle.docx

JAVAOracle

Oracle

1、介绍

v数据库基本概念

数据库:

存储数据的仓库,DataBaseDB?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

:

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

DBMSDatabasemanagersystem.

数据库管理员:

DBA

v关系型数据库

Oracle?

MySQL?

SQLServer?

DB2?

Access?

?

?

?

?

?

:

1--»11--»nn--»1n--»n

vOracle

?

?

?

?

?

?

:

1.?

?

?

?

?

?

?

?

?

?

?

?

?

Solaris?

Linux?

Unix?

2.?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

3.?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

:

8i:

Oracle?

?

?

?

?

?

?

9i:

10g:

?

?

?

?

gridcomputing?

11g:

2、安装

注意事项:

1.计算机名建议用英文字符,不要使用中文字符。

2.将防火墙关闭

3.路径不要使用中文字符。

建议不要安装到C盘。

4.先不要安装数据库实例。

5.安装数据库过程中会要求用户是否输入【sys、system管理数据库的用户】、scott用户的密码。

记住sys、system密码。

卸载:

因为如果Windows系统下已经安装过Oracle的话,如果想再次安装,原来的版本就会对新的安装产生这样那样的影响,不幸的是,出于保护原有数据的目的,Oracle并不能够简简单单的运行Uninstall就可以彻底删除,要彻底删除原有的Oracle系统,需要遵照下面的步骤进行:

(当然,如果你的机器上原来没有安装过Oracle,可以直接略过这一小节)

1.以administrator帐户登录

2.停止所有的oracle服务(开始-->控制面板-->管理工具-->服务)

3.运行oracle的universalinstaller(开始-->程序-->oracleinstallatioinproducts-->universalinstaller)删除所有的oracle产品

4.卸载程序执行完毕后,oracle并不能别干净的清除,这时候还需要手动的将文件清除。

5.修改注册表regedit,将HKEY_CLASS_ROOT-->删除所有以ORACLE或者ORAL开头的注册表项

6.将HKEY_LOCAL_MACHINE\SOFTWARE下ORACLE注册表项删除

7.将HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service下的以Oracle开头的注册表项

8.删除HKEY_CURRENT_USER\SOFTWARE下的oracle注册表项然后退出注册表

9.重启计算机 

10.删除c:

\ProgramFiles\Oracle目录

11.删除所有硬盘上ORACLE_BASE(一般为c:

\oracle)目录  

sysman:

如何查看服务名:

1.查看位置C:

\oracle\product\10.2.0\db_1\NETWORK\ADMIN

2.修改tnsnames.ora

EDU_SUSHE=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.10.210)(PORT=1521))

(CONNECT_DATA=

(SERVICE_NAME=orcl)

用户名:

hibernate密码123456

3.目录介绍

vFunction:

函数库

vProcedures:

过程

vTriggers:

触发器

vTables:

表【CRUD操作C:

CreateR:

ReadU:

UpdateD:

Delete】

vView:

视图,虚拟表【多个表之间的一个结果集】

vSequence:

序列

vUsers:

用户【测试用户:

scott密码:

tiger】

针对用户进行解锁操作:

alteruserSCOTTaccountlock;锁定账户

alteruserSCOTTaccountunlock;解锁账户

作业:

编写tnsnames.ora,实现连接172.16.10.210数据库服务器,访问boss表中数据,有多少行有多少列。

使用工具PLSQLDevelop。

3、开发工具

1.命令行

Cmd进入DOS界面------------>

sqlplusscott/tiger@edu访问外部数据库服务器

sqlplusscott/tiger访问本地数据库服务器

2.SQLPLUS

3.SQLDevelop

4、SQL语句介绍

SQL语句是关系数据库最基本的操作语言。

基本上不同的数据库厂商支持的SQL大部分都相似,但有些特殊的存在着不同【MySQL、Oracle分页】。

SQL:

结构化查询语言StructuredQueryLanguage

SQL语句包括数据查询语言select、数据操作语言DML(insert、update、delete)【作用级别是在表中行数据上】,事务控制语言(commit提交、rollback回滚),数据定义语言DDL(create创建、alter修改、drop删除)【作用级别在表、视图、用户等】,数据控制语言DCL(grant授权、revoke回收)。

DML:

DataManipulationLanguage【使用场所最多】

DDL:

Datadefinitionlanguage

DCL:

DataControlLanguage

v创建用户【默认使用scott】

createuser"120";创建用户

identifiedby"1"指定密码

grantconnectto"120";允许用户连接至数据库

grantresourceto"120";允许用户使用数据库中存储空间

grantunlimitedtablespaceto"120";允许用户不受表空间的限制

用户在Oracle中又叫一个方案Schema。

也就是用户下面可以有专门的表、视图、存储过程、函数等。

修改:

alteruser"120"identifiedby"1";修改密码

删除:

dropuser“120”

[扩展:

]

如何访问别的用户下的表:

select*fromhibernate.bosst

但是实现跨用户访问,有时无法访问到表中数据,处理方式--->提高访问权限:

grantselect,insertonBOSSto"120";赋予查询、插入Boss表的权限给用户120

v创建表

createtablestudent--创建表

idnumber(10)notnull,--ID

namevarchar2(50),--姓名

sexnumber

(1)--性别

添加列:

altertablestudentaddagenumber(3);

删除列:

altertablestudentdropcolumnage;

列重命名:

altertablestudentrenamecolumnagetoage1;

修改列的数据类型或者长度:

altertablestudentmodifyage1number(10);

删除表:

droptablestudent;

Truncatetablestudent;

数据类型:

包括:

字符、数值、时间日期、LOB、RAW

字符数据类型:

VARCHAR2()、char()、nvarchar()

当使用长度固定的字符数据类型时,采用char,其长度为1-2000个字节。

VARCHAR2和nvarchar支持可变长度。

其长度为1-4000个字节

数值类型:

number,可以存储整数、浮点数、实数,精度可以高达38位。

其格式number(p,s)p:

表示精度s:

表示小数点位数【s可以忽略】

日期类型:

date、timestamp

LOB:

大对象数据类型,可以存储高达4GB的非结构化数据。

包括CLOB(存储大量的字符数据),BLOB(存储较大的二进制对象,例如图像、视频等)。

RAW:

存储二进制数据。

5、数据操作语言

v插入

1.insertintostudent(id,name,sex,age1)values(1000,'姚明',1,35)

往student表中四个字段添加数据。

2.insertintostudentvalues(1000,'姚明',1,35)

不用定义往数据库中哪个字段填充数据,student表中任何字段都会插入新值

3.insertintostudent(id)values(1001)

对固定的某一列添加新值。

4.添加大量数据

insertintostudentselect*fromstudentt

注意:

PLSQL中要求选中某一段SQL语句然后选择执行,此时执行的就是选中的SQL语句。

v更新

1.更新全部的字段数据

updatestudentsetname='姚小明';

2.更新某一行的列的数据

updatestudentsetname='姚大明'whereid=1000;

3.更新某一行中多列数据

updatestudentsetname='姚大明',age1=80whereid=1000;

v删除

1.删除指定条件数据行【from可省略】

deletefromstudentwhereid=1000;

2.删除所有数据行

deletefromstudent

3.直接截断整个表数据,使用truncate

truncatetablestudent效率比delete高

6、数据查询语言

Select是用于检索数据库中表数据。

基本结构:

Select<*,column[alias]>from表名

其中*号表示匹配所有的列,alias给列指定别名。

v基本查询

1 检索所有的列

select*fromdept;

2 检索特定的列

selectename,job,salfromemp;

3 指定别名

SELECTEname“?

?

”,Job,SalFROMEmp;

SELECTEnameas?

?

Job,SalFROMEmp;

as?

?

?

SELECTEnameas?

?

t.job?

?

SalFROMEmpt;?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

4 检索日期列

selectt.ename,t.hiredatefromempt;--?

F6?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

:

?

?

?

?

?

?

selectt.ename,to_char(t.hiredate,'yyyy/mm/dd')?

?

fromempt;

to_char(?

?

?

?

?

?

?

?

?

?

5 取消重复行

?

?

?

?

?

:

distinct

selectdistinctt.mgr,t.deptnofromempt;

6 使用算数表达式

算术表达式有加减乘除,其中乘除优先级要高。

如果要执行加减运算,则采用括号进行处理。

selectt.ename"姓名",t.job"职位",t.sal*12"年薪"fromempt;

selectt.ename"姓名",t.job"职位",t.sal+m"月薪"fromempt;

7 处理null

null?

?

?

?

?

?

?

?

?

?

?

?

?

0.?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

publicclassEmp{

privateStringempNo;

privateStringename;

privateStringjob;

privateFloatsal;

将薪水字段设置为包装类类型,原因是因为如果没有对薪水字段设置值,那么添加到数据中的数据就是0.

}

Stringsql="insertintoemp(empno,ename,sal)values('"

+emp.getEmpNo()+"','"+emp.getEname()+"',"+emp.getSal()+")";

selectt.ename"姓名",t.job"职位",t.sal+m"月薪"fromempt;

?

?

?

?

?

?

?

?

null?

?

?

?

?

?

?

null?

select1+null*1fromdual;测试结果均为空

那么去处理空情况,需要使用函数

Ø使用函数nvl函数

nvl(exp1,exp2):

表示如果exp1为null,那么值返回exp2.如果exp1不为null,那么值返回exp1.

【注意:

SQL语句中不分大小写】

selectt.Ename"姓名",t.job"职位",t.sal,m,

t.sal+nvl(m,0)"月薪"fromempt;

Ø使用nvl2函数

Nvl2(exp1,exp2,exp3):

如果exp1为空,那么值采用exp3.如果exp1不为空,那么采用exp2对应的值。

selectt.Ename"姓名",t.job"职位",

nvl2(t.sal+m,t.sal+m,t.sal)"月薪"fromempt;

?

?

?

:

?

?

?

?

?

?

?

?

?

?

altertablesalemodifyNAMEdefault'姚明';

altertablesaleaddsexnumber

(1)default1notnull;--添加sex列默认值为1

altertablesaleaddtimesdatedefaultsysdatenotnull;--提供默认时间点

 

8 连接字符串

JAVA?

?

?

?

?

?

?

?

?

?

+,?

?

Oracle?

?

||?

?

?

?

?

?

?

?

?

select'姓名:

'||t.ename||'他的薪水为:

'||t.sal"介绍"fromempt;

?

?

?

?

?

?

?

:

concat('A','B')

错误情况:

1.没有足够的值情况

insertintosalevalues(2001069,2001064);错误

2.单引号、双引号情况

3.单词写错

4.修改date类型的值,文字与字符串格式不匹配问题

updatesaletset

t.times=to_date('2013-04-2811:

24:

51','yyyy-MM-ddhh:

mi:

ss')

wheret.id=2001069

 

vWhere条件过滤

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

where?

?

?

?

?

where?

?

?

?

?

?

?

?

?

?

?

?

?

?

and?

or?

?

not?

?

?

?

?

?

?

?

?

?

?

=

?

?

=或者<>

?

?

?

>=>

大于等于大于

<=<

小于等于小于

Between....And

在两者之间

In(,,,,)

?

?

?

?

?

like

匹配字符样式,常用模糊查询

isnull

测试null

Ø检索数字

SELECT*FROMEmptwheret.empno=7369;

Ø?

?

?

?

?

SELECT*FROMEmptwheret.ename='SMiTH2';

使用单引号进行标识。

注意:

SQL中不分大小写,传递进来的值分大小写。

函数:

处理大小写

selectupper('a')fromdual

selectlower('S')fromdual

Ø?

?

?

?

?

?

?

?

?

?

:

?

?

?

?

?

?

?

?

1982?

?

?

?

?

?

?

SELECT*FROMEmptwheret.hiredate>to_date('1982-01-01','yyyy-MM-dd')

SELECT*FROMEmptwhereto_char(t.hiredate,'yyyy-MM-dd')>'1982-01-01'

'yyyy-MM-ddhh24:

mi:

ss'指定24小时制

'yyyy-MM-ddhh:

mi:

ss'指定12小时制

ØWhere?

?

?

?

betweenand

Betweenand?

?

?

?

?

?

?

?

?

?

?

between?

and?

?

?

?

?

?

?

?

?

and?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

select*fromemptwheret.salbetween3000and5000

ØWhere?

?

?

?

like

Like?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

select*fromemptwheret.enamelike'%AM%'

模糊查询统配符有两种:

%和_

其中%号表示匹配0个或者多个字符。

_下划线表示匹配一个字符。

select*fromemptwheret.enamelike'_AM%'

但是在处理过程中,如果有字符刚好为通配符,那么如何处理?

使用关键字escape。

select*fromemptwheret.enamelike'%s_%'escape's'

表示escape指定的字符其后面的通配符当成普通字符使用。

ØWhere?

?

?

?

?

in?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

:

?

?

?

?

?

?

900?

?

3000?

?

?

?

?

?

select*fromemptwheret.salin(900,3000)

select*fromemptwheret.salnotin(900,3000)

ØWhere?

?

?

?

?

isnull

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

null,?

?

?

true,?

?

?

?

?

?

null,?

?

?

false?

select*fromemptwheremisnull

注意:

当与null进行比较时,不要使用等于或者不等于。

select*fromemptwheremisnotnull

?

?

:

1.查询薪金在800到1600之间的员工信息

2查询员工SMITH,ALLEN,JAMES的信息

3.查询员工编号为7369和7876的员工信息

4.查询姓名以S开头的员工信息

5.查询姓名的第二个字符为L的员工信息

6.查询姓名包含ME的员工信息

7.选择在部门30中员工的所有信息

8.列出职位为(MANAGER)的员工的编号,姓名

9.找出奖金高于工资的员工

10.找出每个员工奖金和工资的总和

ØWhere?

?

?

?

?

?

?

?

?

?

?

?

?

?

:

andornot

?

?

?

?

?

?

true,?

?

?

true------and

如果条件有一个为true,那么返回true--------or

如果条件为false,使用not转变为true-------not

优先级not最高,其次为and,再然后为or。

示例1:

查询部门编号为20,职位为经理的个人信息。

select*fromemptwheret.deptno=20andlower(t.job)='manager'

示例2:

查询工资高于2500,或者岗位为经理的个人信息。

select*fromemptwheret.sal>2500orlower(t.job)='manager'

?

?

?

true?

?

:

?

?

or

?

?

?

?

?

?

?

?

?

?

?

?

?

?

SQL?

?

?

SELECT*

FROMLoginusert

WHEREt.Username='admin'

ANDt.Password=''

OR'1'='1'

Ø?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

oracle?

?

?

orderby?

?

?

?

?

?

?

?

?

?

desc?

?

?

?

?

asc?

?

?

?

?

?

select*fromemptorderbyt.sal

select*fromemptorderbyt.saldesc

?

?

?

?

?

?

?

?

?

?

?

?

selectt.ename,nvl(t.sal+m,t.sal)薪水fromemptorderby薪水

?

?

?

?

?

?

?

?

?

?

selectt.ename,nvl(t.sal+m,t.sal)薪水fromemptorderby2

2表示薪水所在查询的列的位置。

使用多列排序。

示例:

按照工资升序,按照奖金降序排列。

select*fromemptorderbyt.salasc,mdesc;

注意优先级,先执行orderby前面的排序条件,执行完之后再去执行后面的条件排序。

?

?

:

1.找出部门10中的经理(MANAGER)和部门20中的普通员工(CLERK)

2.找出部门10中既不是经理也不是普通员工,而且工资大于等于2000的员工

3.找出有奖金的员工的不同工作

4.找出没有奖金或者奖金低于500的员工

5.显示雇员姓名,根据其服务年限,将最老的雇员排在最前面

6.查询工资高于800,或者岗位是manager的员工,并且姓名首字母为S开头的员工信息

7.查询岗位不是分析师(ANALYST)和经理(MANAGER)的所有员工

v数据分组

?

?

?

?

:

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

groupby?

?

?

?

?

?

?

?

?

?

groupby,?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

:

Max:

?

?

?

?

?

?

?

Min:

?

?

?

?

?

?

?

Avg:

?

?

?

?

?

?

?

Sum:

?

?

?

?

?

?

Count:

?

?

?

?

?

?

?

?

?

selectmax(t.sal)"?

?

?

",min(t.sal)"?

?

?

"fromEmpt

selectavg(t.sal)"?

?

?

"fromEmpt

selectsum(t.sal)"?

?

"fromEmpt

selectcount(*)"?

?

"fromEmpt?

?

?

?

?

?

selectcount(distinctt.sal)fromempt

⏹Groupby:

?

?

groupby?

?

?

?

?

?

?

?

?

?

?

?

?

?

:

?

?

?

?

?

?

?

?

?

?

?

?

SELECTt.Deptno,SUM(t.Sal)"月值",AVG(t.Sal)"平均值",MAX(t.Sal)"最高值",MIN(t.Sal)"最小值"FROMEmptGR

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1