| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
27 | 28 | 29 | 30 | 1 | 2 | 3 | |||
4 | 5 | 6 | 7 | 8 | 9 | 10 | |||
11 | 12 | 13 | 14 | 15 | 16 | 17 | |||
18 | 19 | 20 | 21 | 22 | 23 | 24 | |||
25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 |
一、 javabean 是什么?
Bean的中文含義是“豆子”,顧名思義,JavaBean是指一段特殊的Java類,
就是有默然構造方法,只有get,set的方法的java類的對象.
專業點解釋是:
JavaBean定義了一組規則
JavaBean就是遵循此規則的平常的Java對象
滿足這三個條件:
1.執行java.io.Serializable 接口
2.提供無參數的構造器
3.提供getter 和 setter方法訪問它的屬性.
簡單地說,JavaBean是用Java語言描述的軟件組件模型,其實際上是一個類。這些類遵循一個接口格式,以便于使函數命名、底層行為以及繼承或實現的行為,可以把類看作標準的JavaBean組件進行構造和應用。
JavaBean一般分為可視化組件和非可視化組件兩種。可視化組件可以是簡單的GUI元素,如按鈕或文本框,也可以是復雜的,如報表組件;非可視化組件沒有GUI表現形式,用于封裝業務邏輯、數據庫操作等。其最大的優點在于可以實現代碼的可重用性。JavaBean又同時具有以下特性。
易于維護、使用、編寫。
可實現代碼的重用性。
可移植性強,但僅限于Java工作平臺。
便于傳輸,不限于本地還是網絡。
可以以其他部件的模式進行工作。
對于有過其他語言編程經驗的讀者,可以將其看作類似微軟的ActiveX的編程組件。但是區別在于JavaBean是跨平臺的,而ActiveX組件則僅局限于Windows系統。總之,JavaBean比較適合于那些需要跨平臺的、并具有可視化操作和定制特性的軟件組件。
JavaBean組件與EJB(Enterprise JavaBean,企業級JavaBean)組件完全不同。EJB 是J2EE的核心,是一個用來創建分布式應用、服務器端以及基于Java應用的功能強大的組件模型。JavaBean組件主要用于存儲狀態信息,而EJB組件可以存儲業務邏輯。
2 使用JavaBean的原因
程序中往往有重復使用的段落,JavaBean就是為了能夠重復使用而設計的程序段落,而且這些段落并不只服務于某一個程序,而且每個JavaBean都具有特定功能,當需要這個功能的時候就可以調用相應的JavaBean。從這個意義上來講,JavaBean大大簡化了程序的設計過程,也方便了其他程序的重復使用。
JavaBean傳統應用于可視化領域,如AWT(窗口工具集)下的應用。而現在,JavaBean更多地應用于非可視化領域,同時,JavaBean在服務器端的應用也表現出強大的優勢。非可視化的JavaBean可以很好地實現業務邏輯、控制邏輯和顯示頁面的分離,現在多用于后臺處理,使得系統具有更好的健壯性和靈活性。JSP + JavaBean和JSP + JavaBean + Servlet成為當前開發Web應用的主流模式。
3 JavaBean的開發
在程序設計的過程中,JavaBean不是獨立的。為了能夠更好地封裝事務邏輯、數據庫操作而便于實現業務邏輯和前臺程序的分離,操作的過程往往是先開發需要的JavaBean,再在適當的時候進行調用。但一個完整有效的JavaBean必然會包含一個屬性,伴隨若干個get/set(只讀/只寫)函數的變量來設計和運行的。JavaBean作為一個特殊的類,具有自己獨有的特性。應該注意以下3個方面。
JavaBean類必須有一個沒有參數的構造函數。
JavaBean類所有的屬性最好定義為私有的。
JavaBean類中定義函數setXxx() 和getXxx()來對屬性進行操作。其中Xxx是首字母大寫的私有變量名稱。
關鍵字 | 含義 |
Abstract | 一個Java語言中的關鍵字,用在類的聲明中來指明一個類是不能被實例化的,但是可以被其它類繼承。一個抽象類可以使用抽象方法,抽象方法不需要實現,但是需要在子類中被實現 |
Boolean | 布爾類型,只有true或者false |
Break | 停止,并跳出本層循環 |
Byte | 8bit (位),也就是8個1/0表示,即二進制 |
Byvalue | |
Case | Java語言的關鍵字,用來定義一組分支選擇,如果某個值和switch中給出的值一樣,就會從該分支開始執行。 |
Catch | Java的一個關鍵字,用來聲明當try語句塊中發生運行時錯誤或非運行時異常時運行的一個塊。 |
Char | Java語言的一個關鍵字,用來定義一個字符類型 |
Class | 類 |
Const | 在Java中,const是作為保留字以備擴充,同樣的保留字以備擴充還有goto. 你可以用final關鍵字.final也可以用于聲明方法或類,被聲明為final的方法或類不能被繼承 一般C里是const java用final |
Continue | 一個Java的關鍵字,用來打斷當前循環過程,從當前循環的最后重新開始執行,如果后面跟有一個標簽,則從標簽對應的地方開始執行。 |
Default | 一個Java的關鍵字,配合switch跟case使用,但case中沒有找到匹配時,則輸出或者為default后面的語句。 |
Do | 一個Java語言的關鍵字,用來聲明一個循環,這個循環的結束條件可以通過while關鍵字設置 |
Double | 一個Java語言的關鍵字,用來定義一個double類型的變量 |
Else | 一個Java語言的關鍵字,如果if語句的條件不滿足就會執行該語句。 |
Extends | extends 繼承 類X 通過extend 類Y來添加功能,或者添加變量,或者添加方法,或者覆蓋類Y的方法。一個接口extends另外一個接口來添加方法。 |
False | 假的 |
Final | 一個Java語言的關鍵字。你只能定義一個實體一次,以后不能改變它或繼承它。更嚴格的講:一個final修飾的類不能被子類化,一個final修飾的方法不能被重寫,一個final修飾的變量不能改變其初始值。 |
Finally | 一個Java語言的關鍵字,用來執行一段代碼不管在前面定義的try語句中是否有異常或運行時錯誤發生。 |
Float | 一個Java語言的關鍵字,用來定義一個浮點數變量 |
For | 一個Java語言的關鍵字,用來聲明一個循環。程序員可以指定要循環的語句,推出條件和初始化變量。 |
Goto | 雖然為Java關鍵字,但是僅在C語言里面使用,Java不提供Goto語句 |
If | Java編程語言的一個關鍵字,用來生成一個條件測試,如果條件為真,就執行if下的語句。 |
Implements | Java(TM)編程語言的一個關鍵字,在類的聲明中是可選的,用來指明當前類實現的接口。 |
Import | Java(TM)編程語言的一個關鍵字,在源文件的開始部分指明后面將要引用的一個類或整個包,這樣就不必在使用的時候加上包的名字。 |
Instaceof | 一個二操作數的Java(TM)語言關鍵字,用來測試第一個參數的運行時類型是否和第二個參數兼容。 |
Int | Java(TM)的一個關鍵字,用來定義一個整形變量 |
Interface | Java(TM)的一個關鍵字,用來定義一系列的方法和常量。它可以被類實現,通過implements關鍵字。 |
Long | Java語言的一個關鍵字,用來定義一個long類型的變量 |
Native | 本地方法。 |
New | Java語言的一個關鍵字,用來創建一個新的方法 |
Null | Java語言的一個關鍵字,當String類型沒賦值時,該變量的值為Null |
Package | Java語言的一個關鍵字,包的意思 |
Private | Java語言的一個關鍵字,用在方法或變量的聲中。它表示這個方法或變量只能被這個類的其它元素所訪問。 |
Protected | Java語言的一個關鍵字,在方法和變量的聲明中使用,它表示這個方法或變量只能被同一個類中的,子類中的或者同一個包中的類中的元素所訪問。 |
Public | Java語言的一個關鍵字,在方法和變量的聲明中使用,它表示這個方法或變量能夠被其它類中的元素訪問。 |
Return | Java語言的一個關鍵字,用來結束一個方法的執行。它后面可以跟一個方法聲明中要求的值。 |
Short | Java語言的關鍵字,用來定義一個short類型的變量。 |
Static | Java語言的關鍵字,用來定義一個變量為類變量。類只維護一個類變量的拷貝,不管該類當前有多少個實例。"static" 同樣能夠用來定義一個方法為類方法。類方法通過類名調用而不是特定的實例,并且只能操作類變量。 |
Super | 父類 |
Switch | Java語言的關鍵字,是一個選擇語句,與case,default,break一起使用。 |
Synchronized | 線程同步 |
This | Java語言的關鍵字,用來代表它出現的類的一個實例。this可以用來訪問類變量和類方法。 |
Threadsafe | |
Throw | Java語言的關鍵字,允許用戶拋出一個exception對象或者任何實現throwable的對象 |
Throws | Java語言的關鍵字,用在方法的聲明中來說明哪些異常這個方法是不處理的,而是提交到程序的更高一層。 |
Transient | Java語言的關鍵字,用來表示一個域不是該對象串行化的一部分。當一個對象被串行化的時候,transient型變量的值不包括在串行化的表示中,然而非transient型的變量是被包括進去的。 |
True | 真的 |
Try | Java語言的關鍵字,用來定義一個可能拋出異常語句塊。如果一個異常被拋出,一個可選的catch語句塊會處理try語句塊中拋出的異常。同時,一個finally語句塊會被執行,無論一個異常是否被拋出。 |
Void | Java語言的關鍵字,用在Java語言的方法聲明中說明這個方法沒有任何返回值。"void"也可以用來表示一句沒有任何功能的語句。 |
volatile | Java語言的關鍵字,用在變量的聲明中表示這個變量是被同時運行的幾個線程異步修改的。 |
while | Java語言的一個關鍵字,用來定義一段反復執行的循環語句。循環的退出條件是while語句的一部分。 |
返回 0 ~ 1 之間的隨機數。 |
管理權限和角色
權限和角色的區別主要在哪里
說白了,用戶要操作數據庫的時候,需要有對應的系統權限
要操作方案的時候,需要有對應的對象權限,為了簡化管理,出現了角色
圖解:
系統權限:是指執行特定類型sql命令的權利。他用于控制用戶可以執行的一個或是一組
數據庫操作。比如,當用戶具有了create
table權限的時候,它就可以在其的方案中建表了。
如果有create any table
權限的時候,可以在其他方案中建表了。在oracle中大概有100多權限
常用的有:
create
session 連接數據庫
create view
建視圖
create procedure
建過程、函數、包
create cluster
建族
create table
create public synonym 建同義詞
create trigger 建立觸發器
顯示系統權限
查詢數據字典視圖system_privilege_map
select * from
system_privilege_map order by name;
授予系統權限
dba身份授予,如果帶有with admin
option選項,則被授予權限的用戶還可以給其他用戶授予權限
例子:
1、創建兩個用戶zqh1、zqh2
conn
system/manager;
create user zqh1 indendified by 123;
create user zqh2
indendified by 321;
這時兩個用戶登錄是登錄不了的
2、給zqh1授權權限
grant
create session,create table to zqh1 with admin option;
--------這意味zqh1可以給其他用戶繼續授權
grant create view to
zqh1;
這時zqh1可以登錄了
3、zqh1給zqh2授權
conn
zqh1/123;
grant create session,create table to zqh2 with admin
option;
grant create view to zqh2;------------no ok!!!!
回收系統權限
使用revoke命令,注意系統權限的級聯回收問題---【不是級聯回收】
根據上面zqh1、zqh2
system----------->zqh1---------------->zqh2
現在用system執行如下操作:
revoke
create session from zqh1;
-------思考:zqh2還能登陸嗎?yes!!!
========================================================================
對象權限:指訪問其它方案對象的權限。比如zqh1用戶要訪問scott.emp表,必須在emp表上
具有對象權限
常用的有:
alter
delete select insert update index索引 reference 引用 execute執行
顯示對象權限
可以顯示用戶或是角色所具有的對象權限,視圖dba_tab_privs
conn
system/manager;
select distinct privilege from dba_tab_privs;
select
grantor ,owner,table_name,privilege from dba_tab_privs where grantee='BLAKE'
授予對象權限
對象權限可以授予用戶、角色和public。授予用戶的時候可以用with
grant option
但是授予
角色的時候不可以用。
1、monkey用戶操作scott.emp表,則必須授與相應的對象權限
conn
system/manager as sysdba;
create user monkey identified by 123;
grant
create session to monkey;
conn monkey/123;
select * from scott.emp;
-------報錯,表或者視圖不存在
-------------------------------------------------------------
(1)monkey用戶查詢scott.emp表數據,如何執行?
conn
scott/tiger;
grant select on emp to monkey;
select * from
scott.emp;
(2)monkey用戶修改scott.emp表數據,如何執行?
grant update emp to
monkey;
(3)monkey用戶刪除scott.emp表數據,如何執行?
grant delete emp to
monkey;
(4)有沒有更加簡單的方法,一次把所有權限賦給monkey?
grant all on emp to monkey;
2、能否對monkey訪問權限更加精細控制
(1)monkey只可以修改scott.emp的表的sal字段,怎么操作?
grant
update on emp(sal) to
monkey;
(2)monkey只可以查詢scott.emp的表的ename,sal數據,怎么操作?
grant select on
emp(ename,sal) to monkey;
3、授予alter權限
monkey要修改scott.emp表的結果
則必須授予alter對象權限
conn
scott/tiger;
grant alter on emp to monkey;
4、授予execute權限
monkey想要執行其他方案的包/過程/函數,則須有execute權限
conn
system/manager;
grant execute on dbms_transaction(包) to monkey;
5、授予index權限
想在別的方案的表上建立索引
conn scott/tiger;
grant
index on scott.emp to monkey;
6、使用with grant option選項
conn scott/tiger;
grant select
on emp to monkey with grant option;
回收對象權限
對象的權限的回收是否會級聯收回呢?【yes!!!!】
scott--------------->zqh1------------->zqh2
conn
scott/tiger@orcl
revoke select on emp
from zqh1; -------zqh2能否查詢scott.emp表【no!!!】
總結:關于級聯回收,系統權限沒有級聯回收,對象權限有級聯回收!!!!!
角色:相關權限命令的集合,使用角色就是為了簡化管理。
分類:預定義和自定義角色兩類
預定義角色是oracle提供的角色,每種角色
都用于執行一些特定的管理任務。connect/resource/dba
(1)connect角色具有的系統權限
alter session
create
cluster
create database link
create session
create table
create view
create sequence
創建角色
create role zqhrole not
identified;
角色授權
conn system/manager;
grant
create session to zqhrole with admin option;----連接數據庫的授權
conn scott/tiger@orcl;
grant
insert,update,delete on emp to zqhrole;-----提倡表是誰的,由誰給角色授權
把角色分配給用戶
conn system/manager;
create user
zqh3 identified by 123;
grant zqhrole to zqh3 with admin option;
zqh3登錄
conn zqh3/123;
select * from
scott.emp;-------ok!!!!!
刪除角色
drop role 角色名
問題:
假如zqhrole角色刪除了,那么zqh3還能登錄嗎????
conn system/manager;
drop role zqhrole;
conn zqh3/123;【登不上去了!!!!!!】
顯示角色信息:
(1)顯示所有的角色
select * from
dba_roles;---------25個角色
(2)顯示角色具有的系統權限
select privilege,admin_option from
roles_sys_privs where
role='角色名';
(3)顯示角色具有的對象權限
查詢dba_tab_privs
(4)顯示用戶具有的角色,及默認角色
查詢dba_role_privs
select
grant_role,default_role from dba_role_privs where grantee='用戶名';
package com.jdbc.odbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Jdbc_Demo {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");
Statement st = ct.createStatement();
ResultSet rs = st.executeQuery("select * from emp");
while(rs.next()){
System.out.println("用戶名:"+rs.getString(2));
}
rs.close();
st.close();
ct.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.jdbc.odbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class jdbc_demo1 {
public static void main(String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection ct = DriverManager.getConnection("jdbc:odbc:mytest","scott","tiger"); //mytest為數據源名稱
Statement st = ct.createStatement();
ResultSet rs = st.executeQuery("select * from emp");
while(rs.next()){
System.out.println("用戶名:"+rs.getString(2));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}