当前位置:文档之家› 2010.08.09.韩顺平.玩转oralce.plsql

2010.08.09.韩顺平.玩转oralce.plsql

2010.08.09.韩顺平.玩转oralce.plsql
2010.08.09.韩顺平.玩转oralce.plsql

第一部分pl/sql初步介绍

1、期望目标

1)掌握oracle的pl/sql概念

2)掌握pl/sql编程技术(包括编写过程、函数、触发器…)

2、pl/sql的介绍-pl/sql是什么?

1)pl/sql(procedural language/sql)是oracle在标准的sql语言上的扩展。pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误,这样使得它的功能变得更加强大。

2)了解过程,函数,触发器

-过程、函数、触发器是pl/sql编写,相当于存储在oracle数据库中的对象

-过程、函数、触发器是在oracle中

-pl/sql是非常强大的数据库过程语言,使用pl/sql能够写变量,做判断;可以简化复杂度;减少网络的传销,增加程序的模块化编程,提高运行性能,使速度更加的快捷

-过程、函数可以在Java程序中调用

3、pl/sql的介绍-为什么学?

1)学习必要性

-提高应用程序的运行性能

-模块化的设计思想【分页的过程、订单的过程、转账的过程】

-减少网络传输量

-提高安全性

2)弊端

-移植性不好,例如从oracle数据库移植到DB2,则全部要重写

3)pl/sql的介绍-用什么编写pl/sql

-sqlplus开发工具

-pl/sql developer开发工具

4)案例

-编写一个存储过程,该过程可以向某表中添加记录

-- 1.创建一个简单的表

create table gdsc (id int,name varchar2(20),passwd varchar(20));

-- 2.创建过程

create or replace procedure sp_gdsc_01 is

begin

--执行部分

insert into gdsc values(1,'陈学敏','mendychen');

end;

-- replace:表示如果有sp_gdsc_01,就替换

-- 3.如何查看错误信息

show error;

-- 如何调用该过程

-- 1.exec 过程名(参数值1,参数值2...);

-- 2.call 过程名(参数值1,参数值2...);

第二部分基础

1、介绍

开发人员使用pl/sql编写应用模块时,不仅需要掌握sql语句的编写方法,还要掌握pl/sql 语句及语法规则。pl/sql编程可以使用变量和逻辑控制语句,从而可以编写非常有用的功能模块。比如:分页存储过程模块、订单处理存储过程模块、转账存储过程模块等。而且如果使用pl/sql编程,我们可以轻松的完成非常复杂的查询要求。

2、简单分类

|----------过程(存储过程)

|

|----------函数

块(编程)--------- |

|----------触发器

|

|----------包

3、编写规范

1)注释

-单行注释:--

-多行注释:/* ……*/

2)标识符号的命名规范

-当定义变量时,建议用v_作为前缀,如v_sal

-当定义常量时,将以用c_作为前缀,如c_rate

-当定义游标时,建议用_cursor作为后缀,如emp_cursor

-当定义例外时,建议用e_作为前缀,如e_error

4、pl/sql块介绍

1)介绍

块(block)是pl/sql的基本程序单元,编写pl/sql程序实际上就是编写pl/sql块。要完成相对简单的应用功能,可能只需要编写一个pl/sql块;但是,如果要想实现复杂的功能,可能需要在一个pl/sql块中嵌套其他的pl/sql块。

2)块结构示意图

-pl/sql块由三个部分构成:定义部分、执行部分、例外处理部分。如下所示:

declare

/* 定义部分:定义常量、变量、游标、例外、复杂数据类型,该部分是可选的*/

begin

/* 执行部分:要执行的pl/sql语句和sql语句,该部分是必须的*/

exception

/* 例外处理部分:处理运行的各种错误,该部分是可选的*/

end

/* 和java程序进行比较*/

3)pl/sql块的实例:实例1 - 只包含执行部分的pl/sql块

set serveroutput on--打开输出选项

begin

dbms_output.put_line('hello,world');

end;

相关说明:dbms_output是oracle所提供(类似java的开发包),该包包含一些过程,put_line就是dbms_output包的一个过程。

运行结果:

4)pl/sql块的实例:实例2 –包含定义部分和执行部分的pl/sql块

declare

v_ename varchar2(5); --定义字符串变量

begin

select ename into v_ename from emp where empno=&no;

dbms_output.put_line('雇员名:'||v_ename);

end;

相关说明:&,取地址符表示要接收从控制台输入的变量

5)pl/sql块的实例:实例3 –包含定义部分、执行部分和例外处理部分的pl/sql块为了避免pl/sql程序的运行错误,提高pl/sql的健壮性,应该对可能的错误进行处理,这个很有必要:

-比如在实例2中,如果输入了不存在的雇员号,应当做例外处理

-有时出现异常,希望用另外的逻辑处理

declare

--定义字符串变量

v_ename varchar2(5);

v_sal number(7,2);

begin

--执行部分

select ename,sal into v_ename,v_sal from emp where empno=&no;

dbms_output.put_line('雇员名:'||v_ename||' 工资:'||v_sal);

--异常处理

exception

when no_data_found then

dbms_output.put_line('You enter the error employee number!');

end;

相关说明:Oracle事先预定了一些例外,no_data_found就是找不到数据的例外

5、过程

过程用于执行特定的操作。当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out)。通过在过程中使用输入参数,可以将数据传递到执行部分;通过使用输出参数,可以将执行部分的数据传递到应用环境。在sqlplus中可以使用create procedure命令来建立过程。

实例如下:

1)请考虑编写一个过程,可以输入雇员名,新工资,然后可以根据修改雇员的工资

create procedure sp_pro3(spName varchar2,newSal number) is

begin

--执行部分,根据用户名去修改工资

update emp set sal=newSal where ename=spName;

end;

2)如何调用过程有两种方法:exec…call…

exec sp_pro3('SCOTT',4678);

3)如何在java程序中调用一个存储过程

import java.sql.*;

public class TestOraclePro {

public static void main(String[] args) {

try {

// 1.加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

// 2.得到连接

Connection ct = DriverManager.getConnection( "jdbc:oracle:thin:@192.168.68.130:1521:orcl", "scott","tiger");

// 3.创建CallableStatement

CallableStatement cs = ct.prepareCall("{call sp_pro3(?,?)}");

// 4.给?赋值

cs.setString(1, "SMITH");

cs.setInt(2, 10);

// 5.执行

cs.execute();

// 6.关闭资源

cs.close();

ct.close();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

5、函数

1)函数用于返回特定的数据,当建立函数时,在函数头部必须包含return字句,而在函数体内必须包含return语句返回的数据。我们可以使用create function来建立函数,实际

案例:

--函数案例

--输入雇员的姓名,返回该雇员的年薪

create function sp_fun2(spName varchar2) return number is yearSal

number(7,2);

begin

--执行部分

select sal*12+nvl(comm,0)*12into yearSal from emp where ename=spName;

return yearSal;

end;

2)在sqlplus中调用该函数

3)同样我们可以在java程序中调用该函数

select sp_fun2(‘SCOTT’) from emp;

6、包

包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。

1)我们可以使用create package命令来创建包,实例如下:

--创建包

--创建一个包sp_package

--声明该包有一个过程update_sal

--声明该包有一个函数annual_income

create package sp_package is

procedure update_sal(name varchar2,newSal number);

function annual_income(name varchar2) return number;

end;

2)包的规范只包含了过程和函数的说明,但是没有过程和函数的实现代码。包体用于实现包规范中的过程和函数。建立包体可以使用create package body命令:

--给包sp_package实现包体

create package body sp_package is

procedure update_sal(name varchar2,newSal number)is

begin

update emp set sal=newSal where ename=name;

end;

function annual_income(name varchar2) return number is annual_salary number;

begin

select sal*12+nvl(comm,0) into annual_salary from emp

where ename=name;

return annual_salary;

end;

end;

3)如何调用包的过程或是函数?当调用包的过程或是函数时,在过程和函数前需要带有包名,如果要访问其它方案的包,还需要在包名前加方案名。如案例:

7、触发器

1)触发器是指隐含的执行的存储过程。当定义触发器时,必须要指定触发的事件和触发的操作,常用的触发事件包括insert,update,select语句,而触发操作实际就是一个pl/sql 块。可以使用create trigger来建立触发器。

特别说明:触发器可维护数据库的安全和一致性。

3)什么是隐含执行?

一般我们不会主动调用它。当用户登陆的时候触发一件事情;或者当用户动一个表的时候,就可以修改另一张表,比如把一个外键删除了就把一个主键删除了,它可以连动触发。

第三部分定义并使用变量

1、介绍

在编写pl/sql程序时,可以定义变量和常量;在pl/sql程序中包括有(主要是前三种):

1)标量类型(scalar)

2)复合类型(composite)

3)参照类型(reference)

4)lob(large Object)

2、标量(scalar)-常用类型

1)在编写pl/sql块时,如果要使用变量,需在定义部分定义变量。pl/sql中定义变量和厂里的语法如下:

identifier:名称

constant:指定常量。需要指定它的初始值,且其值是不能改变的

datatype:数据类型

not null:指定变量值不能为null

:=给变量或是常量指定初始值,相当于java语言中的赋值运算符=

default:用于指定初始值

expr:指定初始值的pl/sql表达式,可是文本值、其他变量、函数等。

2)标量定义的案例

- 定义一个变长字符串

v_ename varchar2(10);

- 定义一个小数,范围-9999.99~9999.99

v_sal number(6,2);

- 定义一个小数并给一个初始值为5.4 :=是pl/sql的赋值号

v_sal number(6,2):=5.4;

- 定义一个日期类型的数据

v_hiredate date;

- 定义一个布尔变量,不能为空,初始值为false

v_valid boolean not null default false;

3)标量(scalar)- 使用标量

在定义好变量后,就可以使用这些变量。这里需要说明的是pl/sql块为变量赋值不同于其他的编程语言,需要在等号前加冒号(:=)

下面以输入员工号,显示雇员姓名、工资、个人所得税(税率为0.03)为例。说明变量的使用,看看如何编写:

declare

c_tax_rate number(3,2):=0.03;

--用户名

v_ename varchar2(5);

v_sal number(7,2);

v_tax_sal number(7,2);

begin

--执行

select ename,sal into v_ename,v_sal from emp where empno=&no;

--计算所得税

v_tax_sal:=v_sal*c_tax_rate;

--输出

dbms_output.put_line('姓名是:'||v_ename||' 工资:'||v_sal||' 交

税:'||v_tax_sal);

dbms_output.put_line('hello,world');

end;

4)标量(scalar)- 使用%type类型

对于上面的pl/sql块有一个问题:就是如果员工的姓名超过了5个字符的话,就会有错误,为了降低pl/sql程序的维护工作量,可以使用%type属性定义变量,这样它会按照数据

库列来确定你定义的变量的类型和长度。

使用格式:

举例如下:

--声明的变量的类型跟表emp中的ename、sal的类型一致

v_ename emp.ename%type;

v_sal emp.sal%type;

3、复合变量(composite)- 介绍

1)用于存放多个值的变量,主要包括这几种:

- pl/sql记录

- pl/sql表

- nested table(嵌套表)

- varray(变长数组)

2)复合类型-pl/sql记录

类似高级语言中的结构体,需要注意的是,当引用pl/sql记录成员时,必须要加记录变量作为前缀(记录变量.记录成员),如下:

--pl/sql纪录实例

declare

--定义一个pl/sql记录类型emp_record_type,类型包含三个数据:name,salary,title

type emp_record_type is record (name emp.ename%type,salary

emp.sal%type,title emp.job%type);

--定义了一个sp_record变量,这个变量的类型是emp_record_type

sp_record emp_record_type;

begin

select ename,sal,job into sp_record from emp where empno=7788;

dbms_output.put_line('员工名:'||sp_https://www.doczj.com/doc/6718504481.html,);

end;

3)复合类型-pl/sql表

相当于高级语言中的数组,但是需要注意的是在高级语言中数组的下标不能为负数,而pl/sql 是可以为负数的,并且表元素的下标没有限制,实例如下:

--pl/sql表实例

declare

--定义了一个pl/sql表类型 sp_table_type,该类型是用于存放emp.ename%type

--index by binary_integer表示下标是整数

type sp_table_type is table of emp.ename%type index by binary_integer;

--定义了一个sp_table变量,这个变量的类型是sp_table_type

sp_table sp_table_type;

begin

select ename into sp_table(0) from emp where empno=7788;

dbms_output.put_line('员工名:'||sp_table(0));

end;

说明:sp_table_type 是pl/sql表类型

emp.ename%type 指定了表的元素的类型和长度

sp_table为pl/sql表变量

sp_table(0) 则表示下标为0的元素

4、参照变量

1)介绍

参照变量是指用于存放数组指针的变量。通过使用参照变量,可以使得应用程序共享相同对象,从而降低占用的空间。在编写pl/sql程序时,可以使用游标变量(ref cursor)和对象类型变量(ref obj_type)两种参照变量类型

2)参照变量-ref cursor游标变量

使用游标时,当定义游标时不需要指定相应的select语句,但是当使用游标时(open)需要指定selelct语句,这样一个游标就与一个select语句结合了。实例如下:- 使用pl/sql编写一个块,可以输入部门号,并显示该部门所有员工姓名和他的工资- 在上题的基础上,如果某个员工的工资低于200元,就增加100元

declare

--定义一个游标类型

type sp_emp_cursor is ref cursor;

--定义一个游标变量

test_cursor sp_emp_cursor;

--定义变量

v_ename emp.ename%type;

v_sal emp.sal%type;

begin

--把test_cursor和一个select结合

open test_cursor for select ename,sal from emp where deptno=&no;

--循环取出

loop

fetch test_cursor into v_ename,v_sal;

--判断是否test_cursor为空

exit when test_cursor%notfound;

dbms_output.put_line('名字:'||v_ename||' 工资:'||v_sal);

end loop;

end;

第四部分pl/sql的进阶

1、期望目标

1)掌握pl/sql的高级用法(能编写分页过程模块,下订单过程模块…)

2)会处理oracle常见的例外

3)会编写oracle各种触发器

4)理解视图的概念并能灵活使用视图

2、pl/sql的进阶-控制结构

1)介绍

在任何计算机语言(C、java、Pascal)都有各种控制语句(条件语句,循环结构,顺序控制结构),在pl/sql中也存在这样的控制结构

2)条件分支语句

pl/sql中提供了三种条件分支语句:

if-then

if-then-else

if-then-elsif-else

2.1 简单的条件判断if-then

案例:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该雇员工资增加10%

create or replace procedure sp_pro6(spName varchar2) is

--定义

v_sal emp.sal%type;

begin

--执行

select sal into v_sal from emp where ename=spName;

--判断

if v_sal<2000then

update emp set sal=sal*1.1where ename=spName;

end if;

end;

--调用

exec sp_pro6('ALLEN');

2.2 二重条件分支if-then-else

案例:编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0,就在原来的基础上增加100,;如果补助为0,就把补助设为200

create or replace procedure sp_pro7(spName varchar2) is

--定义

v_comm https://www.doczj.com/doc/6718504481.html,m%type;

begin

--执行

select comm into v_comm from emp where ename=spName;

--判断

if v_comm<>0then

update emp set comm=comm+100where ename=spName;

else

update emp set comm=comm+200where ename=spName;

end if;

end;

2.3 多重条件分支if-then-elsif-else

案例:编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT,就给他的工资增加1000,如果该雇员的职位是MANAGER就给他的工资增加500,其他职位的雇员工资增加200

--if-then-elsif-else

create or replace procedure sp_pro8(spNo number) is

--定义

v_job emp.job%type;

begin

--执行

select job into v_job from emp where empno=spNo;

--判断

if v_job='PRESIDENT'then

update emp set sal=sal+1000where empno=spNo;

elsif v_job='MANAGER'then

update emp set sal=sal+500where empno=spNo;

else

update emp set sal=sal+200where empno=spNo;

end if;

end;

3、循环语句loop

是pl/sql中最简单的循环语句,这种循环语句以loop开头,以end loop结尾,这种循环至少会被执行一次;

案例:现有一张表users,表结构如下users(userID,userName),请编写一个过程,可输入用户名,并循环添加10个用户到users表中,用户编号从1开始增加。

--建表

create table users(userID number,userName varchar2(40));

--loop

create or replace procedure sp_pro9(spName varchar2) is

--定义

v_num number:=1;

begin

loop

insert into users values(v_num,spName);

--判断是否要退出循环

exit when v_num=10;

--自增

v_num:=v_num+1;

end loop;

end;

4、循环语句while循环

基本循环至少要执行循环体一次,而对于while循环来说,只有条件为true时,才会执行循环体语句,while循环以while…loop开始,以end loop结束;

案例:现有一张users表,请编写一个过程,可输入用户名,并循环添加10个用户到users 表中,用户编号从11号开始增加

create or replace procedure sp_pro10(spName varchar2) is

--定义

v_num number:=11;

begin

while v_num<=20loop

--执行

insert into users values(v_num,spName);

--自增

v_num:=v_num+1;

end loop;

end;

5、循环语句for循环

基本for循环的基本结构如下

begin

for i in reverse1..10 loop

insert into users values(i,'shunping');

end loop;

end;

我们可以看到控制变量i,在隐含中就在不停的增加

6、顺序控制语句goto、null

6.1 goto语句

goto语句用于跳转到特定标号去执行语句。注意由于使用goto语句会增加程序的复杂性,并使得应用程序可读性变差,所以在做一般应用开发时,建议大家不要使用goto语句。

基本语法如下:

label是已经定义好的标号名。

declare

i int :=1;

begin

dbms_output.put_line('输出i='||i);

if i=10then

goto end_loop;

end if;

i:=i+1;

end loop;

<>

dbms_output.put_line('循环结束');

end;

--打开输出语句的开关

SQL> set serveroutput on;

6.2 null语句

null语句不会执行任何操作,并且会直接将控制传递到下一条语句,使用null语句的主要好处是可以提高pl/sql的可读性

--null

declare

v_sal emp.sal%type;

v_ename emp.ename%type;

begin

select ename,sal into v_ename,v_sal from emp where empno=&no;

if v_sal<3000then

update emp set comm=sal*0.1 where ename=v_ename;

else

null;

end if;

end;

第五部分pl/sql的进阶-编写分页过程

1、介绍

分页是任何一个网站(bbs、网上商城、blog)都会使用到的技术,因此学习pl/sql编程开发就一定要掌握该技术

2、无返回值的存储过程

首先,掌握最简单的存储过程,无返回值的存储过程:

案例:现有一张表book,表结构book(bookId,bookName,publishHouse),请编写一个过程,可以向book表中添加书,需要通过java程序调用。

create table book (bookId number,bookName varchar2(50),publishHouse varchar2(50));

--编写存储过程

--in:表示该变量是存储过程的输入参数,默认则为in

--out:表示一个输出参数

create or replace procedure sp_pro11(spBookId in number,spBookName in varchar2,spPublishHouse in varchar2) is

begin

insert into book values(spBookId,spBookName,spPublishHouse);

end;

--在java中调用

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

//调用一个无返回值的过程

public class TestPro11 {

public static void main(String[] args) {

try {

// 1.加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

// 2.得到连接

Connection ct = DriverManager.getConnection(

"jdbc:oracle:thin:@192.168.68.130:1521:orcl", "scott","tiger");

// 3.创建CallableStatement

CallableStatement cs = ct.prepareCall("{call

sp_pro11(?,?,?)}");

// 4.给?赋值

cs.setInt(1, 1);

cs.setString(2, "JAVA Swing");

cs.setString(3, "Public");

// 5.执行

cs.execute();

// 6.关闭资源

cs.close();

ct.close();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

3、有返回值的存储过程(非列表)

案例:编写一个过程,可以输入雇员的编号,返回该雇员的姓名。

--有输入和输出的存储过程

create or replace procedure sp_pro12(spno in number,spName out varchar2)is begin

select ename into spName from emp where empno=spno;

end;

--在java中调用

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

//调用一个无返回值的过程

public class TestPro12 {

public static void main(String[] args) {

try {

// 1.加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

// 2.得到连接

Connection ct = DriverManager.getConnection(

"jdbc:oracle:thin:@192.168.68.130:1521:orcl", "scott","tiger");

// 看看如何得到有返回值的存储过程

// 3.创建CallableStatement

CallableStatement cs = ct.prepareCall("{call

sp_pro12(?,?)}");

// 4.给第1个?赋值

cs.setInt(1, 7788);

// 4.给第2个?赋值

cs.registerOutParameter(2,

oracle.jdbc.OracleTypes.VARCHAR);

// 5.执行

cs.execute();

// 取出返回值,要注意问号的顺序

String name = cs.getString(2);

System.out.println("7788的名字:" + name);

// 6.关闭资源

cs.close();

ct.close();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

4、有返回值的存储过程(列表[结果集])

案例:编写一个过程,输入部门号,返回该部门所有雇员信息。对该题分析如下:

由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来代替的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用package。所以要分为两部分;1)建一个包,如下:

create or replace package testpackage as

type test_cursor is ref cursor;

end testpackage;

2)建立存储过程,如下:

create or replace procedure sp_pro13(spNo in number,sp_cursor out testpackage.test_cursor) is

begin

open sp_cursor for select * from emp where deptno=spNo;

end;

3)在java中调用

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

//调用一个无返回值的过程

public class TestPro13 {

public static void main(String[] args) {

try {

// 1.加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

// 2.得到连接

Connection ct = DriverManager.getConnection(

"jdbc:oracle:thin:@192.168.68.130:1521:orcl", "scott","tiger");

// 3.创建CallableStatement

CallableStatement cs = ct.prepareCall("{call

sp_pro13(?,?)}");

// 4.给第1个?赋值

cs.setInt(1, 10);

// 4.给第2个?赋值

cs.registerOutParameter(2,

oracle.jdbc.OracleTypes.CURSOR);

// 5.执行

cs.execute();

// 得到结果集

ResultSet rs = (ResultSet) cs.getObject(2);

while (rs.next()) {

System.out.println(rs.getInt(1) + rs.getString(2));

}

// 6.关闭资源

cs.close();

ct.close();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

5、编写分页基础

要求:请编写一个存储过程,要求可以输入表名、每页显示记录数、当前页;返回总记录数,总页数,和返回的结果集,且返回的结果集按工资从低到高的顺序排序

--1.开发一个包

--使用:testpackage.test_cursor

--2.开始编写分页的过程

create or replace procedure fenye

(tableName in varchar2,

myPageSize in number,--页显示记录数

myPageNow in number,

myRowCount out number,--总记录数

myPageCount out number,--总页数

p_cursor out testpackage.test_cursor--返回的记录集

)is

--定义部分

--定义sql语句字符串

v_sql varchar2(1000);

--定义两个整数

v_begin number:=(myPageNow-1)*myPageSize+1;

v_end number:=myPageNow*myPageSize;

begin

--执行部分

v_sql:='select * from (select t1.*,rownum rn from (select * from '|| tableName ||' order by sal) t1 where rownum<='|| v_end ||') where rn>='||v_begin;

--把游标和sql关联

open p_cursor for v_sql;

--计算myRowCount、myPageCount

--组织一个sql

v_sql:='select count(*) from '|| tableName;

--执行sql,并把返回的值,赋给myRowCount

execute immediate v_sql into myRowCount;

--计算myPageCount

if mod(myRowCount,myPageSize)=0then

myPageCount:=myRowCount/myPageSize;

else

myPageCount:=myRowCount/myPageSize+1;

end if;

--关闭游标

--close p_cursor;

end;

--使用java测试

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

//调用一个无返回值的过程

public class TestProFenYe {

public static void main(String[] args) {

try {

// 1.加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

// 2.得到连接

Connection ct = DriverManager.getConnection(

"jdbc:oracle:thin:@192.168.68.130:1521:orcl",

"scott","tiger");

// 3.创建CallableStatement

CallableStatement cs = ct.prepareCall("{call

fenye(?,?,?,?,?,?)}");

// 4.给第1个?赋值

cs.setString(1, "emp");

cs.setInt(2, 5);

cs.setInt(3, 2);

// 注册记录数

cs.registerOutParameter(4,

oracle.jdbc.OracleTypes.INTEGER);

// 注册总页数

cs.registerOutParameter(5,

oracle.jdbc.OracleTypes.INTEGER);

// 注册返回的结果集

cs.registerOutParameter(6,

oracle.jdbc.OracleTypes.CURSOR);

// 5.执行

cs.execute();

// 取出总记录数

// getInt(4)中的4,是由该参数的位置决定的

int rowNum = cs.getInt(4);

int pageCount = cs.getInt(5);

System.out.println("rowNum=" + rowNum);

System.out.println("pageCount=" + pageCount);

ResultSet rs = (ResultSet) cs.getObject(6);

while (rs.next()) {

System.out.println("编号:" + rs.getInt(1) + " 姓名:"

+ rs.getString(2) + "\t薪水" + rs.getFloat(6));

}

// 6.关闭资源

cs.close();

ct.close();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

免费资源

免费资源 由于公众号限制,不准许插入外来链接,所以只能麻烦大家手动的复制粘贴了(ps 电脑上打开此链接,操作更方便)。此页面已不在维护,最新更新的免费资源会通过微信公众号发布并同步在菜鸟要飞网站 (https://www.doczj.com/doc/6718504481.html,)。请大家及时关注本号信息。小编只能帮到这了!!119、Python基础教程视频集合2 链接:https://www.doczj.com/doc/6718504481.html,/s/1mgYA5iK 密码:密码: icnh 118、黑客技术- 黑盾网安VIP 网站渗透基础类学习链接:https://www.doczj.com/doc/6718504481.html,/s/1hqfIfTa 117、黑客技术- 风云网络信息安全渗透测试课程链接: https://www.doczj.com/doc/6718504481.html,/s/1kTq1wV1 116、黑客技术- 半斤八两逆向培训课程(27课全)part2 链接: https://www.doczj.com/doc/6718504481.html,/s/1pJDZLNl 115、黑客技术- 半斤八两逆向培训课程(27课全)part1 链接: https://www.doczj.com/doc/6718504481.html,/s/1dm60A 114、黑客技术- 黑盾网安VIP 网站渗透基础类学习链接: https://www.doczj.com/doc/6718504481.html,/s/1mg8Gjzy 113、黑客技术- 饭客黑客之免杀VIP教程链接: https://www.doczj.com/doc/6718504481.html,/s/1pJDtNPT 112、黑客技术-Show me Why 超强脱壳教程链接:

https://www.doczj.com/doc/6718504481.html,/s/1jGxoV8E 111、黑客技术-RFire 系列免杀教程链接:https://www.doczj.com/doc/6718504481.html,/s/1i35y6NV 110、黑客技术-burpsuite 系列视频教程链接: https://www.doczj.com/doc/6718504481.html,/s/1o6Olj9g 109、黑客技术-365免杀学习基地VIP源码免杀教程链接: https://www.doczj.com/doc/6718504481.html,/s/1jG8Ksjc 108、数据结构与算法,算法导论,微积分,数学组合链接: https://www.doczj.com/doc/6718504481.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207452636&idx=1&sn=585b3a86d9cc976c66341fe89e86 91f8#rd 102、python就业视频教程链接: https://www.doczj.com/doc/6718504481.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207219220&idx=2&sn=657182abd8f6b3fd98b13609a79af 493#rd 100、HTML5 优质视频教程集锦链接:https://www.doczj.com/doc/6718504481.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207168402&idx=1&sn=4ff0c63af6d0d4df3abc7a88cdf43c a1#rd 98、微信公众平台开发教程链接: https://www.doczj.com/doc/6718504481.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207067923&idx=1&sn=de3d25f201c7b75ab01805208ef8c 265#rd 97、Android5.0新特性链接: https://www.doczj.com/doc/6718504481.html,/s?__biz=MzA3ODg3OTk4OA==∣= 207035206&idx=1&sn=7c442b97a2aa6b1d140718b31e15 1e76#rd 94、html5技术课程(38课)链接:

(Oracle数据库管理)玩转实战教程学习笔记最全版

(O管理)玩转实战教程(韩顺平)学习笔记

韩顺平—玩转oracle视频教程笔记 一:Oracle认证,与其它数据库比较,安装 oracle的卸载 1.停止所有与ORACLE相关的服务。 2. 使用OUI(Oracle Universal Installer)卸载Oracle软件。 “开始”->“程序”->“Oracle-OraDb110g_home1|Oracle installation product|Universal installer. 3.删除注册表内容。运行regedit命令,删除下面内容:HKEY_LOCAL_MACHINE|SOFTWARE|ORACLE注册表键,删除此键。 HKEY_LOCAL_MACHINE|SYSTEM|CurrentControlSet|Services,删除Services键下所有以oracle为首的键。 HKEY_LOCAL_MACHINE|SYSTEM|CurrentControlSet|Services|Eventlog|Application,删除此键下所有以oracle为首的键。 HKEY_CLASSES_ROOT,删除此键下所有以Ora,Oracle,Orcl,EnumOra 为前缀的键。 HKEY_CURRENT_USER|Software| Microsoft|Windows|CurrentVersion|Explorer|MenuOrder|Start Menu|Programs,删除此键下所有以oracle为首的键。 HKEY_LOCAL_MACHINE|SOFTWARE|ODBC|ODBCINST.INI注册表键,删除了

JavaEE学习顺序

JavaEE学习顺序第一阶段:java基础 技术: 1.java语法 2.面向对象 3.常用的api 4.界面编程 5.多线程 6.文件io 7.java网络编程 视频: 张孝祥或者马士兵java视频 书籍: 《java2核心技术一二卷》 《java编程思想》研读,精读 《java模式》 第二阶段:数据库 技术: 1.oracle——主要的 2.mysql 3.sql server 视频:

韩顺平oracle视频 书籍:Oracle使用教程 深入浅出Oracle 第三阶段:web开发 技术: 1.html 2.css 3.javascript 视频: 张孝祥JavaScript视频 书籍: 张孝祥配套书籍《JavaScript网页开发》 别具光芒 孙鑫《HTML语言速成》 第四阶段:JavaEE中级 技术: 1.servet 2.jsp 3.mvc 服务器:tomcat、jboss、weblogic、websphere 视频: 韩顺平servlet—jsp视频 书籍:

oreilly公司《jsp设计》《java servlet编程》 第五阶段:JavaEE高级 技术 1.struts 2.hibernate 3.spring 视频: 美河图书《Servlet与JSP核心编程》 张小静Struts视频 孙卫琴《精通Struts基于MVC的Java.Web设计与开发》 李兴华Hibernate视频 孙卫琴《精通Java对象持久化技术详解》 第六阶段:其他流行技术 技术: Xml ajax(jquery,dw) Junit ant Ejb Enterprise JavaBeans技术2.0 Java消息服务(JMS)1.0 Java命名目录接口(JNDI)1.2 Java事务API(JTA) 1.0 JavaMail API 1.2 JavaBeans激活架构(JAF)1.0 J2EE连接器体系结构(JCA)1.0

韩顺平2011玩转oracle10g视频教学课堂笔记(完整版)

顺平j2ee系列教程--玩转oracle10g学习笔记 引言: 数据保存问题? 可使用文件保存和数据库保存。 使用文件保存数据存在几个缺点: 1、文本的安全性问题; 2、文件不利于查询和对数据的管理; 3、文件不利于存放海量数据; 4、文件在程序中控制不方便。 为解决数据保存问题,专家们设计出更加利于管理数据的东东--数据库(本质就是一个软件),它能更有效的管理数据。数据库是衡量一个程序员水平的重要指标。 数据库 1、数据库的本质就是一款软件,这个软件专门用于管理和维护数据; 2、数据存放在数据库中。 数据库服务器、数据库和表的关系 所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每个应用创建一个数据库。 为了保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。 数据库服务器、数据库和表的关系如图所示:

为什么选择oracle--性能优越 概述:目前主流数据库包括 微软: sql server和access 瑞典MySql: AB公司mysql ibm公司: db2(处理海量) 美国Sybase公司: Sybase ibm公司: informix 美国oracle公司: oracle 做项目时应当如何选择数据库? 1、标的(项目预算); 2、功能的要求; 3、并发数(多少人用); 4、安全、稳定性。 5、操作系统(unix[solaris,freeBSD,aix,hp unix]/linux/window) oracle数据库的认证 oca(oracle certified associate)初级认证 ocp(oracle certified professional)中级认证 ocm(oracle certified master)高级认证 oracle10g安装步骤: 1、安装文件 2、把10201_database_win32.zip文件copy到没有中文的路径下 3、检查服务选项,确定本机没有安装过oracle数据库,如果有则卸载 4、将压缩包解压后,双击setup.exe文件进行安装。 说明:建议大家自己建立一个文件目录,比如d:/hsporacle/oracle,然后把数据库安装到

玩转oracle-plsql定义并使用变量

I 、介绍:在编写pl/sql 程序时候,可以定义变量和常量,在pl/sql 中包括有: 标量类型( scalar ) 复合类型( composite ) 参照类型( reference ) lob ( large object ); 在编写 pl/sql 的时候,如果要使用变量,需要在定义部分定义变量; pl/sql 中定义变量和常量的语法如下: identifier [constant] datatype [ not null ] identifier : 名称; constant : 指定常量,需要指定他的初始值,而且他的值是不能够改变的; datatype :数据类型; not null ;指定变量不能为 null ; := 给变量或是常量指定初始值; default :用于指定初始值; expr :指定初始值的 pl/sql 表达式,可以是文本、其他变量、函数等; ① 定义一个变长字符串: v_ename varchar2 ( 20); ② 定义一个数: v_sal number (6,3 ); ③ 定义一个数并给定初始值: v _sal number (5,3 ):=5.4 ④ 定义一个日期类型的数据: v _hitedate date ; ⑤ 定义一个 bool 变量,不能为 null ,初始值为 false ; v_valid boolean not null default false ; ㈡、标量:使用标量 在定义好变量后就可以使用这些边玲了,这里需要说明的是 pl/sql 块为变量赋 值不同于其他编程语言,需要使用 := 符号; SQL> -- 下面以输入员工号,显示员工姓名等信息; SQL> declare 2 c_tax_rate number(3,2):=0.03; 3 -- 用户名; 4 v_name varchar2(5); 5 v_sal number(6,2); 6 v_tax_sal number(6,2); 7 begin 8 -- 执行 9 10 select ename ,sal into v_name , v_sal from emp where empno=&no; 11 -- 计算所得税‘ 标量: scalar )常用的类型: [:=|default expt]

韩顺平.2011最新版.玩转oracle视频教程(笔记)

韩顺平—玩转ora cle视频教程笔记一:Oracle认证,与其它数据库比较,安装

Oracle安装会自动的生成sys用户和system用户: (1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install (2)system用户是管理操作员,权限也很大。具有sysoper角色,没有create database的权限,默认的密码是manager (3)一般讲,对数据库维护,使用system用户登录就可以拉 也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。 二: Oracle的基本使用--基本命令 sql*plus的常用命令 连接命令 1.conn[ect] 用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper 2.disc[onnect] 说明: 该命令用来断开与当前数据库的连接 3.psssw[ord] 说明: 该命令用于修改用户的密码,如果要想修改其它用户的密码,需要用 sys/system登录。 4.show user 说明: 显示当前用户名 5.exit 说明: 该命令会断开与数据库的连接,同时会退出sql*plus 文件操作命令 1.start和@ 说明: 运行sql脚本 案例: sql>@ d:\a.sql或是sql>start d:\a.sql 2.edit 说明: 该命令可以编辑指定的sql脚本 案例: sql>edit d:\a.sql,这样会把d:\a.sql这个文件打开 3.spool 说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去。 案例: sql>spool d:\b.sql 并输入 sql>spool off 交互式命令 1.& 说明:可以替代变量,而该变量在执行时,需要用户输入。 select * from emp where job='&job'; 2.edit 说明:该命令可以编辑指定的sql脚本 案例:SQL>edit d:\a.sql

SQLServer2000笔记

SQLServer2000笔记(韩顺平主讲) 第一课 理论、概念、安装等略过 数字类型的数据类型的长度不是指字符个数,而是所占字节数 字符类型的数据类型的长度是指字符个数 GRANT:赋权限REVOKE:解除权限COMMIT:提交ROLLBACK:回滚

不区分大小写 select语句 --1.查询工资低于10000的同志 select * from hero where sal<10000;

--2.把工资低于10000的人的工资提高10%(update) --语法update 表名set 字段名1=?,字段名2=? where 条件 update hero set sal=sal*1.1 where sal<10000; --3.请删除性别为女的同志 delete from hero where sex='女' 小结: 增(insert)、删(delete)、改(update)、查(select) (_下划线和汉字也可以开头)

既然varchar如此智能为什么不抛弃char? 什么时候用char?确切知道所用字段的长度,譬如电话号码、身份证号等这种定长的。为什么要char? char查询时全字匹配,速度比varchar(一个一个比较)快! bit只存0和1(二进制) 为什么小数不建议用float ?用float存小数会存进去很奇怪的小数

如果非要用float,必须指定小数位数(范围1到53),否则极易产生很奇怪的数字, --推荐的小数保存类型numeric (共几位,其中小数占几位,如果不指定位数则自动表示整数) ,比如要求存放个人工资,单位元(20,2)

韩顺平老师oracle视频教程听课笔记

韩顺平老师 oracle教程笔记 1.Oracle认证,与其它数据库比较,安装 Oracle安装会自动的生成sys用户和system用户: (1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install (2)system用户是管理操作员,权限也很大。具有sysoper角色,没有create database的权限,默认的密码是manager (3)一般讲,对数据库维护,使用system用户登录就可以拉 也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。 2.Oracle的基本使用--基本命令 sql*plus的常用命令 连接命令 1.conn[ect] 用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper 2.disc[onnect] 说明: 该命令用来断开与当前数据库的连接 3.psssw[ord] 说明: 该命令用于修改用户的密码,如果要想修改其它用户的密码,需要用sys/system登录。 4.show user 说明: 显示当前用户名 5.exit 说明: 该命令会断开与数据库的连接,同时会退出sql*plus 文件操作命令 1.start和@ 说明: 运行sql脚本 案例: sql>@ d:\a.sql或是sql>start d:\a.sql 2.edit 说明: 该命令可以编辑指定的sql脚本 案例: sql>edit d:\a.sql,这样会把d:\a.sql这个文件打开 3.spool 说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去。 案例: sql>spool d:\b.sql 并输入 sql>spool off 交互式命令 1.& 说明:可以替代变量,而该变量在执行时,需要用户输入。 select * from emp where job='&job'; 2.edit 说明:该命令可以编辑指定的sql脚本 案例:SQL>edit d:\a.sql 3.spool 说明:该命令可以将sql*plus屏幕上的内容输出到指定文件中去。 spool d:\b.sql 并输入 spool off 显示和设置环境变量

2010.08.09.韩顺平.玩转oralce.plsql

第一部分pl/sql初步介绍 1、期望目标 1)掌握oracle的pl/sql概念 2)掌握pl/sql编程技术(包括编写过程、函数、触发器…) 2、pl/sql的介绍-pl/sql是什么? 1)pl/sql(procedural language/sql)是oracle在标准的sql语言上的扩展。pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误,这样使得它的功能变得更加强大。 2)了解过程,函数,触发器 -过程、函数、触发器是pl/sql编写,相当于存储在oracle数据库中的对象 -过程、函数、触发器是在oracle中 -pl/sql是非常强大的数据库过程语言,使用pl/sql能够写变量,做判断;可以简化复杂度;减少网络的传销,增加程序的模块化编程,提高运行性能,使速度更加的快捷 -过程、函数可以在Java程序中调用 3、pl/sql的介绍-为什么学? 1)学习必要性 -提高应用程序的运行性能 -模块化的设计思想【分页的过程、订单的过程、转账的过程】 -减少网络传输量 -提高安全性 2)弊端 -移植性不好,例如从oracle数据库移植到DB2,则全部要重写 3)pl/sql的介绍-用什么编写pl/sql -sqlplus开发工具 -pl/sql developer开发工具 4)案例 -编写一个存储过程,该过程可以向某表中添加记录 -- 1.创建一个简单的表 create table gdsc (id int,name varchar2(20),passwd varchar(20));

-- 2.创建过程 create or replace procedure sp_gdsc_01 is begin --执行部分 insert into gdsc values(1,'陈学敏','mendychen'); end; -- replace:表示如果有sp_gdsc_01,就替换 -- 3.如何查看错误信息 show error; -- 如何调用该过程 -- 1.exec 过程名(参数值1,参数值2...); -- 2.call 过程名(参数值1,参数值2...); 第二部分基础 1、介绍 开发人员使用pl/sql编写应用模块时,不仅需要掌握sql语句的编写方法,还要掌握pl/sql 语句及语法规则。pl/sql编程可以使用变量和逻辑控制语句,从而可以编写非常有用的功能模块。比如:分页存储过程模块、订单处理存储过程模块、转账存储过程模块等。而且如果使用pl/sql编程,我们可以轻松的完成非常复杂的查询要求。 2、简单分类 |----------过程(存储过程) | |----------函数 块(编程)--------- | |----------触发器 | |----------包 3、编写规范 1)注释

韩顺平笔记

PHP是目前web编程第一语言,欢迎下载韩顺平老师最新力作PHP视频教程, 详情查看https://www.doczj.com/doc/6718504481.html, hibernate的核心类和接口 ①Configuration 类 它的用处是: 1.读取hibernate.cfg.xml 2.管理对象关系映射文件 3.加载hibernate 的驱动,url ,用户.. 4.管理hibernate配置信息 ②hibernate.cfg.xml ③对象关系映射文件 ④SessionFactory (会话工厂) 1.可以缓存sql语句和数据(称为session级缓存)!! 2.是一个重量级的类,因此我们需要保证一个数据库,有一个SessionFactroy 这里我们讨论一个通过SessionFactory 获取Session的两个方法openSession() 一个getCurrentSession(); 1.openSession() 是获取一个新的session 2.getCurrentSession () 获取和当前线程绑定的session,换言之,在同一个线程中,我们获取 的session是同一session,这样可以利于事务控制 如果希望使用getCurrentSession 需要配置hibernate.cfg.xml中配置. 3.如何选择 原则: ①如果需要在同一线程中,保证使用同一个Session则,使用getCurrentSession() ②如果在一个线程中,需要使用不同的Session,则使用opentSession() 4.通过getCurrentSession() 获取的session在事务提交后,会自动关闭,通过openSession() 获取的session则必须手动关闭

韩顺平SqlHelper.java

package com.hsp.utils; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import java.sql.*; public class SqlHelper { //定义变量 private static Connection ct = null; //大多数情况下用preparedstatement替代statement private static PreparedStatement ps = null; private static ResultSet rs = null; //连接数据库的参数 private static String url = ""; private static String username = ""; private static String driver = ""; private static String passwd = ""; private static CallableStatement cs = null; public static CallableStatement getCs() { return cs; } private static Properties pp = null; private static InputStream fis = null; //加载驱动,只需要一次,用静态代码块 static { try { //从dbinfo.properties pp = new Properties(); fis=SqlHelper.class.getClassLoader().getResourceAsStream("mysql.properties"); //fis = new FileInputStream();

韩顺平linux视频学习笔记整理

Linux操作系统学习 linux的特点 优点: 1、免费的/开源的系统 2、支持多线程/多用户的系统 3、安全性好 4、对内存和文件管理优越 linux体积最少只需要内存4M,由于小所以可以做嵌入式开发 缺点: 操作相对困难 Linus于1991年至1994年将unix的微型版minis加以开发出linux 现在redhat红帽子、BSD、SUN等公司进行再发行 在windows环境下可以使用(VM等)虚拟机来运行linux 在linux运行startx命令可以进入图形操作界面 root是linux下的系统管理员 普通用户登陆后可以用su- 切换为系统管理员 关机命令 shutdown -h now 立刻进行关机 shutdown -r now 现在重新启动计算机 reboot 现在重新启动计算机 logout 注销 vi编辑器是linux下最有名的编辑器,也是学习linux必须掌握的工具,在unix下也可使用vi进行程序的开发 linux可以做java/c开发 在linux的vi编辑器内写一下简单的java程序“hello,world” 1、Vi Hello.java 2、输入i[进入到插入模式] public class hello{ public static void main(String []args){ System.out.println("hello,world"); } } 3、输入esc键[进入命令模式] 4、输入wq保存退出/q!退出但不保存 6、编译javac hello.java javac Hello.java

7、运行 java Hello [java运行的是class文件] ls命令显示当前文件 ls -l命令显示详细文件列表 如何在linux下开发c程序或是c++(cpp)程序 建立vi hello.cpp #include int main(){ printf("hello!"); return 0; } gcc hello.cpp 用gcc编译器编译出来未命名会是a.out文件 gcc -o [文件名] [源文件名] 用gcc编译器编译文件命名 /a.out 在linux下运行c程序只要输入/就可以运行 ------------------------------------------------------------ linux下的文件目录 linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层 是根目录“/”,然后在此目录下再创建其他的目录 深刻理解linux文件目录是非常重要的。 linux下的根目录中重要的目录如下是系统自动分配的 root目录、home目录、bin目录、sbin目录、mnt目录、etc目录、var目录、boot目录、usr目录、tmp目录(均为同级目录) root目录:用于存放root用户相关文件的目录 home目录:用于存放普通用户的相关文件的目录 bin目录:用于存放常用命令的目录 sbin目录:用于存放要具有一定权限才可以使用的命令的目录 mnt目录:用于默认挂载软驱、光驱的目录 etc目录:用于存放配置相关的文件的目录 var目录:用于存放经常变化的文件的目录 boot目录:用于存放系统引导文件的目录(重要) usr目录:用于存放安装的默认目录(安装文件会默认安装在usr目录里) tmp目录:用于存入临时文件的目录 cd /返回到主目录下 ls与dir功能相同显示目录名

韩顺平servlet笔记(必看完整版)

◆背景知识介绍 J2EE的13种技术 java->servlet->jsp [技术总是有一个演变过程] zip粘贴到word设置 ◆回顾一下我们现有的技术 java 基础(面向对象,集合,界面,线程,文件,网络) jdbc (java 的数据库编程) oracle / mysql / sqlserver html css javascript (web 开发) ->网页设计 xml serlvet+jsp ->java web开发[使用java技术做web开发] ◆java ee 体系的介绍 ◆servlet项目演示 ◆web 开发介绍 ①静态页面(html) ②动态页面 1.用户可以输入数据,和页面交互(注册,购物,发帖子,付款...) 2.不同时间打开页面,内容是变化. 3.目前比较流行的左动态页面的技术( servlet/jsp , php , https://www.doczj.com/doc/6718504481.html, , asp, cgi ) ◆动态网页技术的比较(了解) ◆bs 和cs的比较 (1)BS:browser server 浏览器服务器

(2)cs client server 客户服务 为什么需要的web服务器/web究竟是干什么的? 模拟一个web服务器MyWebServer.java import java.io.*; import https://www.doczj.com/doc/6718504481.html,.*; public class MyWebServer { public static void main(String []args) throws Exception{ ServerSocket ss=new ServerSocket(80); Socket s=ss.accept(); //提示一句话 System.out.println("在9999 上等待连接..."); OutputStream os=s.getOutputStream(); BufferedReader br=new BufferedReader(new FileReader("d:\\hello.html")); String buf=""; while((buf=br.readLine())!=null){ os.write(buf.getBytes()); } //关闭流

韩顺平linux教学视频学习笔记(第一天)

第一天 一、开山 1、Linux操作系统是开源而且免费的用于开发的操作系统。 稳定性、安全性、处理多并发 2、软件公司迫切需要熟练掌握linux的程序员。 工作方向: Linux系统管理员 Linux软件程序员:工程师(PC)和linux嵌入式开发(单片机,芯片)3、学习流程 第一阶段:vi,gcc,gdb,make,jdk,tomcat,myaql等linux基本操作 第二阶段:加厚C语言功底 第三阶段:学习unix环境高级编程《unix环境高级编程》 第四阶段:linux应用系统开发/嵌入式开发 4、推荐书籍: Linux操作命令的查询 5、内容介绍 基础部分:基础知识,常用命令,linux分区 实用部分:Samba安装与配置,linux网络环境配置,crontab使用,Shell 初步介绍 书籍:《鸟哥的Linux私房菜》、《Linux编程从入门到精通》、《linux内核完全剖析》

二、基础介绍 Linux初步介绍 1、吉祥物: 创始人来自芬兰 2、linux特点 免费的/开源 支持多线程./多用户的 安全性好 对内存和文件管理优越 缺点: 操作相对简单 Linux最小只需要4M内存——>嵌入式开发 3、支持linux的公司:IBM、Oracle、Sun、NEC 4、linux历史: 火星计划:Ken tompson(C语言设计者) +Denis完成Unix:开源、源码内核共享 Unix:aix(IBM),solaris(SUN),hp unix(HP),bsd(伯克利分校)Minix——》linux(Linus 芬兰读书)

5、第一次接触 虚拟机vm Startx 进入图形界面 Shutdown -h now 立即关机命令 Shutdown -r now 现在重启计算机=reboot Reboot 现在重启计算机 尽量少使用管理员用户root账号登陆,先利用普通用户登陆,登陆后再用su - 命令切换成管理员身份 Logout 注销 6、Vi编辑器的使用 开发java文件步骤:1、vi hello.java 2、i 【进入插入模式】 3、输入esc键【进入命令模式】 4、输入一个“:”+" wq/q!"【wq表示退出保持q!退出不保存】 5、Ls【显示文件保存情况】Ls -l【显示保存更明确】 6、编译Javac hello.java 7、运行java hello 开发C程序步骤: 1、编译gcc hello.c 或者gcc -o my1 hello.c

相关主题
文本预览
相关文档 最新文档