总体大纲:
1.上节回顾
2.java程序如何操作oracle
3.如何在oracle中操作数据
4.oracle的事务处理
5.sql函数的使用
1.java程序操作oracle数据库
11.JDBC-ODBC桥连接操作oracle数据库
java连接oracle数据库
import java.sql.*
加载驱动
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//JDBC-ODBC只能本地连接,不能远程连接
//JDBC可以远程连接,通过制定Ip 和端口进行远程连接
得到连接
Connection ct = DriverManager.getConnection("jdbc:odbc:testsp","scott","tiger")
Statement sm = ct.createStatement();
Results ....
1.2 JDBC连接oracle数据库
1).加载驱动
class.forName("oracle.jdbc.driver.OracleDriver");
2).得到连接
Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myoracle1","scott","tiger");
3.)关闭打开的资源
rs.close();
sm.close()
ct.close();
分页显示前三条
int pageCount = 0;
int rowCount = 0;
int pageSize = 0;
分页显示显示前三条:
select * from (select a1.*,rownum rn from (select * from emp) a1 where rownum<=3) where rn >=1;
1.3 数据处理
oracle中操作数据,使用特定函数操作日期类型
to_date函数的使用来插入日期
to_date('1988-12-12','yyyy-mm-dd')
to_date('1988/12/12','yyyy/mm/dd')
使用子查询插入数据
create table hesy(myId number(4),myname varchar2(50),myDept number(5));
insert into hesy (myId,myname,mydept) select empno,ename,deptno from emp where deptno = 10;
使用子查询更新数据
使用update语句更新数据时,既可以使用表达式或者数值直接修改数据,也可以使用子查询修改数据
update emp set job=(select job from emp where ename='SMITH'),sal=(select sal from emp where ename='SMITH'),...;
或者
update emp set (job,sal,comm)=(select job,sal,comm from emp where ename='SMITH') where ename='SCOTT';
什么是事务
事务用于保证数据的一致性,它由一组相关的dml语句(增删改语句)组成,该组的dml语句要么全部成功,要么全部失败
事务和锁
提交事务:
savepoint a1;
savepoint a2;
rollback to a2;
rollback to a1;
设置保存点,并且可以回滚的前提是没有commit,一旦commit提交以后,就不能进行回滚了,即保存点是失效的
不提交,事务不会有变化的
rollback:取消所有事务
java程序中如何使用事务
ct.setAutoCommit(false);
update emp set sal = sal -100 where ename='scott'
update emp set sal = sal +100 where ename='SMITH'
ct.commit();
catch
ct.rollback();
只读事务:
只读事务是指只允许执行查询的操作,而不允许执行任何其它dml操作的事务,使用只读
事务可以
设置只读事务
set transaction read only;
sql函数的使用
(1)字符函数
oracle最常用的函数,由如下:
lower(char)
upper(char)
length(char)
substr(char,m,n) 取子串,从m开始,取三个长度
以首字母大写,其它小写显示所有姓名
select (upper(substr(ename,1,1))||lower(substr(ename,2,length(ename)-1))) as name from emp;
replace函数,字符替换,将A替换成我是老虎
select replace(ename,'A','我是老虎') from emp;
instr函数,找字符串位置
(2)数学函数
数学函数的输入参数
round:该函数用于四舍五入
trunc:截取数字,取整
mod:取模
floor:返回小于等于,向下取整
ceil:返回大于等于
round(sal,1)四舍五入保存一位小数
select trunc(comm,1),comm from emp where ename='shunping';//小数点后截取一位,只保留一位小数
trunc(comm) 取整数
其它数学函数:
abs
acos
asin
atan
cos
exp
log(m,n)
power(m,n):返回m的n次方
(3)日期函数
日期函数用于处理date类型的函数
默认情况下日期格式是dd-mon-yy 即12-7月-78
sysdate :返回系统时间;
select sysdate from dual;
add_months(d,n)增加月份
select * from emp where sysdate>add_months(hiredate,8);
last_day(d):返回指定日期所在月份的最后一天
计算员工入职天数
select floor(sysdate-hiredate) "入职天数" from emp;
找出各月倒数第三天受雇的所有员工
select hiredate,ename from emp where last_day(hiredate) = hiredate;
//select hiredate,last_day(hiredate) from emp;
(4)转换函数
用于将数据类型从一种类型转换为另外一种,在某些情况下,oracle server允许值得数据类型和实际的不一致,这时
oracle server会隐含的转化数据类型,例如'10' -> 10 1->'1'
to_cahr:转换字符串使用,
select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp;
工资前面加上RMB的使用方法:
select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss'),to_char(sal,'L99999.99') from emp;//L表示本地货币单位 99999.99表示工资格式是5位整数,小数点取 两位的个数
select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss'),to_char(sal,'$99,999.99') from emp;
显示1980年入职的所有员工
select ename to_char(hiredate,'yyyy') from emp where to_char(hiredate,'yyyy') = 1980;
显示12月份入职的员工
select ename to_cahr(hiredate,'mm') from emp to_cahr(hiredate,'mm') = 12;
to_date:字符串转换成date类型
sys_context:系统函数
terminal:当前会话客户所对应的终端的标识符
language:语言
db_name:当前数据库名称
select sys_content('userenv','db_name') from dual;
select sys_content('userenv','language') from dual;
select sys_content('userenv','session_user') from dual;
select sys_content('userenv','current_schema') from dual;//选择方案
用户和方案的关系:
用户:用户一旦创建,oracle就会为用户创建方案,方案名和用户名一致,是一样对应的
方案:方案中包含了各种各样的数据对象,表,视图,触发器,表空间,触发器,存储过程