oracle基础教程(第三天)Java操作数据库

来源:互联网 发布:cfca 网络身份认证平台 编辑:程序博客网 时间:2024/06/01 10:10
//使用jdbc_odbc桥连接方式
public class TestOra {
    public static void main(String[] args) {
        try {
            //1.加载驱动
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2.得到连接
            Connection conn = DriverManager.getConnection("jdbc:odbc:testSLQ", "scott", "root123");
            Statement stat = conn.createStatement();
            ResultSet rs = stat.executeQuery("select * from emp");
            while(rs.next()){
                System.out.println("用户名:"+rs.getString(2));
            }
            //关闭打开的资源
            rs.close();
            stat.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在oracle中操作数据-使用子查询插入数据
当使用values子句时,一次只能插入一行数据,当使用子查询插入数据时,一条insert语句可以插入大量的数据。当处理行迁移或者装载外部表的数据到数据库时,可以使用子查询来插入数据。
SQL>insert into kkk (myid,myname,mydept) select empno,ename,deptno from emp where deptno = 10;

在oracle中操作数据-使用子查询更新数
使用update语句更新数据时,既可以使用表达式或者数值直接修改数据,也可以使用子查询修改数据
希望员工scott的岗位、工资和补助与smith员工一样。
SQL>update emp set (job,sal,comm) = (select job,sal,comm from emp where ename = 'SMITH') where ename = 'SCOTT';

Oracle中的事务处理
什么是事务?
       事务是用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。dml语句就是数据操作语言:包括数据的增加、删除和修改。
       如:网上转账就是典型的要用事务来处理,用以保证数据的一致性。
       当执行事务操作时(dml语句),oracle会在被作用的表上加锁,防止其他用户改变表的结构。这里对我们用户来讲是非常重要的。事务和锁
提交事务
       执行commit语句可以提交事务,当执行了commit语句后,会确认事务的变化、结束事务、删除保存点、释放锁,当使用commit语句结束事务之后,其它会话将可以查看到当前事务变化后的新数据。
回退事务
       在介绍回退事务前,我们先介绍一下保存点(savepoint)的概念和作用。保存点是事务中的一点,用于取消部分事务,当结束事务时,会自动的删除该事务所定义的保存点。当执行rollback时,通过指定保存点可以回退到执行的点。
事务的几个重要操作
1)设置保存点   savepoint a
2)取消部分事务   rollback to a
3)取消全部事务   rollback
java程序中如何使用事务
在java操作数据库时,为了保证数据的一致性,比如转账操作(1)从一个账户减掉10$(2)在另一个账户上加入10$,我们看看如何使用事务。
public class TestTrans {
    public static void main(String[] args) {
        //事务案例

        Connection conn = null;
        try {
            //1.加载驱动
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //2.得到连接
            conn = DriverManager.getConnection("jdbc:odbc:testSLQ", "scott", "root123");
            //加入事务处理
            conn.setAutoCommit(false);

            Statement stat = conn.createStatement();
            //给scott的工资减100
            stat.executeUpdate("update emp set sal = sal-100 where ename='SCOTT'");

            int i = 7/0;

            //给smith的工资加100
            stat.executeUpdate("update emp set sal = sal+100 where ename='SMITH'");

            //提交
            conn.commit();
            //关闭资源
            stat.close();
            conn.close();
        } catch (Exception e) {
            //如果发生异常,回滚
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }

    }
}
只读事务
只读事务是指只允许执行查询的操作,而不允许执行任何其它dml操作的事务,使用只读事务可以确保用户只能取得某时间点的数据。假定机票代售点每天18点开始统计今天的销售情况,这时可以使用只读事务。在设置了只读事务后,尽管其它回话可能会提交新的事务,但是只读事务将不会取得最新数据的变化,从而可以保证取得特定时间点的数据信息。
设置只读事务
set transaction read only

sql函数的使用---字符函数
字符函数是oracle中最常用的函数,我们来看看有哪些字符函数:
1.lower(char):将字符串转化为小写的格式
2.upper(char):将字符串转化为大写的格式
3.length(char):返回字符串的长度
4.substr(char,m,n):取字符串的字串   m代表从第几位取,n代表取几个。
5.replace(char1,search_string,replace_string)
将所有员工的名字按小写的方式显示?
SQL> select lower(ename) from emp;
将所有员工的名字按大写的方式显示?
SQL> select upper(ename) from emp;
显示正好为5个字符的员工的姓名?
SQL> select * from emp where length(ename)=5;
显示所有员工姓名的前三个字符?
SQL> select substr(ename,1,3) from emp;
以首字母大写的方式显示所有员工的姓名?
SQL> select upper(substr(ename,1,1))||lower(substr(ename,2)) from emp;
以首字母小写的方式显示所有员工的姓名?
SQL> select lower(substr(ename,1,1))||upper(substr(ename,2)) from emp;
显示所有员工的姓名,用"我是A"替换所有"A"
SQL> select replace(ename,'A','我是A') from emp;
数学函数
数学函数的输入参数和返回值的数据类型都是数字类型的。数学函数包括cos,cosh,exp,ln,log,sin,sinh,sqrt,tan,tanh,acos,asin,atan,round我们讲最常用的:
round(n,[m])  该函数用于执行四舍五入,如果省掉m,则四舍五入到整数;如果m是正数,则四舍五入到小数点的m位后。如果m是负数,则四舍五入到小数点的m为前。
trunc(n,[m])  该函数用于截取数字。如果省掉m,就截去小数部分,如果m是正数就截取到小数点的m位后,如果m是负数,则截取到小数点的前m位。
mod(m,n)  该函数用于取模(取余)
floor(n)  返回小于或是等于n的最大整数
ceil(n)  返回大于或是等于n的最大整数
对数字的处理,在财务系统或银行系统中用的最多,不同的处理方法,对财务报表有不同的结果。
显示一个月为30天的所有员工的日工资数,忽略余数
SQL> select ename,sal,trunc(sal/30) day_sal from emp;
SQL> select ename,sal,floor(sal/30) day_sal from emp;
在做oracle测试的时候,可以使用dual表,是个虚拟表,一般用来做测试。

日期函数
日期函数用于处理date类型的数据
默认情况下日期格式是dd-mon-yy  即12-7月-78
(1)sysdate:该函数返回系统时间
(2)add_months(d,n):加月份的函数,n为加多少个月
(3)last_day(d):返回指定日期所在月份的最后一天
查找已经入职8个月多的员工?
SQL> select * from emp where sysdate > add_months(hiredate,8);
显示满10年服务年限的员工的姓名和受雇日期?
SQL> select * from emp where sysdate >= add_months(hiredate,120);
对于每个员工,显示其加入公司的天数?
SQL> select trunc(sysdate-hiredate) "入职天数",ename from emp;
找出各月倒数第三天受雇的所有员工?
SQL>  select hiredate,ename from emp where hiredate = last_day(hiredate)-2;

转换函数
用yyyy-mm-dd hh24:mi:ss格式显示入职时间?
to_char
SQL> select ename,hiredate,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp;
显示1980年入职的所有员工?
SQL> select * from emp where to_char(hiredate,'yyyy')=1980;
显示所有12月份入职的员工?
SQL> select * from emp where to_char(hiredate,'mm')=12;

系统函数
查询当前数据库名称
SQL> select sys_context('userenv','db_name') from dual;
查询当前数据库语言
SQL> select sys_context('userenv','language') from dual;
查询当前数据库用户
SQL> select sys_context('userenv','session_user') from dual;
0 0
原创粉丝点击