
2008年12月3日
通過(guò)存儲(chǔ)過(guò)程向數(shù)據(jù)庫(kù)一下子插入了一千萬(wàn)(10000000)條記錄,結(jié)果等了很長(zhǎng)時(shí)間,PL/SQL都沒(méi)有響應(yīng),我又瞎折騰了下,結(jié)果執(zhí)行了好幾次,導(dǎo)致數(shù)據(jù)庫(kù)假死了,我只有刪除當(dāng)前的會(huì)話,從網(wǎng)上找到相關(guān)的腳本代碼。
1> 通過(guò)此語(yǔ)句查詢正在鎖定的SESSION_ID:
1
SELECT SESSION_ID FROM V$LOCKED_OBJECT,USER_OBJECTS WHERE V$LOCKED_OBJECT.OBJECT_ID = USER_OBJECTS.OBJECT_ID
2> 通過(guò)第一步查詢到的SESSION_ID查詢SERIAL#
1
SELECT SERIAL# FROM V$SESSION WHERE SID='12'(此處'12'為上面查詢到的'SESSION_ID')
3> 根據(jù)1,2步查詢到的SESSION_ID和SERIAL#執(zhí)行
1
ALTER SYSTEM KILL SESSION '12,154'(12為SESSION_ID的值, 154為SERIAL#的值)
4> 如果利用上面的命令殺死一個(gè)進(jìn)程后,進(jìn)程狀態(tài)被置為"killed",但是鎖定的資源很長(zhǎng)時(shí)間沒(méi)有被釋放,那么還可以在os一級(jí)再殺死相應(yīng)的進(jìn)程(線程),首先執(zhí)行下面的語(yǔ)句獲得當(dāng)前進(jìn)程(線程)的標(biāo)示PID:
1
select spid, osuser, s.program
2
from v$session s,v$process p
3
where s.paddr=p.addr and s.sid=12 (12是上面的SESSION_ID)
然后在OS通過(guò)任務(wù)管理器找到對(duì)應(yīng)的進(jìn)程,在殺死這個(gè)進(jìn)程(線程)
posted @
2010-11-27 14:55 absolute 閱讀(861) |
評(píng)論 (0) |
編輯 收藏
最近在學(xué)習(xí)存儲(chǔ)過(guò)程,以前在項(xiàng)目中沒(méi)有怎么接觸過(guò)!
我通過(guò)存儲(chǔ)過(guò)程像數(shù)據(jù)庫(kù)中批量添加一千萬(wàn)(100000000)條記錄,結(jié)果PL/SQL很長(zhǎng)時(shí)間沒(méi)有反映,結(jié)果不得已通過(guò)腳本殺掉當(dāng)前進(jìn)程,我重新通過(guò)存儲(chǔ)過(guò)程插入10000條數(shù)據(jù)。
建表腳本:
1
--刪除用戶表
2
DROP TABLE T_PORTAL_USER;
3
4
--創(chuàng)建用戶表
5
CREATE TABLE T_PORTAL_USER
6
(
7
id NUMBER PRIMARY KEY, -- 用戶表示
8
username VARCHAR2(24) NOT NULL,-- 用戶名
9
password VARCHAR2(24) NOT NULL,-- 密碼
10
realname VARCHAR2(24) NOT NULL,-- 真實(shí)姓名
11
sex VARCHAR2(2) DEFAULT '0',-- 性別 "0":Male "1":Female
12
registerDate TIMESTAMP NOT NULL,-- 注冊(cè)日期
13
state VARCHAR2(2) NOT NULL -- 賬號(hào)狀態(tài) "0":啟用 "1":注銷
14
)
15
16
--刪除用戶表序列
17
DROP SEQUENCE SEQ_T_PORTAL_USER;
18
19
--創(chuàng)建用戶表序列
20
CREATE SEQUENCE SEQ_T_PORTAL_USER
21
START WITH 1
22
INCREMENT BY 1
23
NOMAXVALUE
24
CACHE 20
-- 批量新增一萬(wàn)條用戶
1
-- 批量新增一萬(wàn)條用戶
2
CREATE OR REPLACE PROCEDURE PROC_USER_CREATE_BAT
3
AS
4
startTime VARCHAR2(32);--開(kāi)始時(shí)間
5
endTime VARCHAR2(32);--結(jié)束時(shí)間
6
BEGIN
7
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss:ff') INTO startTime FROM DUAL;
8
DBMS_OUTPUT.PUT_LINE('Start Time: '||startTime);
9
FOR i in 1..10000 LOOP
10
INSERT INTO T_PORTAL_USER VALUES(SEQ_T_PORTAL_USER.NEXTVAL,'owen'||i,'123456','gekunjin'||i,'0',sysdate,'0');
11
END LOOP;
12
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss:ff') INTO endTime FROM DUAL;
13
DBMS_OUTPUT.PUT_LINE('End Time: '||endTime);
14
END PROC_USER_CREATE_BAT;
posted @
2010-11-27 14:41 absolute 閱讀(3699) |
評(píng)論 (1) |
編輯 收藏
摘要: 在項(xiàng)目中使用Apache開(kāi)源的Services Framework CXF來(lái)發(fā)布WebService,CXF能夠很簡(jiǎn)潔與Spring Framework 集成在一起,在發(fā)布WebService的過(guò)程中,發(fā)布的接口的入?yún)⒂行╊愋椭С植皇呛芎茫热鏣imestamp和Map。這個(gè)時(shí)候我們就需要編寫(xiě)一些適配來(lái)實(shí)行類型轉(zhuǎn)換。
Timestamp:
1/** *//**
&n...
閱讀全文
posted @
2010-11-27 14:28 absolute 閱讀(3425) |
評(píng)論 (1) |
編輯 收藏
Web應(yīng)用初始化Spring容器策略
以下軟件測(cè)試環(huán)境為Spring,Struts1
1、通過(guò)struts1提供的插件機(jī)制,采用Spring提供的ContextLoaderPlugIn
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<global-exceptions />
<global-forwards />
<message-resources parameter="com.portal.ApplicationResources" />
<!-- 通過(guò)S1提供的插件機(jī)制來(lái)初始化Spring容器,加載Spring配置文件
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<!--
1、ContextLoaderPlugIn默認(rèn)加載配置文件命名規(guī)則是actionServlet-servlet.xml,其中actionServlet
是配置org.apache.struts.action.ActionServlet時(shí)指定的servlet名稱
2、通過(guò)配置contextConfigLocation屬性來(lái)指點(diǎn)Spring配置文件的位置,多個(gè)配置文件可以使用 逗號(hào)","、分號(hào)";"、空格" "
-->
<set-property property="contextConfigLocation"
value="/WEB-INF/conf/spring-application.xml,/WEB-INF/conf/**/spring*.xml" />
</plug-in>
-->
</struts-config>
2、采用Spring提供的ContextLoaderListener來(lái)初始化(應(yīng)用服務(wù)器需要支持Listener,Servlet2.3版本及以上)
<context-param>
<description>通過(guò)配置contextConfigLocation屬性來(lái)指點(diǎn)Spring配置文件的位置,多個(gè)配置文件可以使用 逗號(hào)","、分號(hào)";"、空格" "</description>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/conf/spring-application.xml /WEB-INF/conf/**/spring*.xml</param-value>
</context-param>
<listener>
<description>通過(guò)ContextLocaderListener來(lái)初始化Spring容器,加載Spring配置文件</description>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3、采用load-on-startup Servlet 來(lái)初始化Spring容器
<servlet>
<description>
通過(guò)load-on-startup Servlet來(lái)初始化Spring容器
該如何Servlet 用于提供"后臺(tái)"服務(wù),作為容器管理應(yīng)用中的其他bean,不需要響應(yīng)客戶請(qǐng)求,因此無(wú)須配置servlet-mapping
</description>
<servlet-name>applicationContext</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
posted @
2010-09-13 18:10 absolute 閱讀(2269) |
評(píng)論 (0) |
編輯 收藏
集群概念
1. 兩大關(guān)鍵特性
集群是一組協(xié)同工作的服務(wù)實(shí)體,用以提供比單一服務(wù)實(shí)體更具擴(kuò)展性與可用性的服務(wù)平臺(tái)。在客戶端看來(lái),一個(gè)集群就象是一個(gè)服務(wù)實(shí)體,但事實(shí)上集群由一組服務(wù)實(shí)體組成。與單一服務(wù)實(shí)體相比較,集群提供了以下兩個(gè)關(guān)鍵特性:
· 可擴(kuò)展性--集群的性能不限于單一的服務(wù)實(shí)體,新的服務(wù)實(shí)體可以動(dòng)態(tài)地加入到集群,從而增強(qiáng)集群的性能。
· 高可用性--集群通過(guò)服務(wù)實(shí)體冗余使客戶端免于輕易遇到out of service的警告。在集群中,同樣的服務(wù)可以由多個(gè)服務(wù)實(shí)體提供。如果一個(gè)服務(wù)實(shí)體失敗了,另一個(gè)服務(wù)實(shí)體會(huì)接管失敗的服務(wù)實(shí)體。集群提供的從一個(gè)出錯(cuò)的服務(wù)實(shí)體恢復(fù)到另一個(gè)服務(wù)實(shí)體的功能增強(qiáng)了應(yīng)用的可用性。
2. 兩大能力
為了具有可擴(kuò)展性和高可用性特點(diǎn),集群的必須具備以下兩大能力:
· 負(fù)載均衡--負(fù)載均衡能把任務(wù)比較均衡地分布到集群環(huán)境下的計(jì)算和網(wǎng)絡(luò)資源。
· 錯(cuò)誤恢復(fù)--由于某種原因,執(zhí)行某個(gè)任務(wù)的資源出現(xiàn)故障,另一服務(wù)實(shí)體中執(zhí)行同一任務(wù)的資源接著完成任務(wù)。這種由于一個(gè)實(shí)體中的資源不能工作,另一個(gè)實(shí)體中的資源透明的繼續(xù)完成任務(wù)的過(guò)程叫錯(cuò)誤恢復(fù)。
負(fù)載均衡和錯(cuò)誤恢復(fù)都要求各服務(wù)實(shí)體中有執(zhí)行同一任務(wù)的資源存在,而且對(duì)于同一任務(wù)的各個(gè)資源來(lái)說(shuō),執(zhí)行任務(wù)所需的信息視圖(信息上下文)必須是一樣的。
3. 兩大技術(shù)
實(shí)現(xiàn)集群務(wù)必要有以下兩大技術(shù):
· 集群地址--集群由多個(gè)服務(wù)實(shí)體組成,集群客戶端通過(guò)訪問(wèn)集群的集群地址獲取集群內(nèi)部各服務(wù)實(shí)體的功能。具有單一集群地址(也叫單一影像)是集群的一個(gè)基本特征。維護(hù)集群地址的設(shè)置被稱為負(fù)載均衡器。負(fù)載均衡器內(nèi)部負(fù)責(zé)管理各個(gè)服務(wù)實(shí)體的加入和退出,外部負(fù)責(zé)集群地址向內(nèi)部服務(wù)實(shí)體地址的轉(zhuǎn)換。有的負(fù)載均衡器實(shí)現(xiàn)真正的負(fù)載均衡算法,有的只支持任務(wù)的轉(zhuǎn)換。只實(shí)現(xiàn)任務(wù)轉(zhuǎn)換的負(fù)載均衡器適用于支持ACTIVE-STANDBY的集群環(huán)境,在那里,集群中只有一個(gè)服務(wù)實(shí)體工作,當(dāng)正在工作的服務(wù)實(shí)體發(fā)生故障時(shí),負(fù)載均衡器把后來(lái)的任務(wù)轉(zhuǎn)向另外一個(gè)服務(wù)實(shí)體。
· 內(nèi)部通信--為了能協(xié)同工作、實(shí)現(xiàn)負(fù)載均衡和錯(cuò)誤恢復(fù),集群各實(shí)體間必須時(shí)常通信,比如負(fù)載均衡器對(duì)服務(wù)實(shí)體心跳測(cè)試信息、服務(wù)實(shí)體間任務(wù)執(zhí)行上下文信息的通信。
具有同一個(gè)集群地址使得客戶端能訪問(wèn)集群提供的計(jì)算服務(wù),一個(gè)集群地址下隱藏了各個(gè)服務(wù)實(shí)體的內(nèi)部地址,使得客戶要求的計(jì)算服務(wù)能在各個(gè)服務(wù)實(shí)體之間分布。內(nèi)部通信是集群能正常運(yùn)轉(zhuǎn)的基礎(chǔ),它使得集群具有均衡負(fù)載和錯(cuò)誤恢復(fù)的能力。
集群分類
Linux集群主要分成三大類( 高可用集群, 負(fù)載均衡集群,科學(xué)計(jì)算集群)
高可用集群( High Availability Cluster)
負(fù)載均衡集群(Load Balance Cluster)
科學(xué)計(jì)算集群(High Performance Computing Cluster)
================================================
具體包括:
Linux High Availability 高可用集群
(普通兩節(jié)點(diǎn)雙機(jī)熱備,多節(jié)點(diǎn)HA集群,RAC, shared, share-nothing集群等)
Linux Load Balance 負(fù)載均衡集群
(LVS等....)
Linux High Performance Computing 高性能科學(xué)計(jì)算集群
(Beowulf 類集群....)
分布式存儲(chǔ)
其他類linux集群
(如Openmosix, rendering farm 等..)
詳細(xì)介紹
1. 高可用集群(High Availability Cluster)
常見(jiàn)的就是2個(gè)節(jié)點(diǎn)做成的HA集群,有很多通俗的不科學(xué)的名稱,比如"雙機(jī)熱備", "雙機(jī)互備", "雙機(jī)".
高可用集群解決的是保障用戶的應(yīng)用程序持續(xù)對(duì)外提供服務(wù)的能力。 (請(qǐng)注意高可用集群既不是用來(lái)保護(hù)業(yè)務(wù)數(shù)據(jù)的,保護(hù)的是用戶的業(yè)務(wù)程序?qū)ν獠婚g斷提供服務(wù),把因軟件/硬件/人為造成的故障對(duì)業(yè)務(wù)的影響降低到最小程度)。
2. 負(fù)載均衡集群(Load Balance Cluster)
負(fù)載均衡系統(tǒng):集群中所有的節(jié)點(diǎn)都處于活動(dòng)狀態(tài),它們分?jǐn)傁到y(tǒng)的工作負(fù)載。一般Web服務(wù)器集群、數(shù)據(jù)庫(kù)集群和應(yīng)用服務(wù)器集群都屬于這種類型。
負(fù)載均衡集群一般用于相應(yīng)網(wǎng)絡(luò)請(qǐng)求的網(wǎng)頁(yè)服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器。這種集群可以在接到請(qǐng)求時(shí),檢查接受請(qǐng)求較少,不繁忙的服務(wù)器,并把請(qǐng)求轉(zhuǎn)到這些服務(wù)器上。從檢查其他服務(wù)器狀態(tài)這一點(diǎn)上看,負(fù)載均衡和容錯(cuò)集群很接近,不同之處是數(shù)量上更多。
3. 科學(xué)計(jì)算集群(High Performance Computing Cluster)
高性能計(jì)算(High Perfermance Computing)集群,簡(jiǎn)稱HPC集群。這類集群致力于提供單個(gè)計(jì)算機(jī)所不能提供的強(qiáng)大的計(jì)算能力。
高性能計(jì)算分類
高吞吐計(jì)算(High-throughput Computing)
有一類高性能計(jì)算,可以把它分成若干可以并行的子任務(wù),而且各個(gè)子任務(wù)彼此間沒(méi)有什么關(guān)聯(lián)。象在家搜尋外星人( SETI@HOME -- Search for Extraterrestrial Intelligence at Home )就是這一類型應(yīng)用。這一項(xiàng)目是利用Internet上的閑置的計(jì)算資源來(lái)搜尋外星人。SETI項(xiàng)目的服務(wù)器將一組數(shù)據(jù)和數(shù)據(jù)模式發(fā)給Internet上參加SETI的計(jì)算節(jié)點(diǎn),計(jì)算節(jié)點(diǎn)在給定的數(shù)據(jù)上用給定的模式進(jìn)行搜索,然后將搜索的結(jié)果發(fā)給服務(wù)器。服務(wù)器負(fù)責(zé)將從各個(gè)計(jì)算節(jié)點(diǎn)返回的數(shù)據(jù)匯集成完整的數(shù)據(jù)。因?yàn)檫@種類型應(yīng)用的一個(gè)共同特征是在海量數(shù)據(jù)上搜索某些模式,所以把這類計(jì)算稱為高吞吐計(jì)算。所謂的Internet計(jì)算都屬于這一類。按照 Flynn的分類,高吞吐計(jì)算屬于SIMD(Single Instruction/Multiple Data)的范疇。
分布計(jì)算(Distributed Computing)
另一類計(jì)算剛好和高吞吐計(jì)算相反,它們雖然可以給分成若干并行的子任務(wù),但是子任務(wù)間聯(lián)系很緊密,需要大量的數(shù)據(jù)交換。按照Flynn的分類,分布式的高性能計(jì)算屬于MIMD(Multiple Instruction/Multiple Data)的范疇。
4. 分布式(集群)與集群的聯(lián)系與區(qū)別
分布式是指將不同的業(yè)務(wù)分布在不同的地方。
而集群指的是將幾臺(tái)服務(wù)器集中在一起,實(shí)現(xiàn)同一業(yè)務(wù)。
分布式中的每一個(gè)節(jié)點(diǎn),都可以做集群。
而集群并不一定就是分布式的。
舉例:就比如新浪網(wǎng),訪問(wèn)的人多了,他可以做一個(gè)群集,前面放一個(gè)響應(yīng)服務(wù)器,后面幾臺(tái)服務(wù)器完成同一業(yè)務(wù),如果有業(yè)務(wù)訪問(wèn)的時(shí)候,響應(yīng)服務(wù)器看哪臺(tái)服務(wù)器的負(fù)載不是很重,就將給哪一臺(tái)去完成。
而分布式,從窄意上理解,也跟集群差不多, 但是它的組織比較松散,不像集群,有一個(gè)組織性,一臺(tái)服務(wù)器垮了,其它的服務(wù)器可以頂上來(lái)。
分布式的每一個(gè)節(jié)點(diǎn),都完成不同的業(yè)務(wù),一個(gè)節(jié)點(diǎn)垮了,哪這個(gè)業(yè)務(wù)就不可訪問(wèn)了。
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/tanghongru1983/archive/2009/04/28/4130356.aspx
posted @
2010-03-02 14:16 absolute 閱讀(644) |
評(píng)論 (0) |
編輯 收藏
代碼如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class MyEclipseGen
{
private static final String LL = "Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.";


public String getSerial(String userId, String licenseNum)
{
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.add(1, 3);
cal.add(6, -1);
java.text.NumberFormat nf = new java.text.DecimalFormat("000");
licenseNum = nf.format(Integer.valueOf(licenseNum));
String verTime = new StringBuilder("-").append(
new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime()))
.append("0").toString();
String type = "YE3MP-";
String need = new StringBuilder(userId.substring(0, 1)).append(type)
.append("300").append(licenseNum).append(verTime).toString();
String dx = new StringBuilder(need).append(LL).append(userId)
.toString();
int suf = this.decode(dx);
String code = new StringBuilder(need).append(String.valueOf(suf))
.toString();
return this.change(code);
}


private int decode(String s)
{
int i;
char[] ac;
int j;
int k;
i = 0;
ac = s.toCharArray();
j = 0;
k = ac.length;

while (j < k)
{
i = (31 * i) + ac[j];
j++;
}
return Math.abs(i);
}


private String change(String s)
{
byte[] abyte0;
char[] ac;
int i;
int k;
int j;
abyte0 = s.getBytes();
ac = new char[s.length()];
i = 0;
k = abyte0.length;

while (i < k)
{
j = abyte0[i];

if ((j >= 48) && (j <= 57))
{
j = (((j - 48) + 5) % 10) + 48;

} else if ((j >= 65) && (j <= 90))
{
j = (((j - 65) + 13) % 26) + 65;

} else if ((j >= 97) && (j <= 122))
{
j = (((j - 97) + 13) % 26) + 97;
}
ac[i] = (char) j;
i++;
}
return String.valueOf(ac);
}


public MyEclipseGen()
{
super();
}


public static void main(String[] args)
{

try
{
System.out.println("please input register name:");
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
String userId = null;
userId = reader.readLine();
MyEclipseGen myeclipsegen = new MyEclipseGen();
String res = myeclipsegen.getSerial(userId, "5");
System.out.println("Serial:" + res);
reader.readLine();

} catch (IOException ex)
{
}
}
}

注冊(cè)方法:
window -> preferences -> myeclipse -> subscription
posted @
2010-02-16 09:20 absolute|
編輯 收藏
Hibernate學(xué)習(xí)筆記
1、Hibernate核心類與接口
1-1.Configuration類
Configuration類是Hibernate的入口,它負(fù)責(zé)配置和啟動(dòng)Hibernate,Hibernate框架通過(guò)Configuration實(shí)例加載配置文件信息(hibernate.cfg.xml),然后讀取指定對(duì)象關(guān)系映射文件(bean.hbm.xml)的內(nèi)容并創(chuàng)建SessionFactory.
1-2.SessionFactory接口
SessionFactory接口負(fù)責(zé)初始化Hibernate,一個(gè)SessionFactory實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)源(一般就是指一個(gè)數(shù)據(jù)庫(kù))。應(yīng)用程序從SessionFactory中獲得Session實(shí)例。SessionFactory具有以下特點(diǎn):
1) 線程安全,即同一個(gè) SessionFactory實(shí)例可以被應(yīng)用 的多個(gè)線程共享。
2) 它是重量級(jí)的 ,因?yàn)樗枰粋€(gè)很大的緩存,用來(lái)存放預(yù)定義的SQL語(yǔ)句以及映射元數(shù)據(jù)等。
所以說(shuō) ,如果一個(gè)應(yīng)用程序中只訪問(wèn)一個(gè)數(shù)據(jù)庫(kù) ,則只需要?jiǎng)?chuàng)建一個(gè)全局的 SessionFactory實(shí)例。
1-3.Session 接口
Session是Hibernate中應(yīng)用最頻繁的接口。Session也被稱為持久化管理器 ,它負(fù)責(zé)管理所有與持久化相關(guān)的操作:如存儲(chǔ)、更新、刪除和加載對(duì)象等。Session接口具有以下特點(diǎn):
1) 單線程,非共享的對(duì)象。線程不安全,在設(shè)計(jì)軟件架構(gòu)時(shí)候,應(yīng)該避免多個(gè)線程共享同一個(gè)session實(shí)例。
2) Session 實(shí)例是輕量級(jí)的,它的創(chuàng)建和銷毀不需要消耗太多的資源。可以為每個(gè)請(qǐng)分配一個(gè)Session實(shí)例,在每次請(qǐng)求過(guò)程匯總及時(shí)創(chuàng)建和銷毀 Session實(shí)例。
3) Session有一個(gè)緩存,它存放當(dāng)前工作單元加載的對(duì)象。Session的緩存被稱為Hibernate的一級(jí)緩存。
1-4.Transaction接口
Transaction接口是 Hibernate框架的事務(wù)接口。它對(duì)底層的事務(wù)接口做了封裝,包括:JDBC API和JTA.這樣使得Hibernate應(yīng)用可以通過(guò)一致的Transaction接口來(lái)申明事務(wù)邊界,這有助于應(yīng)用程序再不同的環(huán)境和容器中移植。
1-5.Query和Criteria接口
它們是 Hibernate的查詢接口,用于從數(shù)據(jù)存儲(chǔ)源查詢對(duì)象及控制執(zhí)行查詢的過(guò)程。Query包裝了一個(gè) HQL(Hibernate Query Language);而Criteria接口完全封裝了基本字符串形式的查詢語(yǔ)句,比Query更加面向?qū)ο螅?/span>Criteria接口擅長(zhǎng)于執(zhí)行動(dòng)態(tài)查詢。
2、Hibernate中常用的事務(wù)隔離級(jí)別
常量
|
值
|
說(shuō)明
|
TRANSACTION_NONE
|
0
|
不支持事務(wù)
|
TRANSACTION_READ_UNCOMMITTED
|
1
|
指示可以發(fā)生臟讀(dirty read)、不可重復(fù)讀和虛讀(phantom read)的常量。此級(jí)別允許被某一事務(wù)更改的行在已提交該行所有更改之前被另一個(gè)事務(wù)讀取(“臟讀”)。如果所有更改都被回滾,則第二個(gè)事務(wù)將獲取無(wú)效的行。
|
TRANSACTION_READ_COMMITTED
|
2
|
指示不可以發(fā)生臟讀的常量;不可重復(fù)讀和虛讀可以發(fā)生。此級(jí)別只禁止事務(wù)讀取其中帶有未提交更改的行。
|
TRANSACTION_REPEATABLE_READ
|
4
|
指示不可以發(fā)生臟讀和不可重復(fù)讀的常量;虛讀可以發(fā)生。此級(jí)別禁止事務(wù)讀取帶有未提交更改的行,它還禁止這種情況:一個(gè)事務(wù)讀取某一行,而另一個(gè)事務(wù)更改該行,第一個(gè)事務(wù)重新讀取該行,并在第二次讀取時(shí)獲得不同的值(“不可重復(fù)讀”)。
|
TRANSACTION_SERIALIZABLE
|
8
|
指示不可以發(fā)生臟讀、不可重復(fù)讀和虛讀的常量。此級(jí)別包括TRANSACTION_REPEATABLE_READ 中禁止的事項(xiàng),同時(shí)還禁止出現(xiàn)這種情況:某一事務(wù)讀取所有滿足 WHERE 條件的行,另一個(gè)事務(wù)插入一個(gè)滿足 WHERE 條件的行,第一個(gè)事務(wù)重新讀取滿足相同條件的行,并在第二次讀取時(shí)獲得額外的“虛”行。
|
3、Hibernate中實(shí)例的狀態(tài)

3-1:臨時(shí)狀態(tài)
該實(shí)例從未與任何持久化上下文關(guān)聯(lián)過(guò)。它沒(méi)有持久化標(biāo)識(shí)(相當(dāng)于主鍵值),臨時(shí)狀態(tài)下的對(duì)象有如下特征。
1) 不處于Session緩存中,也可以說(shuō)不被任何一個(gè)Session關(guān)聯(lián)
2) 在數(shù)據(jù)庫(kù)中沒(méi)有對(duì)應(yīng)的記錄
在以下情況下,Java對(duì)象進(jìn)入臨時(shí)狀態(tài)
1) 當(dāng)通過(guò)new語(yǔ)句剛創(chuàng)建一個(gè)Java對(duì)象,它處于臨時(shí)狀態(tài),此時(shí)不和數(shù)據(jù)庫(kù)中的任何記錄對(duì)應(yīng)。
2) Session的delete()方法能使一個(gè)持久化或臨時(shí)脫管對(duì)象轉(zhuǎn)換為臨時(shí)對(duì)象。對(duì)于脫管對(duì)象,delete()方法從數(shù)據(jù)庫(kù)中刪除與它對(duì)應(yīng)的記錄,并且把它從Session緩存中刪除。
3-2:持久化狀態(tài)
該實(shí)例目前與某個(gè)持久化上下文有關(guān)聯(lián),它擁有持久化標(biāo)識(shí)(相當(dāng)于主鍵值),并且可能在數(shù)據(jù)庫(kù)匯總有一個(gè)對(duì)應(yīng)的行。對(duì)于某一個(gè)特定的持久化上下文,Hibernate保證標(biāo)識(shí)與Java標(biāo)識(shí)(其值代表對(duì)應(yīng)在內(nèi)存中的位置)等價(jià)。持久化對(duì)象有以下特征。
1) 位于一個(gè)Session實(shí)例的緩存中,也可以說(shuō),持久化對(duì)象總是被一個(gè)Session實(shí)例關(guān)聯(lián)。
2) 持久化對(duì)象和數(shù)據(jù)庫(kù)中的相關(guān)記錄對(duì)應(yīng)。
3) Session在清理緩存時(shí),會(huì)根據(jù)持久化對(duì)象的屬性變化,來(lái)同步更新數(shù)據(jù)庫(kù)。
Session的許多方法都能夠觸發(fā)Java對(duì)象進(jìn)入持久化狀態(tài)。
4) Session的save()的方法能夠把臨時(shí)對(duì)象轉(zhuǎn)變成持久化對(duì)象。
5) Session的load()或get()方法返回的對(duì)象總是處于持久化狀態(tài)。
6) Query類的list()方法返回的list集合中存放的都是持久化對(duì)象。
7) Session的update()、saveOrUpdate()和lock()方法使脫管對(duì)象轉(zhuǎn)變?yōu)槌志没瘜?duì)象。
當(dāng)一個(gè)持久化對(duì)象關(guān)聯(lián)一個(gè)臨時(shí)對(duì)象時(shí),在允許級(jí)聯(lián)保存的情況下,Session在清理緩存時(shí)會(huì)把這個(gè)臨時(shí)對(duì)象也轉(zhuǎn)變成持久化對(duì)象。Hibernate保證在同一個(gè)Session實(shí)例的緩存中,數(shù)據(jù)庫(kù)表中的每條記錄只對(duì)應(yīng)唯一的持久化對(duì)象,也就是說(shuō)在一個(gè)Session里load/get同一個(gè)OID得到 的是相同的對(duì)象。
3-3:脫管狀態(tài)
實(shí)例曾經(jīng)與某個(gè)持久化上下文發(fā)生過(guò)關(guān)聯(lián),不過(guò)那個(gè)上下文被關(guān)閉了,或者這個(gè)實(shí)例是被序列化(serialize)到另外的進(jìn)程。它擁有持久化標(biāo)識(shí),并且在數(shù)據(jù)庫(kù)中可能存在一個(gè)對(duì)應(yīng)的行。對(duì)于脫管狀態(tài)的實(shí)例,Hibernate不保證任何持久化標(biāo)識(shí)和Java標(biāo)識(shí)的關(guān)系。
脫管對(duì)象具有以下特征。
1) 不再位于Session的緩存中,也可以說(shuō),脫管對(duì)象不被Session關(guān)聯(lián)。
2) 脫管對(duì)象是有持久化對(duì)象轉(zhuǎn)變過(guò)來(lái)的,因此在數(shù)據(jù)庫(kù)中可能還存在與它對(duì)應(yīng)的記錄(前提條件是沒(méi)有其他程序刪除了這條記錄)。
3) 脫管對(duì)象與臨時(shí)對(duì)象的相同指出在于兩者都不被Session關(guān)聯(lián),因此Hibernate不會(huì)保證他們屬性變化與數(shù)據(jù)庫(kù)保持同步。脫管對(duì)象與臨時(shí)對(duì)象的區(qū)別在于前者是由持久化對(duì)象轉(zhuǎn)變過(guò)來(lái)的,因此可能在書(shū)庫(kù)中還存在對(duì)應(yīng)的記錄,而后者在數(shù)據(jù)庫(kù)中是沒(méi)有對(duì)應(yīng)的記錄的。
Session的以下方法使持久化對(duì)象轉(zhuǎn)變成脫管對(duì)象.
1) 當(dāng)調(diào)用Session的close()方法時(shí),Session 的緩存被清空,緩存中的所有持久化對(duì)象都變?yōu)槊摴軐?duì)象,如果在應(yīng)用程序中沒(méi)有引用變量引用這些脫管對(duì)象,他們就會(huì)結(jié)束生命周期。
2) Session的evict()方法能夠從緩存中刪除一個(gè)持久化對(duì)象,使它變?yōu)槊摴軤顟B(tài),當(dāng)Session的緩存中保存了大量的持久化對(duì)象時(shí),會(huì)消耗許多內(nèi)存空間,為了提高性能,可以考慮調(diào)用evict()方法,從緩存中刪除一些持久化對(duì)象。但是多數(shù)情況下不推薦使用該方法,而應(yīng)該通過(guò)查詢語(yǔ)言,或者顯示的導(dǎo)航來(lái)控制對(duì)象圖的深度。
posted @
2010-01-09 19:08 absolute 閱讀(675) |
評(píng)論 (0) |
編輯 收藏
最近在構(gòu)思寫(xiě)一些設(shè)計(jì)模式方面的文章,用到UML圖,以前用Visio和WithClass..但功能不多,所以就安裝了Rose 2003..以下是安裝過(guò)程:
1.安裝Rose后,默認(rèn)是需要許可證書(shū)的..去下載個(gè)破解的..我上傳了破解文件..
點(diǎn)擊這里下載Rose 2003破解
2.先用破解壓縮包里的 rational.exe,lmgrd.exe 覆蓋到你的 \安裝目錄的Rartional\commen\下
3.然后記事本打開(kāi) license.dat, 修改里面的 SERVER yourPC ANY DAEMON rational "C:\Program Files\Rational\Common\rational.exe"
改成 SERVER 你的機(jī)器名 ANY DAEMON rational "你的安裝目錄\rational.exe" ,拷貝到Common目錄下..
4. 將Flexlm.cpl拷貝到C:\winnt\system32\下, 在控制面板里運(yùn)行 FlexLm License Manager,
運(yùn)行后, 在 Setup 面板配置文件路徑,lmgrd.exe -> 你的安裝目錄 \Common\lmgrd.exe, 而 License File 為你改過(guò)的 license.dat ...
5.在Control面板點(diǎn)擊Start,如果成功的話點(diǎn)擊Status按鈕將顯示 你的機(jī)器名:license server UP (MASTER) 說(shuō)明成功了
失敗的話重啟一下FlexLm License Manager就沒(méi)問(wèn)題了。
6.如果彈出對(duì)話框License Key Administrator Wizard后, 選定Point to a Rational License Server to get my licenses,單擊下一步,
Server Name文本框中填寫(xiě)你的機(jī)器號(hào)(可能已經(jīng)填好),單擊完成。 (成功的話會(huì)出現(xiàn)兩屏的licenses)
注意:本文轉(zhuǎn)至:
http://www.cnblogs.com/lixianhuei/archive/2006/01/09/313644.html
posted @
2009-10-25 08:29 absolute 閱讀(880) |
評(píng)論 (1) |
編輯 收藏
有這樣兩個(gè)表:
table_a:
id name val
1 aaa 30
2 aaa 40
3 aaa 50
1 bbb 35
2 bbb 45
3 bbb 55
table_b:
name val1 val2 val3
aaa 30 40 50
bbb 35 45 55
請(qǐng)用一個(gè)SQL語(yǔ)句實(shí)現(xiàn)table_a到table_b的轉(zhuǎn)化。
1
create table tb(id int, name varchar(10), val int)
2
insert into tb values(1 , 'aaa' , 30 )
3
insert into tb values(2 , 'aaa' , 40 )
4
insert into tb values(3 , 'aaa' , 50 )
5
insert into tb values(1 , 'bbb' , 35 )
6
insert into tb values(2 , 'bbb' , 45 )
7
insert into tb values(3 , 'bbb' , 55 )
8
go
9
10
--sql 2000靜態(tài),指ID只有1,2,3
11
select name ,
12
sum(case id when 1 then val else 0 end) [val1],
13
sum(case id when 2 then val else 0 end) [val2],
14
sum(case id when 3 then val else 0 end) [val3]
15
from tb
16
group by name
17
/**//*
18
name val1 val2 val3
19
---------- ----------- ----------- -----------
20
aaa 30 40 50
21
bbb 35 45 55
22
23
(所影響的行數(shù)為 2 行)
24
*/
25
26
--sql 2000動(dòng)態(tài),指ID不確定
27
declare @sql varchar(8000)
28
set @sql = 'select name '
29
select @sql = @sql + ' , sum(case id when ''' + cast(id as varchar) + ''' then val else 0 end) [val' + cast(id as varchar) + ']'
30
from (select distinct id from tb) as a
31
set @sql = @sql + ' from tb group by name'
32
exec(@sql)
33
/**//*
34
name val1 val2 val3
35
---------- ----------- ----------- -----------
36
aaa 30 40 50
37
bbb 35 45 55
38
*/
39
40
41
drop table tb
42
posted @
2009-08-17 10:14 absolute 閱讀(442) |
評(píng)論 (0) |
編輯 收藏
SQL code
with rollup 、with cube、grouping
CUBE 和 ROLLUP 之間的區(qū)別在于:
CUBE 生成的結(jié)果集顯示了所選列中值的所有組合的聚合。
ROLLUP 生成的結(jié)果集顯示了所選列中值的某一層次結(jié)構(gòu)的聚合。
grouping:
當(dāng)用 CUBE 或 ROLLUP 運(yùn)算符添加行時(shí),附加的列輸出值為1,當(dāng)所添加的行不是由 CUBE 或 ROLLUP 產(chǎn)生時(shí),附加列值為0。
--例如
DECLARE @T TABLE(名稱 VARCHAR(1) , 出版商 VARCHAR(10), 價(jià)格1 INT, 價(jià)格2 INT)
INSERT @T
SELECT 'a', '北京', 11, 22 UNION ALL
SELECT 'a', '四川', 22, 33 UNION ALL
SELECT 'b', '四川', 12, 23 UNION ALL
SELECT 'b', '北京', 10, 20 UNION ALL
SELECT 'b', '昆明', 20, 30
SELECT
名稱,
出版商,
SUM(價(jià)格1) AS 價(jià)格1,
SUM(價(jià)格2) AS 價(jià)格2,
GROUPING(名稱) AS CHECK名稱,
GROUPING(出版商) AS CHECK出版商
FROM @T GROUP BY 名稱,出版商 WITH CUBE
/*
名稱 出版商 價(jià)格1 價(jià)格2 CHECK名稱 CHECK出版商
---- ---------- ----------- ----------- ------- --------
a 北京 11 22 0 0
a 四川 22 33 0 0
a NULL 33 55 0 1
b 北京 10 20 0 0
b 昆明 20 30 0 0
b 四川 12 23 0 0
b NULL 42 73 0 1
NULL NULL 75 128 1 1
NULL 北京 21 42 1 0
NULL 昆明 20 30 1 0
NULL 四川 34 56 1 0
(所影響的行數(shù)為 11 行)
*/
--分析
/*group by 兩列:名稱有兩個(gè)類別A,B;所有由CUBE運(yùn)算而生成行的是
名稱 出版商 價(jià)格1 價(jià)格2 CHECK名稱 CHECK出版商
---- ---------- ----------- ----------- ------- --------
a NULL 33 55 0 1
b NULL 42 73 0 1
出版商有三個(gè)類別,所有由CUBE運(yùn)算而生成行的是
名稱 出版商 價(jià)格1 價(jià)格2 CHECK名稱 CHECK出版商
---- ---------- ----------- ----------- ------- --------
NULL 北京 21 42 1 0
NULL 昆明 20 30 1 0
NULL 四川 34 56 1 0
以及
NULL NULL 75 128 1 1
*/
SELECT
名稱,
出版商,
SUM(價(jià)格1) AS 價(jià)格1,
SUM(價(jià)格2) AS 價(jià)格2
FROM @T GROUP BY 名稱,出版商 WITH ROLLUP
/*
名稱 出版商 價(jià)格1 價(jià)格2
---- ---------- ----------- -----------
a 北京 11 22
a 四川 22 33
a NULL 33 55
b 北京 10 20
b 昆明 20 30
b 四川 12 23
b NULL 42 73
NULL NULL 75 128
*/
posted @
2009-08-17 09:51 absolute 閱讀(17359) |
評(píng)論 (0) |
編輯 收藏
HTML頭部信息(head)里包含關(guān)于所在網(wǎng)頁(yè)的信息。頭部信息(head)里的內(nèi)容,主要是被瀏覽器所用,不會(huì)顯示在網(wǎng)頁(yè)的正文內(nèi)容里。
幾個(gè)常用的head信息里的html元素
標(biāo)題(title)
標(biāo)題(title)是最常用的head信息。它不顯示在HTML網(wǎng)頁(yè)正文里,顯示在瀏覽器窗口的標(biāo)題欄里。
鏈接(link)
用鏈接(link)可以建立和外部文件的鏈接。常用的是對(duì)CSS外部樣式表(external style sheet)的鏈接。
如:<link href="css/index.css" rel="stylesheet" type="text/css" />
網(wǎng)頁(yè)信息(meta)
在HTML里,meta標(biāo)記(meta tags)表示用來(lái)描述網(wǎng)頁(yè)的有關(guān)信息。
<meta http-equiv="Content-Type" content="text/html;charset=gbk" />
<meta name="description" content="" />
<meta name="keywords" content=""/>
<meta http-equiv="Refresh" contetn="5;url">
一、meta標(biāo)簽的組成
meta標(biāo)簽共有兩個(gè)屬性,它們分別是http-equiv屬性和name屬性,不同的屬性又有不同的參數(shù)值,這些不同的參數(shù)值就實(shí)現(xiàn)了不同的網(wǎng)頁(yè)功能。
1、name屬性
name屬性主要用于描述網(wǎng)頁(yè),與之對(duì)應(yīng)的屬性值為content,content中的內(nèi)容主要是便于搜索引擎機(jī)器人查找信息和分類信息用的。
meta標(biāo)簽的name屬性語(yǔ)法格式是:<meta name="參數(shù)" content="具體的參數(shù)值"> 。
其中name屬性主要有以下幾種參數(shù):
A、Keywords(關(guān)鍵字)
說(shuō)明:keywords用來(lái)告訴搜索引擎你網(wǎng)頁(yè)的關(guān)鍵字是什么。
舉例:<meta name ="keywords" content="science, education,culture,politics,ecnomics,relationships, entertaiment, human">
B、description(網(wǎng)站內(nèi)容描述)
說(shuō)明:description用來(lái)告訴搜索引擎你的網(wǎng)站主要內(nèi)容。
舉例:<meta name="description" content="This page is about the meaning of science, education,culture.">
C、robots(機(jī)器人向?qū)?
說(shuō)明:robots用來(lái)告訴搜索機(jī)器人哪些頁(yè)面需要索引,哪些頁(yè)面不需要索引。
content的參數(shù)有all,none,index,noindex,follow,nofollow。默認(rèn)是all。
舉例:<meta name="robots" content="none">
D、author(作者)
說(shuō)明:標(biāo)注網(wǎng)頁(yè)的作者
舉例:<meta name="author" content"root,root@21cn.com">
2、http-equiv屬性
http-equiv顧名思義,相當(dāng)于http的文件頭作用,它可以向?yàn)g覽器傳回一些有用的信息,以幫助正確和精確地顯示網(wǎng)頁(yè)內(nèi)容,與之對(duì)應(yīng)的屬性值為content,content中的內(nèi)容其實(shí)就是各個(gè)參數(shù)的變量值。
meat標(biāo)簽的http-equiv屬性語(yǔ)法格式是:<meta http-equiv="參數(shù)" content="參數(shù)變量值"> ;其中http-equiv屬性主要有以下幾種參數(shù):
A、Expires(期限)
說(shuō)明:可以用于設(shè)定網(wǎng)頁(yè)的到期時(shí)間。一旦網(wǎng)頁(yè)過(guò)期,必須到服務(wù)器上重新傳輸。
用法:<meta http-equiv="expires" content="Fri, 12 Jan 2001 18:18:18 GMT">
注意:必須使用GMT的時(shí)間格式。
B、Pragma(cache模式)
說(shuō)明:禁止瀏覽器從本地計(jì)算機(jī)的緩存中訪問(wèn)頁(yè)面內(nèi)容。
用法:<meta http-equiv="Pragma" content="no-cache">
注意:這樣設(shè)定,訪問(wèn)者將無(wú)法脫機(jī)瀏覽。
C、Refresh(刷新)
說(shuō)明:自動(dòng)刷新并指向新頁(yè)面。
用法:<meta http-equiv="Refresh" content="2;URL=http://www.root.net">
注意:其中的2是指停留2秒鐘后自動(dòng)刷新到URL網(wǎng)址。
D、Set-Cookie(cookie設(shè)定)
說(shuō)明:如果網(wǎng)頁(yè)過(guò)期,那么存盤(pán)的cookie將被刪除。
用法:<meta http-equiv="Set-Cookie" content="cookievalue=xxx; expires=Friday, 12-Jan-2001 18:18:18 GMT; path=/">
注意:必須使用GMT的時(shí)間格式。
E、Window-target(顯示窗口的設(shè)定)
說(shuō)明:強(qiáng)制頁(yè)面在當(dāng)前窗口以獨(dú)立頁(yè)面顯示。
用法:<meta http-equiv="Window-target" content="_top">
注意:用來(lái)防止別人在框架里調(diào)用自己的頁(yè)面。
F、content-Type(顯示字符集的設(shè)定)
說(shuō)明:設(shè)定頁(yè)面使用的字符集。
用法:<meta http-equiv="content-Type" content="text/html; charset=gb2312">
二、meta標(biāo)簽的功能
上面我們介紹了meta標(biāo)簽的一些基本組成,接著我們?cè)賮?lái)一起看看meta標(biāo)簽的常見(jiàn)功能:
1、幫助主頁(yè)被各大搜索引擎登錄
meta標(biāo)簽的一個(gè)很重要的功能就是設(shè)置關(guān)鍵字,來(lái)幫助你的主頁(yè)被各大搜索引擎登錄,提高網(wǎng)站的訪問(wèn)量。在這個(gè)功能中,最重要的就是對(duì)Keywords和description的設(shè)置。因?yàn)榘凑账阉饕娴墓ぷ髟?搜索引擎首先派出機(jī)器人自動(dòng)檢索頁(yè)面中的keywords和decription,并將其加入到自己的數(shù)據(jù)庫(kù),然后再根據(jù)關(guān)鍵詞的密度將網(wǎng)站排序。因此,我們必須設(shè)置好關(guān)鍵字,來(lái)提高頁(yè)面的搜索點(diǎn)擊率。下面我們來(lái)舉一個(gè)例子供大家參考:
<meta name="keywords" content="政治,經(jīng)濟(jì), 科技,文化, 衛(wèi)生, 情感,心靈,娛樂(lè),生活,社會(huì),企業(yè),交通">
<meta name="description" content="政治,經(jīng)濟(jì), 科技,文化, 衛(wèi)生, 情感,心靈,娛樂(lè),生活,社會(huì),企業(yè),交通">
設(shè)置好這些關(guān)鍵字后,搜索引擎將會(huì)自動(dòng)把這些關(guān)鍵字添加到數(shù)據(jù)庫(kù)中,并根據(jù)這些關(guān)鍵字的密度來(lái)進(jìn)行合適的排序。
2、定義頁(yè)面的使用語(yǔ)言
這是meta標(biāo)簽最常見(jiàn)的功能,在制作網(wǎng)頁(yè)時(shí),我們?cè)诩僅TML代碼下都會(huì)看到它,它起的作用是定義你網(wǎng)頁(yè)的語(yǔ)言,當(dāng)瀏覽者訪問(wèn)你的網(wǎng)頁(yè)時(shí),瀏覽器會(huì)自動(dòng)識(shí)別并設(shè)置網(wǎng)頁(yè)中的語(yǔ)言,如果你網(wǎng)頁(yè)設(shè)置的是GB碼,而瀏覽者沒(méi)有安裝GB碼,這時(shí)網(wǎng)頁(yè)只會(huì)呈現(xiàn)瀏覽者所設(shè)置的瀏覽器默認(rèn)語(yǔ)言。同樣的,如果該網(wǎng)頁(yè)是英語(yǔ),那么charset=en。下面就是一個(gè)具有代表性的例子:
<meta http-equiv=″content-Type″ content=″text/html; charset=gb2312″〉
該代碼就表示將網(wǎng)頁(yè)的語(yǔ)言設(shè)置成國(guó)標(biāo)碼。
3、自動(dòng)刷新并指向新的頁(yè)面
如果你想使您的網(wǎng)頁(yè)在無(wú)人控制的情況下,能自動(dòng)在指定的時(shí)間內(nèi)去訪問(wèn)指定的網(wǎng)頁(yè),就可以使用meta標(biāo)簽的自動(dòng)刷新網(wǎng)頁(yè)的功能。下面我們來(lái)看一段代碼:
〈meta http-equiv=″refresh″ content=″2; URL=http://www.root.net″〉
這段代碼可以使當(dāng)前某一個(gè)網(wǎng)頁(yè)在2秒后自動(dòng)轉(zhuǎn)到http://www.root.net頁(yè)面中去,這就是meta的刷新作用,在content中,2代表設(shè)置的時(shí)間(單位為秒),而URL就是在指定的時(shí)間后自動(dòng)連接的網(wǎng)頁(yè)地址。
4、實(shí)現(xiàn)網(wǎng)頁(yè)轉(zhuǎn)換時(shí)的動(dòng)畫(huà)效果
使用meta標(biāo)簽,我們還可以在進(jìn)入網(wǎng)頁(yè)或者離開(kāi)網(wǎng)頁(yè)的一剎那實(shí)現(xiàn)動(dòng)畫(huà)效果,我們只要在頁(yè)面的html代碼中的<head></head>標(biāo)簽之間添加如下代碼就可以了:
<meta http-equiv="Page-Enter" content="revealTrans(duration=5.0, transition=20)">
<meta http-equiv="Page-Exit" content="revealTrans(duration=5.0, transition=20)">
一旦上述代碼被加到一個(gè)網(wǎng)頁(yè)中后,我們?cè)龠M(jìn)出頁(yè)面時(shí)就會(huì)看到一些特殊效果,這個(gè)功能其實(shí)與FrontPage2000中的Format/Page Transition一樣,但我們要注意的是所加網(wǎng)頁(yè)不能是一個(gè)Frame頁(yè);
5、網(wǎng)頁(yè)定級(jí)評(píng)價(jià)
IE4.0以上版本的瀏覽器可以防止瀏覽一些受限制的網(wǎng)站,而之所以瀏覽器會(huì)自動(dòng)識(shí)別某些網(wǎng)站是否受限制,就是因?yàn)樵诰W(wǎng)站meta標(biāo)簽中已經(jīng)設(shè)置好了該網(wǎng)站的級(jí)別,而該級(jí)別的評(píng)定是由美國(guó)RSAC,即娛樂(lè)委員會(huì)的評(píng)級(jí)機(jī)構(gòu)評(píng)定的,如果你需要評(píng)價(jià)自己的網(wǎng)站,可以連接到網(wǎng)站http://www.rsac.org/,按要求提交表格,那么RSAC會(huì)提供一段meta代碼給你,復(fù)制到自己網(wǎng)頁(yè)里就可以了。下面就是一段代碼的樣例:
〈meta http-equiv=″PICS-Label″
content=′(PICS-1.1 ″http://www.rsac.org/ratingsv01.html″
l gen true comment ″RSACi North America Server″
for ″http://www.rsac.org″
on ″2001.08.16T08:15-0500″
r (n 0 s 0 v 0 l 0))′〉
6、控制頁(yè)面緩沖
meta標(biāo)簽可以設(shè)置網(wǎng)頁(yè)到期的時(shí)間,也就是說(shuō),當(dāng)你在Internet Explorer 瀏覽器中設(shè)置瀏覽網(wǎng)頁(yè)時(shí)首先查看本地緩沖里的頁(yè)面,那么當(dāng)瀏覽某一網(wǎng)頁(yè),而本地緩沖又有時(shí),那么瀏覽器會(huì)自動(dòng)瀏覽緩沖區(qū)里的頁(yè)面,直到meta中設(shè)置的時(shí)間到期,這時(shí)候,瀏覽器才會(huì)去取得新頁(yè)面。例如下面這段代碼就表示網(wǎng)頁(yè)的到期時(shí)間是2001年1月12日18時(shí)18分18秒。
〈meta http-equiv=″expires″ content=″Friday, 12-Jan-2001 18:18:18 GMT″〉
7、控制網(wǎng)頁(yè)顯示的窗口
我們還可以使用meta標(biāo)簽來(lái)控制網(wǎng)頁(yè)顯示的窗口,只要在網(wǎng)頁(yè)中加入下面的代碼就可以了:<metahttp-equiv="window-target" content="_top">,這段代碼可以防止網(wǎng)頁(yè)被別人作為一個(gè)Frame調(diào)用。
本文來(lái)自CSDN博客,轉(zhuǎn)載出處:http://blog.csdn.net/mabgang/archive/2009/02/25/3934597.aspx
posted @
2009-08-17 09:39 absolute 閱讀(735) |
評(píng)論 (0) |
編輯 收藏
開(kāi)始 -> 執(zhí)行
regsvr32 /n /i:u shell32
然后重啟電腦就可以了!
posted @
2009-08-17 09:25 absolute 閱讀(274) |
評(píng)論 (0) |
編輯 收藏
1:MS SQL Server中,有NEWID函數(shù),返回的數(shù)據(jù)類型為UniqueIdentifier,長(zhǎng)度為36。
/*
例子:
declare @i uniqueidentifier
select @i=newid()
begin
print cast(@i as varchar(50))
end
*/
2:Oracle中,有SYS_GUID函數(shù),返回?cái)?shù)據(jù)類型為char,長(zhǎng)度為32。
/*
select sys_guid() from dual
*/
DB2中,沒(méi)有產(chǎn)生GUID的函數(shù),有一替代的函數(shù)generate_unique,返回的數(shù)據(jù)類型為CHAR FOR BIT,長(zhǎng)度為13。
SYBASE中,也有NEWID()函數(shù),返回的數(shù)據(jù)類型為char,長(zhǎng)度為36。
評(píng)述,GUID在保證數(shù)據(jù)記錄Primary Key唯一性,作用很大,DB2不支持這一函數(shù),商用主流數(shù)據(jù)庫(kù)中,DB2最差。MS SQL Server還有直接支持GUID的數(shù)據(jù)類型,支持最好。SYBASE的文檔作得最差,在其文檔中無(wú)法查到NEWID函數(shù),但是可以使用。
轉(zhuǎn)至:http://www.cnblogs.com/jobs/archive/2004/07/26/27533.html
posted @
2009-06-03 17:40 absolute 閱讀(622) |
評(píng)論 (0) |
編輯 收藏
一個(gè)和睦的家庭,一份勝任的工作。
讓為兒女辛勞一生的父母能老有所依,讓托付終身于我的伴侶感受幸福。
讓孩子在我的庇護(hù)下快樂(lè)成長(zhǎng),讓和我相處的朋友感覺(jué)踏實(shí)可靠。
posted @
2009-04-21 14:22 absolute|
編輯 收藏
之前寫(xiě)過(guò)一個(gè)簡(jiǎn)單的利用jQuery實(shí)現(xiàn)表格行的動(dòng)態(tài)增加與刪除的例子,有些人評(píng)論說(shuō)"如果表格中是input元素,那么刪除后的東西都將自動(dòng)替換,這樣應(yīng)該是有問(wèn)題的,建議樓主改進(jìn)!",故特意改進(jìn)了一下!
在項(xiàng)目中很多時(shí)候遇到這樣的問(wèn)題,需要?jiǎng)討B(tài)的增加、刪除表格的行,很多情況下我們都是在頁(yè)面來(lái)設(shè)置一個(gè)隱藏域的值,然后在js方法里動(dòng)態(tài)的++或--,在學(xué)習(xí)jQuery的過(guò)程中,我試著用簡(jiǎn)單的方法來(lái)模擬實(shí)現(xiàn)這一個(gè)過(guò)程
效果圖如下:
刪除之前

刪除2行后:
改進(jìn)后具體代碼如下:
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
<html xmlns="http://www.w3.org/1999/xhtml">
3
<head>
4
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
<script type="text/javascript" src="jquery-1.3.1.js"></script>
6
<title></title>
7
<script>
8
$(document).ready(function()
{
9
//<tr/>居中
10
$("#tab tr").attr("align","center");
11
12
//增加<tr/>
13
$("#but").click(function()
{
14
var _len = $("#tab tr").length;
15
$("#tab").append("<tr id="+_len+" align='center'>"
16
+"<td>"+_len+"</td>"
17
+"<td>Dynamic TR"+_len+"</td>"
18
+"<td><input type='text' name='desc"+_len+"' id='desc"+_len+"' /></td>"
19
+"<td><a href=\'#\' onclick=\'deltr("+_len+")\'>刪除</a></td>"
20
+"</tr>");
21
})
22
})
23
24
//刪除<tr/>
25
var deltr =function(index)
26
{
27
var _len = $("#tab tr").length;
28
$("tr[id='"+index+"']").remove();//刪除當(dāng)前行
29
for(var i=index+1,j=_len;i<j;i++)
30
{
31
var nextTxtVal = $("#desc"+i).val();
32
$("tr[id=\'"+i+"\']")
33
.replaceWith("<tr id="+(i-1)+" align='center'>"
34
+"<td>"+(i-1)+"</td>"
35
+"<td>Dynamic TR"+(i-1)+"</td>"
36
+"<td><input type='text' name='desc"+(i-1)+"' value='"+nextTxtVal+"' id='desc"+(i-1)+"'/></td>"
37
+"<td><a href=\'#\' onclick=\'deltr("+(i-1)+")\'>刪除</a></td>"
38
+"</tr>");
39
}
40
41
}
42
</script>
43
</head>
44
<body>
45
46
<table id="tab" border="1" width="60%" align="center" style="margin-top:20px">
47
<tr>
48
<td width="20%">序號(hào)</td>
49
<td>標(biāo)題</td>
50
<td>描述</td>
51
<td>操作</td>
52
</tr>
53
</table>
54
<div style="border:2px;
55
border-color:#00CC00;
56
margin-left:20%;
57
margin-top:20px">
58
<input type="button" id="but" value="增加"/>
59
</div>
60
</body>
61
</html>
62
源代碼下載:
Dynamic Table Column Operate
posted @
2009-03-13 10:41 absolute 閱讀(84153) |
評(píng)論 (25) |
編輯 收藏
1.搜索oracle安裝目錄,找到這倆個(gè)文件 tnsnames.ora 和 listener.ora ,還有一個(gè)大寫(xiě)的TNSNAMES.ORA不用管它。他們的路徑如下:如 盤(pán)符:\oracle\ora92\network\admin 他們?cè)谕粋€(gè)目錄里,編輯這倆個(gè)文件,把里面的Host= 的地方改為你的計(jì)算機(jī)名就行了。(注意有多個(gè),看仔細(xì)了。或者改成IP,下次改了IP注意再修改要統(tǒng)一)
2.如果這時(shí)登陸的話,肯定會(huì)提示你沒(méi)有監(jiān)聽(tīng)器,那是監(jiān)聽(tīng)的服務(wù)沒(méi)有開(kāi),到計(jì)算機(jī)的服務(wù)那進(jìn)入服務(wù)的方法:控制面板-〉管理工具-〉服務(wù)(倆個(gè)齒輪的那個(gè)圖標(biāo)),然后找到OracleOraHome92TNSListener這個(gè)服務(wù),把它啟動(dòng)了,就好了。
posted @
2009-02-09 10:16 absolute 閱讀(21051) |
評(píng)論 (11) |
編輯 收藏
Here i take jobs table of pubs databse for example,details as follow:
select top eachpage * from jobs where job_id not in ( select top (eachpage*(currentpage-1)) job_id from jobs order by job_id desc)) order by job_id desc;
explain:
1. eachpage : the number of each page show the recorder
2.currentpage: current page
notice:
the red line in the sentence,you should take care of it, because Microsoft SQLServer TOP Function can't support the expression .it can only support a number.
so before you prepare to buildup the sql sentence ,you should alread calculate the result of the expression about (eachpage*(currentpage-1)) .
Example:
set eachpage=3
currentpage=5
so (eachpage*(currentpage-1)) =12
select top 3 * from jobs where (job_id not in (select top 12 job_id from jobs order by job_id desc)) order by job_id desc
posted @
2008-12-03 16:00 absolute 閱讀(544) |
評(píng)論 (0) |
編輯 收藏