jdbc day01 火推 function函数 Oracle JDBC连接步骤

来源:互联网 发布:类似招联好期贷的软件 编辑:程序博客网 时间:2024/06/05 11:17
 当天视频
function 函数

函数就是Java中的方法 !

函数与存储过程的区别: 

    1.  函数的关键字是function ,存储过程的关键字procedure
    2.  存储过程没有返回值 , 函数可以通过return返回数据
    3.  调用的方式不同
            -   存储过程再调用时, 就是pl/sql的一部分
            -   函数在调用时, 必须组成表达式 才可以

声明函数语法格式: 

    create or replace function(参数列表) return 声明的返回值类型
    is 
    /*申明区*/

    begin
        return 值;
    end;
    /

查看函数结果
    desc 函数名;

删除函数
    drop function 函数名;
练习: 创建一个函数, 包含两个参数, 返回最大值 !

create or replace function mymax(var_a number,var_b number) return number
    is

    begin
        if var_a>var_b then
            return var_a;
        else
            return var_b;
        end if;
    end;
回顾之前调用函数的操作

select min(salary) from s_emp;


调用自己编写的函数

select mymax(100,200) from dual;

在PL/SQL中调用函数

set serveroutput on;
begin
    dbms_output.put_line(mymax(200,300));       
end;
/
查看函数结果

desc mymax;
练习: 

写一个函数, 传入两个数值, 返回其中的最大值, 并将两个参数的和 存储到第二个参数中, 不允许使用第三方变量:

create or replace function haha(var_x number,var_y in out number) return number

is
begin

    if var_x<var_y then
        var_y := var_x+var_y;
        return var_y-var_x;
    end if;
        var_y :=var_x+var_y;
        return var_x;       
end;
/
-----------------------

set serveroutput on;
declare
    var_max number;
    var_x number :=100;
    var_y number :=200;
begin
    var_max := haha(var_x,var_y);
    dbms_output.put_line('最大值为:'||var_max||',和为:'||var_y);
end;
包 package

概念: 把相关的函数, 过程, 类型 等等 放到一起的一个逻辑结构!
dbms_output : 系统输出包

    -   函数put_line(): 输出到控制台
dbms_random : 随机数包

    -   value(参数1,参数2)函数
        参数1. 随机数字产生的最小范围 (包含)
        参数2. 随机数字产生的最大范围 (不包含)
        返回值:number类型的浮点型随机数


-----

使用随机数包. 获取一个1-10000的整数值


--  因为随机数返回的是浮点型的数字 , 所以我们获取到随机数后,需要截取
select trunc(dbms_random.value(1,10000)) from dual;
dbms_job :定时任务包

有一个我们不怎么使用的包 , 与定时任务包容易混淆 : 

    dbms_lob: 读取和写入大文本和二进制的

------------------------------------------

函数: 

1.  submit(参数1,参数2,参数3,参数4) 提交定时任务给数据库管理系统
    -   参数1.job(out binary_integer): 提交定时任务时,自动生成的一个任务编号;
    -   参数2.what(varchar2):要调用的存储过程的名称 ,注意字符串使用单引号
    -   参数3.next_date(date):第一次执行时的时间
    -   参数4.interval(varchar2)调用的间隔时间
        -   这个字符串应传递date类型的字符串(未来时间) ,并且间隔时间的算法是参数4减去参数3

2.  run(任务编号 binary_integer):执行指定编号的定时任务
3.  remove(任务编号 binary_integer):把指定编号的定时任务从数据库管理系统中移除 !
定时任务练习

定义一个表格, 
在定时任务中, 每隔1分钟, 向这个表格插入一行数据!



步骤: 

1.  定义一个表格

    drop table person cascade constraints;
    create table person(
        id number constraint person_id_pk primary key,
        name varchar2(100),
        age number
    );

2.  定义一个存储过程, 存储过程中向person表格插入一行数据
    --  创建一个序列, 用来插入id值
        drop sequence person_id_seq;
        create sequence person_id_seq;
    --  序列.currval: 取出当前序列值


    create or replace procedure xperson
    is
    begin
        insert into person values(person_id_seq.nextval,'kaikai'||person_id_seq.currval,16);
    end;
    /       

3.  在匿名块中创建定时任务 , 并提交给数据库管理系统 , 并执行

    set serveroutput on;
    declare
        myjob binary_integer := 100;
    begin
        dbms_job.submit(myjob,'xperson();',sysdate,'sysdate+(1/(60*24))');
        dbms_output.put_line(myjob);
        --  执行
        dbms_job.run(myjob);
    end;
    /

-   删除定时任务
    begin
        dbms_job.remove(1);
    end;
    /
触发器 trigger

概念:  在进行DML操作时 , 我们可以对其今天触发器的添加, 
       添加完毕后, 当指定的dml操作发生时, 触发器会自动执行

创建触发器的语法格式: 

    create or replace trigger 自定义触发器名称 before|after insert|update|delete(选择相应的DML操作) on 表名 [for each row]

    declare

    begin
        在这里做触发时执行的代码
    end;
练习: 

    对于person表的插入, 进行触发

    create or replace trigger person_insert_trigger after insert on person

    declare

    begin
        dbms_output.put_line('您在向person插数据');
    end;
    /

    set serveroutput on;
    insert into person values(10001,'kaikai',18);
将语句级触发器 更改为 行级触发器

语句级触发器与行级触发器的区别: 

    语句级触发器, 是针对一条语句 触发一次 !
        -   语句级触发器, 只要执行语句 ,哪怕执行失败, 也会触发 ,且只触发一次!


    行级触发器,触发的次数是 数据库中记录的修改条数!
        -   行级触发器,执行的语句如果没有对数据库进行更改,则不会触发
        -   如果一条dml语句 , 影响了数据库中10条数据,则会触发10次



    create or replace trigger person_update_trigger after update on person for each row

    declare

    begin
        dbms_output.put_line('修改数据');
    end;
    /

    set serveroutput on;
    update person set age=28;
在触发器中 获取原数据与新数据

旧数据:old
新数据:new

:old 和 :new 可以看作一个对象, 直接使用.调用数据 即可获取值


DML的三种操作, 可获取的数据不同

insert: 只可获取新数据

update: 可以获取新数据和旧数据

delete: 只可获取旧数据
练习: 

 create or replace trigger person_update_trigger after update on person for each row

    declare

    begin
        dbms_output.put_line('您在修改person,原name:'||:old.name||',新name:'||:new.name);
    end;
    /

set serveroutput on;
    update person set name='dadoubikaikai';
JDBC
9-27,星期三 14:03:36

什么是JDBC

Java database conactivity
使用Java技术,  连接数据库, 对数据库进行操作的一套api

注意: JDBC中事务是默认自动提交的!
为什么学习数据库?

存储数据
    -   内存存储
    -   文件存储
JDBC规范由来

sum公司, 为了简化和统一Java语言对于数据库的操作 ,制订了一系列的接口, 由各大数据库厂商进行实现 !
jar文件

两种方式存在: 

1.  可执行文件, 在安装了jre的计算机上,可以双击运行


2.  class的容器, 存储了一些class , 可以在编写新的代码时,直接引入
引入JDBC的Jar文件 :

在oracle安装目录下, 寻找ojdbc6.jar文件,复制后执行如下步骤: 

在Eclipse中, 

1.  右击项目 创建文件夹(new-->folder), 命名lib
2.  将jar文件粘贴到lib文件夹中 
3.  右键jar文件选择build-path -- > add to build path
数据库连接地址:

本机ip地址: 
127.0.0.1
localhost

数据库的地址: 
格式: 主协议:子协议//主机地址:端口号/数据库的名称

    -   oracle数据库的连接地址:
        jdbc:oracle:thin:@localhost:1521/xe

    -   mysql数据库的连接地址:
        jdbc:mysql://localhost:3306/数据库名称
开启windows中的OracleXETNSListener

这个服务时oracle数据库 用来侦听1521端口号数据的 .

如果服务关闭, 则无法连接 .

    -   关闭的原因: 
        -   1.  防火墙未关闭
        -   2.  杀毒软件优化开机启动项
        -   3.  更改过计算机名称
        -   4.  手动关闭

    -   解决方案: 
        关闭防火墙 ,卸载杀毒软件,重装数据库!
JDBC连接步骤:

    //1.    加载数据库驱动 :oracle.jdbc.driver.OracleDriver
    Class.forName("oracle.jdbc.driver.OracleDriver");

    //2.    通过数据库驱动管理器(DriverManager类) 获取连接对象
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/xe", "system", "123456");

    //3.    通过连接对象, 获取SQL的执行环境
    Statement state = conn.createStatement();

    //4.    通过Statement执行SQL语句
    state.execute("insert into person values(20001,'kaikai',19)");

    //5.    释放资源
        //- 1.  关闭SQL执行环境
    state.close();
        //- 2.  关闭JDBC连接对象
    conn.close();
数据库连接中使用到的方法与含义

DriverManager类

获取数据库连接:
getConnection(url, user, password)方法:

-   参数1. 数据库的连接地址
-   参数2. 数据库的帐号
-   参数3. 数据库的密码
Connection类

创建SQL执行环境:
createStatement(): 用来执行SQL语句的 环境
Statement类

1.  execute(sql):
    执行一条SQL语句!
    参数: 要执行的SQL语句, String类型 ,可以用来执行所有的SQL语句

    return boolean类型, true表示是select语句

2.  executeUpdate(SQL):
    用来执行DML语句(INSERT|UPDATE|DELETE)
    参数: 要执行的DML语句, String类型

    return int类型 , 表示当前SQL语句 对数据库中的影响行数!


3.  executeQuery(SQL):
    用来执行SELECT语句
    return : ResultSet(结果集对象)
原创粉丝点击