JDBC与Oracle的碰撞
JDBC与Oracle的碰撞:
1、Oracle介绍:
1、手动启动服务(二种方式):
1、win+r services.msc 打开服务管理界面
OracleServiceORCL、OracleOraDb10g_home2TNSListener
2、右击计算机–>管理–>服务
机房操作
1、启动服务:实例(OracleServiceOrcl)、监听(…Listner)
2、因为系统会还原,所以每次需删除监听、本地net服务,然后再添加
(1)、Oracle-Oracle10g_home1->配置和移植工具->Net Configuration Assistant->
先删除再添加(监听程序配置、本地Net服务名配置)
(2)、添加本地Net服务名配置需设置:
服务名:ORCL
主机名: 127.0.0.1
其它都是默认就行
3、登录
机房默认:
scott
accp
ORCL
Normal
2、orale数据库真正存放数据的是数据文件(data files),Oracle表空间(tablespaces)实际上是一个逻辑的概念。
在一个房间里面可以存储很多箱子,箱子里面可以存储物品!
表空间可以看成是房间,箱子可看成是数据文件,物品可以看成表。用户指定表空间也就是你希望把属于这个用户的表放在那个房间(表)里面。
sys change_on_install
system manager
scott tiger
3、建表空间
–具有dba角色的管理员操作
create tablespace testSpace
datafile ‘D:\testSpace.dbf’
size 10m
autoextend on
next 2m maxsize 1024m
–建用户
create user feng identified by “123456”
default tablespace testSpace;
–授予权限
grant connect,resource to feng;
–建表
create table student
(
stuId number not null,
stuName nvarchar2(20),
stuHeight number(3,2),
stuAddress nvarchar2(30),
stuBorndate date
)
create table score
(
id number not null,
score number,
stuId number
)
create table ADMIN
(
ID NUMBER,
USERID nVARCHAR2(20),
USERPWD nVARCHAR2(21)
)
//存储整数或浮点类型使用number
//修改字段 右击表名–>Edit
//修改数据 右击表名–>Edit data
4、***sequence
是用来在多用户环境下产生唯一整数的数据库对象,用来产生顺序生成数字,这可用于自动生成主键值,并有协调多行或者多表的主键操作。没有sequence,顺充序的值只能靠编写程序来生成。
create sequence seq_student_stuId
start with 1
increment by 1
insert into student values(seq_student_stuId.nextval,‘峰哥’,1.88,‘湖南长沙’,sysdate)
–sysdate 系统当前日期
insert into student values(seq_student_stuId.nextval,‘峰哥’,1.88,‘湖南长沙’,to_date(‘1995-8-6’,‘yyyy-mm-dd’))
to_date(‘2015-6-8 22:10:20’,‘yyyy-mm-dd HH24:mi:ss’)
1)、sign()
当指定数值表达式的值为正、负或0时,分别返回1、-1、0。
select sign(stuid) from student;
select sign(first-second) from score
select sign(-11) from dual
2)、nvl函数
nvl(expr1,expr2) --如果expr1是null,则返回expr2,否则返回expr1.
3)、round(四舍五入)、trunc(没有四舍五入)保留二位小数
select round(3333.446,2) from dual;
select trunc(3333.446,2) from dual;
4)、case end、decode
select
case
when score<60 then ‘不及格’
when score>=60 and score<=80 then ‘良好’
else ‘优秀’
end,
decode(sign(score-60),-1,‘不及格’,(decode(sign(score-80),-1,‘良好’,‘优秀’)))
from score
case end、decode用法比较:
1.DECODE 是Oracle特有的;
2.CASE WHEN 是Oracle, SQL Server,MySQL 都可用;
3.DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断;CASE可用于=,>=,<,<=,<>,is null,is not null 等的判断;
4.DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活。
5)、伪列
查询第5条到第10条数据
select * from (select rownum rn,student.* from student) where rn>4 and rn<=10;
5、数据导入导出
1、用pl/sql导出、导入表
导出:Tools–>Export Tables–>选中路径并点击Export按钮
导入:Tools–>Import Tables–>选中导出的路径并点击Import按钮
2、用doc命令导出、导入数据库对象(表、***、存储过程等)
见文件夹
//安装Oracle注意事项
1、安装目录需要为空、不能有中文、空格
2、设置密码不能全是数字
//登录权限不够解决方案:
管理员登录进去–>User–>找到对应的用户–>Edit–>去掉Account Locked并设置密码
//笔记本装pl/sql一般没问题,如果登录不进去:
方式1、监听程序配置、本地Net服务名配置,先删除再新建
方式2、使用Oracle重新建一个数据库
NVARCHAR2和VARCHAR2的区别,从使用角度来看区别在于:NVARCHAR2在计算长度时和字符集相关的,例如数据库是中文字符集时以长度10为例,则
1、NVARCHAR2(10)是可以存进去10个汉字的,如果用来存英文也只能存10个字符。
2、而VARCHAR2(10)的话,则只能存进5个汉字,英文则可以存10个。
2、数据库操作(连接):
1、加数据库驱动
右击项目-->Build path-->Add External Archivs...
2、
Connection conn=null;
try {
//加载驱动类
Class.forName("oracle.jdbc.driver.OracleDriver");
//DriverManager是负责驱动管理器,它能建条河流
//那么建河要知道建河的规则,和这条河连到哪里去
//jdbc数据库协议,oracle单指oracle数据库协议,这样就知道开河的规则
//127.0.0.1是指数据库在哪里,1521哪个端口进去,huarui具体找那个数据库
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:huarui", "jiangyaping",
"123456");
System.out.println(conn);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}finally{
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
--添加约束
--1非空约束
alter table student
modify stuname not null
--2默认值
alter table student
modify stuaddress default '湖南长沙';
--3主键 PK_列名
alter table student
add constraint PK_stuid primary key(stuid);
--4检查约束 CK_列名
alter table student
add constraint CK_stuemail check(stuemail like '%@%');
--5外键 FK_列名
create table Scores
(
sid number,
Score number,
stuId number
);
alter table Scores
add constraint FK_stuId foreign key(stuId) references student(stuid)
--提交事务
insert into Scores values(1,80,1);
commit;
--事务保存点
savepoint p1;
delete from scores where sid=1;
savepoint p2;
delete from scores where sid=2;
rollback to p2;
--复制表(不复制约束)
create table student2
as
select * from student where 1=2;
--多行插入
insert into student2
select * from student
--修改表结构
alter table Scores
add(subjectId number);
alter table Scores
drop column subjectId;
alter table Scores
drop constraint FK_stuId;
--指定列
select sid from Scores; --0.046
--注意:指定列的效率高于查所有列
select sid from Scores; --0.078
--去掉重复项
select distinct * from Scores;
--伪列:并没实际存放在表中,只供查询
--rownum
--限制返回行数
select rownum,Scores.* from Scores where rownum<=5;
--连接操作符 ||
select stuname||stuage,stuid+stuage from student; --加号 仅用于数学运算
--排序 order by stuage desc
--多表连接
select * from student inner join scores on student.stuid=scores.stuid
--笛卡尔集
select * from student,scores where student.stuid=1
--多列子查询
select * from student where (stuname,stuage) in
(select stuname,stuage from student where stuname='阿峰');--如果只有一行in可以改为=
--分页查询
--查询学生信息,每5条一页
--第1页
select rownum,student.* from student where rownum<=5;
--第2页
select * from (select rownum rn,student.* from student) where rn>5 and rn<=10;
--操作符
select * from student where stuname not like 'S%';
select * from student where stuname not in('SMITH','SCOTT');
select * from student where stuname is not null;
--集合操作符
select deptno from emp
union all --有多少条记录就显示多少
select deptno from dept
select stuid from student
union --去掉重复的记录
select stuid from scores
select stuid from student
intersect
select stuid from scores
--减集
select stuid from student
minus
select stuid from scores
运行快捷方式:F8
--具有dba角色的管理员操作
--建表空间
create tablespace stuSpace
datafile 'D:\Oracle\stuSpace.dbf'
size 10M
autoextend on
next 2M maxsize 1024M;
--建用户
create user lisi identified by "123456" --只有数字要加“”
default tablespace stuSpace;
--授予权限
grant connect to lisi; -- 最基本的二种权限,例如登录就需要这个权限
grant resource to lisi; -- 最基本的二种权限
grant dba to lisi;
--从dba_sys_privs里可以查看权限
--select grantee,privilege from dba_sys_privs where grantee='RESOURCE' --注意一定要是大写的,oracle中的数据是区分大小写的
create table STUDENT
(
STUID NUMBER not null,
STUNAME VARCHAR2(20),
STUAGE NUMBER,
STUHEIGHT NUMBER(3,2),
STUEMAIL VARCHAR2(20),
STUADDRESS VARCHAR2(30),
STUBorndate date
)
1)、自动编号:每个表的自动增长列都要先写一个***。
学生表学号:
create sequence seq_student_stuid
start with 1
increment by 1
2)、增、删、改、查
增加:insert into student(stuid,stuname,stuage,stuheight,stuemail,stuaddress,STUBorndate)
values(seq_student_stuid.nextval,'阿峰',18,1.88,'[email protected]','湖南长沙',to_date(to_char
(sysdate,'yyyy-mm-dd HH24:mi:ss'),'yyyy-mm-dd HH24:mi:ss'));
//系统日期: select sysdate from dual;
//上面可以简化为 select to_date('2015-8-6','yyyy-mm-dd HH24:mi:ss') from dual;
//注意:在java中添加日期到数据库中类型为date的字段时,只需写to_date(?,'yyyy-mm-dd HH24:mi:ss')
//24小时制的转换方式
修改:update student set stuname=stuname||',您好' where stuid=1;
3)、表导入、导出(见文件夹)
上一篇: 不吐不快--90后程序员,加油!!
下一篇: 大年初三吃什么饭
推荐阅读
-
PowerDesigner 建立与数据库的连接以便生成数据库和从数据库生成到PD中(Oracle 10G版)
-
深入探讨:oracle中方案的概念以及方案与数据库的关系
-
Oracle Number型数值存储与转换的实现详解
-
oracle修改scott密码与解锁的方法详解
-
Oracle索引(B*tree与Bitmap)的学习总结
-
Oracle数据库的启动与关闭方法
-
Oracle ORA-22908(NULL表值的参考)异常分析与解决方法
-
Oracle常见错误代码的分析与解决
-
Hive与Oracle之间利用Sqoop进行数据的导入导出时遇到的问题及解决方法
-
Linux系统下安装jdbc与tomcat的图文教程