#
TRANSACTION_NONE:
正式地講,TRANSACTION_NONE不是一個(gè)有效的事務(wù)級(jí)別。
根據(jù)java.sql Connection API文件,這個(gè)級(jí)別表示事務(wù)是
不被支持的,因此理論上說(shuō)你不能使用TRANSACTION_NONE作
為一個(gè)自變量賦給Connection.setTransactionIsolation()
方法。事實(shí)上,雖然一些數(shù)據(jù)庫(kù)實(shí)施了這個(gè)事務(wù)級(jí)別,但是
Oracle9i卻沒(méi)有實(shí)施。
臟讀取(TRANSACTION_READ_UNCOMMITTE):
(允許的操作 讀-讀 讀-寫 寫-讀 (臟數(shù)據(jù),不可重復(fù)讀,虛讀) )
表示,這個(gè)事務(wù)級(jí)別
允許讀取臟數(shù)據(jù),什么是臟數(shù)據(jù)?就是指還沒(méi)有提交的數(shù)據(jù).
因?yàn)檫@個(gè)級(jí)別,是允許一個(gè)事務(wù)(A)讀取另一個(gè)事務(wù)(B)
還沒(méi)有提交的數(shù)據(jù).一旦事務(wù)B發(fā)生異常退出.而修改了的數(shù)據(jù)
卻還沒(méi)提交,或者新插入的數(shù)據(jù)和刪除了的數(shù)據(jù)都還沒(méi)有
提交,導(dǎo)致事務(wù)A拿到了一些臟數(shù)據(jù),或者錯(cuò)誤數(shù)據(jù);
因此在這個(gè)事務(wù)級(jí)別里是會(huì)發(fā)生臟讀,重復(fù)讀,錯(cuò)誤讀取;
禁止臟讀(TRANSACTION_READ_COMMITTED):
(允許的操作 讀-讀 讀-寫 (不可重復(fù)讀,虛讀))
在這個(gè)級(jí)別中,事務(wù)A
只能讀取一些提交的數(shù)據(jù),如事務(wù)B添加了一條記錄,但是
如果事務(wù)B沒(méi)有提交,那么事務(wù)A是讀不到的,所以該事務(wù)級(jí)別,
把臟讀給屏蔽掉了.---卻允許重復(fù)讀取,和錯(cuò)誤讀取.
什么是重復(fù)讀取呢?譬如,事務(wù)A讀取了一個(gè)數(shù)據(jù),這個(gè)數(shù)據(jù)
的值為"helloworld",事務(wù)A準(zhǔn)備利用這個(gè)數(shù)據(jù)來(lái)更新一下
其他數(shù)據(jù),但這個(gè)時(shí)候事務(wù)B開(kāi)始對(duì)這個(gè)數(shù)據(jù)進(jìn)行修改,并且
提交---"hello 無(wú)名氏",由于是已經(jīng)提交了,所以事務(wù)A是可以
看到這個(gè)數(shù)據(jù)的,當(dāng)事務(wù)A在沒(méi)提交事務(wù)之前,它想看下數(shù)據(jù)
是否正確,這個(gè)時(shí)候它發(fā)現(xiàn),新讀出的數(shù)據(jù)已經(jīng)和原來(lái)的數(shù)據(jù)
不一樣了(這就是重復(fù)讀取);
允許重復(fù)讀取(TRANSACTION_REPEATABLE_READ):
(允許的操作 讀-讀 讀-寫(僅允許插入,不允許刪除和修改)(虛讀))
在這個(gè)級(jí)別中,
是禁止了臟讀,和取消了不可重復(fù)讀取,但是沒(méi)有禁止錯(cuò)誤讀取;
這個(gè)級(jí)別的事務(wù)比較嚴(yán)格,當(dāng)一個(gè)事務(wù)A在讀取一個(gè)值的時(shí)候
是不允許另一個(gè)事務(wù)對(duì)該值進(jìn)行修改的;
為了允許重復(fù)讀取,可以選用該級(jí)別,因?yàn)門RANSACTION_READ_
COMMITED這個(gè)事務(wù)級(jí)別,是允許重復(fù)讀取提交的數(shù)據(jù)的,如果
事務(wù)A在讀取一個(gè)數(shù)值的時(shí)候,值為"Hello World!",但這個(gè)時(shí)
候事務(wù)B對(duì)"Hello World"值進(jìn)行修改了,改為"Hello EveryOne"
然后提交,當(dāng)事務(wù)A再次去讀取這個(gè)值的時(shí)候,去發(fā)現(xiàn)原來(lái)讀到
的值改變了,變成了"Hello EveryOne",為了防止出現(xiàn)這種情況
可以禁止重復(fù)提交,目的是為了重復(fù)讀取不會(huì)出錯(cuò)!那么這個(gè)
時(shí)候就可以選擇
TRANSACTION_REPEATABLE_READ這個(gè)級(jí)別,
這個(gè)級(jí)別就是用來(lái)禁止重復(fù)提交的.
(實(shí)際上是加了行鎖,鎖定了選中的數(shù)據(jù),不允許修改,但是允許插入新的數(shù)據(jù))
雖然這個(gè)時(shí)候是禁止了重復(fù)提交,但卻可以添加刪除,
比如事務(wù)A,作了個(gè)查詢語(yǔ)句"select * from 無(wú)名氏 "; 這個(gè)時(shí)候是允許事務(wù)B做這樣的操作的:
"insert into 無(wú)名氏 values(2,'aaa')"; 這個(gè)時(shí)候,
事務(wù)A再次做讀取操作的時(shí)候,卻發(fā)現(xiàn)數(shù)據(jù)莫名其妙的
多了一條,這就是所謂的---幻影讀取;
禁止幻讀(TRANSACTION_SERIALIZABLE):
事務(wù)的最高級(jí)別(串行化 操作)事務(wù)級(jí)別最高,所耗費(fèi)的性能也越多.
禁止幻讀禁止了臟讀,禁止了重復(fù)提交和幻讀.
也就是當(dāng)事務(wù)A在按條件查詢的時(shí)候,事務(wù)A一旦沒(méi)有提
交,任何事務(wù)都不能對(duì)事務(wù)A的資源進(jìn)行操作--- 保證
事務(wù)A的操作真正的原子性!
注意:在Oracle中只支持兩種級(jí)別:
TRANSACTION_READ_COMMITTED(默認(rèn)的級(jí)別)(只有提交后
才可以讀取)而每一個(gè)終端進(jìn)行自己的DML操作 都自動(dòng)開(kāi)啟了一個(gè)事務(wù)
TRANSACTION_SERIALIZABLE(竄行化操作)
Java運(yùn)行環(huán)境有一個(gè)字符串池,由String類維護(hù)。執(zhí)行語(yǔ)句String str="abc"時(shí),首先查看字符串池中是否存在字符串"abc",如果存在則直接將"abc"賦給str,如果不存在則先在字符串池中新建一個(gè)字符串"abc",然后再將其賦給str。執(zhí)行語(yǔ)句String str=new String("abc")時(shí),不管字符串池中是否存在字符串"abc",直接新建一個(gè)字符串"abc"(注意:新建的字符串"abc"不是在字符串池中),然后將其付給str。前一語(yǔ)句的效率高,后一語(yǔ)句的效率低,因?yàn)樾陆ㄗ址加脙?nèi)存空間。String str = new String()創(chuàng)建了一個(gè)空字符串,與String str=new String("")相同。
public String intern()
- 返回字符串對(duì)象的規(guī)范化表示形式。
一個(gè)初始為空的字符串池,它由類 String
私有地維護(hù)。
當(dāng)調(diào)用 intern 方法時(shí),如果池已經(jīng)包含一個(gè)等于此 String
對(duì)象的字符串(用 equals(Object)
方法確定),則返回池中的字符串。否則,將此 String
對(duì)象添加到池中,并返回此 String
對(duì)象的引用。
它遵循以下規(guī)則:對(duì)于任意兩個(gè)字符串 s
和 t
,當(dāng)且僅當(dāng) s.equals(t)
為 true
時(shí),s.intern() == t.intern()
才為 true
。
String.intern();
再補(bǔ)充介紹一點(diǎn):存在于.class文件中的常量池,在運(yùn)行期間被jvm裝載,并且可以擴(kuò)充。String的intern()方法就是擴(kuò)充常量池的一個(gè)方法;當(dāng)一個(gè)String實(shí)例str調(diào)用intern()方法時(shí),java查找常量池中是否有相同unicode的字符串常量,如果有,則返回其引用,如果沒(méi)有,則在常量池中增加一個(gè)unicode等于str的字符串并返回它的引用。
例3:
String s0=”kvill”;
String s1=new String(“kvill”);
String s2=new String(“kvill”);
System.out.println(s0==s1);
S1.intern();
S2=s2.intern();
System.out.println(s0==s1);
System.out.prntln(s0==s1.intern());
System.out.println(s0==s2);
結(jié)果為:
False
False //雖然執(zhí)行了s1.intern(),但它的返回值沒(méi)有賦給s1
True
True
最后再破除一個(gè)錯(cuò)誤的理解:
有人說(shuō),“使用String.intern()方法可以將一個(gè)String類保存到一個(gè)全局的String表中,如果具有相同值的unicode字符串已經(jīng)在這個(gè)表中,那么該方法返回表中已有字符串的地址,如果在表中沒(méi)有相同值的字符串,則將自己的地址注冊(cè)到表中”如果把這個(gè)全局的String表理解為常量吃的話,最后一句話“如果在表中沒(méi)有相同值的字符串,則將自己的地址注冊(cè)到表中”是錯(cuò)的。
例4:
String s1=new String(“kvill”);
String s2=s1.intern();
System.out.println(s1==s1.intern());
System.out.println(s1+” ”+s2);
System.out.println(s2==s1.intern());
結(jié)果是:
False
Kvill kvill
True
我們沒(méi)有聲明一個(gè)”kvill”常量,所以常量池中一開(kāi)始沒(méi)有”kvill”的,當(dāng)我們調(diào)用s1.intern()后就在常量池中新添加了一個(gè)”kvill”常量,原來(lái)的不在常量池中的”kvill”仍然存在,也就不是“把自己的地址注冊(cè)到常量池中”了。
例5:
String str1=”java”;
String str2=”blog”;
String s=str1+str2;
System.out.println(s==”javablog”);
結(jié)果是false。Jvm確實(shí)對(duì)型如String str1=”java”;的String對(duì)象放在常量池里,但是它是在編譯時(shí)那么做的,而String s=str1+str2;是在運(yùn)行時(shí)刻才能知道,也就是說(shuō)str1+str2是在堆里創(chuàng)建的,所以結(jié)果為false了。
比較兩個(gè)已經(jīng)存在于字符串池中字符串對(duì)象可以用"=="進(jìn)行,擁有比equals操作符更快的速度
摘要:
1package com;
2
3import java.io.BufferedReader;
4import java.io.ByteArrayOutputStream;
5import java.io.Filte...
閱讀全文
//整數(shù)到字節(jié)數(shù)組的轉(zhuǎn)換 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng) h$_g8Lbx g s
public byte[] intToByte(int intValue) {
O R-v0OS&{;u0 byte[] result = new byte[4];
e!sm#DN0 result[0] = (byte) ( (intValue & 0xFF000000) >> 24);軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)3e Ou-l*l
result[1] = (byte) ( (intValue & 0x00FF0000) >> 16);軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)%F3hN!XoC
result[2] = (byte) ( (intValue & 0x0000FF00) >> 8);
d"TS)ro;L`;A:eI0 result[3] = (byte) ( (intValue & 0x000000FF));軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)t1^O{;_,S"e `
return result;軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)q*~[? n M"i
}
//字節(jié)數(shù)組到整數(shù)的轉(zhuǎn)換 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)i f9``3@0LZK&R
public static int byteToInt(byte[] b) { 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)Rb~,Ws"u1m
public static int byteToInt(byte[] byteVal) {
2X/cH bIM0 int result = 0;軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)7e5~3p"J r\ _
for (int i = 0; i < byteVal.length; i++) {
1i {T q a2eT V_.^!Q0 int tmpVal = (byteVal[i] << (8 * (3 - i)));
&?x%pQ4_9T7k0 switch (i) {軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)A P/u[ C,J&FA#f
case 0:軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)B,}\z`]8UU
tmpVal = tmpVal & 0xFF000000;軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)*yS6X$y9n*md~
break;
piL/jY)lkZ?0 case 1:軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)5D#YS%w3f X|g
tmpVal = tmpVal & 0x00FF0000;軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)c?Iu I w
break;軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)~&E3Vmp0_;}@
case 2:
6j3t1F;iX+K4{0 tmpVal = tmpVal & 0x0000FF00;軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)5fD7H.i y R a/q
break;
]5b:h MMa!K0 case 3:
)^~_.\A0 tmpVal = tmpVal & 0x000000FF;
t2}8J f7A E~eH2[0 break;軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)\? d:MN#D#iN
}
MJ:c.rxWE0X"e"^*@0 result = result | tmpVal;軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)9R lE\Q(g&SAJ
}軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)1ixe#~9]lyF},T
return result;軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)d,d"L^/fC?*upX
}
//字符到字節(jié)轉(zhuǎn)換
Q N"P6tq.b@~0 public static byte[] charToByte(char ch){ 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)%]|X,~-vb'?$SU
int temp=(int)ch; 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)'L9cx"B:` Ak
byte[] b=new byte[2]; 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)2C8j1U/i1[ ls
for (int i=b.length-1;i>-1;i--){
'C3^]_V:qz0 b = new Integer(temp&0xff).byteValue(); //將最高位保存在最低位 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng) |S`"I h%YQU\(g
temp = temp >> 8; //向右移8位 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)!s/jv'Z2R
} 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)R+C:w4LY4Xu!M
return b; 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)%n+x/Y ZV`6T\
}
//字節(jié)到字符轉(zhuǎn)換 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)n:gg'^!_@NF p*@B
public static char byteToChar(byte[] b){ 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)(}xOQ:b
int s=0;
ZuYw~ac0 if(b[0]>0) 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)'Tsc(rq
s+=b[0]; 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)5G]%j*fg)wk$Z
else 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)q#i2kb@
s+=256+b[0];
#iCo0kd+|i0 s*=256; 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)X%Zn?-k9h5q
if(b[1]>0) 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)(E0v"C(Bv4Q
s+=b[1];
+{`z$m a R0 else 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)D^j aODKA3T
s+=256+b[1]; 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)\ hv8We}U)b
char ch=(char)s; 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)#JLO"h;NH*AHb0LLt!m
return ch; 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)$g,Mu0?JT#Ef&xi
}
//浮點(diǎn)到字節(jié)轉(zhuǎn)換
de4w8L-MpD8{\0 public static byte[] doubleToByte(double d){ 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng),~9g3FuQ9q;sMCa
byte[] b=new byte[8]; 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng) UY:}1oV:\ {-uZ7Ed
long l=Double.doubleToLongBits(d);
ar8f3|"@b(g'L0 for(int i=0;i<b.length;i++){
%t4roUTU;zgxI0 b=new Long(l).byteValue(); 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)*I%@7R#} bb0P
l=l>>8;
E$^+\"u!h!Y3^0 } 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)%])x)S)u)i,ul
return b;
n`(]3K k`0 }
//字節(jié)到浮點(diǎn)轉(zhuǎn)換
KwV!^Kt2q#p j0 public static double byteToDouble(byte[] b){
:C.}9o GI9r0 long l;
l=b[0]; 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)^4_/j4oL\*l b
l&=0xff; 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)8x-fA;H.\
l|=((long)b[1]<<8); 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)P\Z9tk
l&=0xffff;
u;A&Vs3n.p]*K/B0 l|=((long)b[2]<<16);
)_ ^,F\ n3o0 l&=0xffffff;
` z3~*PIe aMK0 l|=((long)b[3]<<24);
DM!ldb&|U(A*J0 l&=0xffffffffl;
'i)k yh\0 l|=((long)b[4]<<32); 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng) T$D_Wr:M!_,E^a
l&=0xffffffffffl;
l|=((long)b[5]<<40); 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)g3m+GN$_)J1h,F.^(u.H d
l&=0xffffffffffffl;
,gJ&o'u N7\Sp0 l|=((long)b[6]<<48);
:m@s7\WCt+B0 l&=0xffffffffffffffl;
,x)T:eO e2d![0 l|=((long)b[7]<<56);
}^MS.x%_7P0 return Double.longBitsToDouble(l); 軟件測(cè)試專業(yè)網(wǎng)站:51Testing軟件測(cè)試網(wǎng)Q)at;{k9Tq
}
摘要: 1package com.sf;
2
3import java.text.CollationKey;
4import java.text.Collator;
5import java.util.Comparator;
6import java.util.Map;
7...
閱讀全文
一、最常用的是thin模式 利用DriverManager得到Connection
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl為數(shù)據(jù)庫(kù)的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);
二、JDBC的另外一種方式是三層結(jié)構(gòu),就是在應(yīng)用服務(wù)器(tomcat/weblogic)上面建立DataSource
1
Context ctx=new InitiaContext(Hashtable env);
2
DataSource ds=(DataSource)ctx.lookUp("jdbc/OraDB");
3
Connection con=ds.getConnection();
應(yīng)用中配置如下:未測(cè)試,僅轉(zhuǎn)載。
一、配置server.xml
找到配置發(fā)布應(yīng)用程序的地方:<Context path=”” docBase=”d:\_webs”/>
將這個(gè)改為:
<Context path="" docBase="D:\ _web" debug="0">
<!—聲明一個(gè)數(shù)據(jù)源,程序通過(guò)JNDI找到該數(shù)據(jù)源。
name指出數(shù)據(jù)源的名稱為jdbc/OraDB,
auth表明連接池管理的權(quán)限,
type指出該數(shù)據(jù)源的類型-->
<Resource name="jdbc/OraDB" auth="SERVLET" type="javax.sql.DataSource"/>
<!—配置該數(shù)據(jù)源的屬性
name指出數(shù)據(jù)源的名稱
-->
<ResourceParams name="jdbc/OraDB">
<!—連接數(shù)據(jù)庫(kù)的用戶名-->
<parameter>
<name>username</name>
<value>chenws</value>
</parameter>
<!—連接數(shù)據(jù)庫(kù)的密碼-->
<parameter>
<name>password</name>
<value>admin</value>
</parameter>
<!—連接數(shù)據(jù)庫(kù)的jdbc驅(qū)動(dòng)程序-->
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<!—連接數(shù)據(jù)庫(kù)的url-->
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@192.168.39.215:1521:jetchin</value>
</parameter>
</ResourceParams>
</Context>
實(shí)際上,配置數(shù)據(jù)源的屬性不止以上那些,還有其他的比如連接時(shí)間的限制,連接數(shù)量的限制等等。這里我們并沒(méi)有給出,只是使用了tomcat提供的默認(rèn)屬性罷了。
注意:要讓該數(shù)據(jù)源有效,必須將oracle的classes12.zip改名為classes12.jar,然后拷貝到
tomcat安裝目錄下的/common/lib中。
二、配置web.xml
到web應(yīng)用程序目錄下的web-inf中,打開(kāi)web.xml,加入如下的配置:
定義數(shù)據(jù)源參照:
<resource-ref>
<!—數(shù)據(jù)源描述,可有可無(wú)-->
<description>Oracle Datasource example</description>
<!--數(shù)據(jù)源名稱-->
<res-ref-name>jdbc/OraDB</res-ref-name>
<!—數(shù)據(jù)源類型-->
<res-type>javax.sql.DataSource</res-type>
<!—連接池管理權(quán)限-->
<res-auth>SERVLET</res-auth>
</resource-ref>
另外在weblogic中進(jìn)行配置可參考如下文章:
WebLogic Server7.0中Oracle的JDBC Pool/DataSource配置指南
|
|
第一步,去oracle下載最新的 oracle JDBC driver。
一共2個(gè)文件,ojdbc14.jar和nls_charset12.zip。
第一個(gè)文件是驅(qū)動(dòng)程序所在,第二個(gè)是支持國(guó)際化的包。
接下來(lái),把這兩個(gè)文件加入 WLS 的 classpath。
修改 Bea\Weblogic\server\bin\startWLS.cmd(或者相應(yīng)的Unix啟動(dòng)文件,.sh結(jié)尾的),
在文件開(kāi)頭加入 PRE_CLASSPATH=C:\ojdbc14.jar;C:\nls_charset12.zip。注意文件的路徑。
最后可以考慮把Bea\Weblogic\server\lib\classes12.zip刪除,我不保證正確性,只是怕有兼容性問(wèn)題。
最后,啟動(dòng)weblogic server,進(jìn)入console,在Connection Pool里邊,填入一下資料。
General欄目:
Name:MyOracle_CP
URL:jdbc:oracle:thin:@server:port:sid (自己按照情況修改!)
比如:jdbc:oracle:thin:@192.168.0.2:1521:Crystal
DriverName:oracle.jdbc.driver.OracleDriver
Properties
user=SYS (這里是用戶,最好不要用SYS,SYSTEM等系統(tǒng)用戶)
ACL Name: (空)
password: 用戶密碼
如圖:

Connection欄目:
CapacityIncrement = 50
MaxCapacity = 100
Capacity Increment: 5
Login Delay Seconds: 0 seconds
Refresh Period: 10 minutes
Supports Local Transaction 不要打勾
Allow Shrinking 打勾
Shrink Period: 15 minutes
Prepared Statement Cache Size: 5
如圖:

Test欄目:
TestTableName:SCOTT.EMP (這里需要改動(dòng),適應(yīng)你自己的表,wls用來(lái)做連接測(cè)試用的)
TestConnectionsOnReleasetrue 打勾
TestConnectionsOnReservetrue 打勾
最后,點(diǎn)擊Apply,然后去Targets,選中你的server,點(diǎn)右箭頭,使你的server進(jìn)入Chosen欄目,最后Apply。(如圖)

查看dos窗口,是否有錯(cuò)誤,如果沒(méi)有則繼續(xù),如果有的話,自己查看填寫的內(nèi)容。
至此,Connection Pool已經(jīng)配置完畢。
接下來(lái),該配置(TX)DataSource了。
從昨天的panel里邊,單擊DataSources/TX DataSources,進(jìn)入配置界面。
1。單擊Configure a new JDBC Tx Data Source..配置新的datasource
2。填入以下數(shù)據(jù):
Name: MyDataSource (自己隨便起的)
JNDI: jdbc/OracleDS (這里就是你lookup的時(shí)候填入的名字,自己想吧。
Pool Name: MyOracle_CP (一定要對(duì)應(yīng)你的Connection Pool的 Name)
把后邊兩項(xiàng)打上勾。
第一個(gè)是模擬2階提交模式,如果數(shù)據(jù)庫(kù)driver本身不支持的話。(就是XA標(biāo)準(zhǔn),分布式提交)
第二個(gè)是 行預(yù)讀。如圖:

點(diǎn)擊Create,然后去Targets里邊,把你的 server放入chosen,點(diǎn)擊apply。。
配置完成。。。
最后檢查你的DataSource是否已經(jīng)成功部屬:
進(jìn)入你的server的JNDI Tree,很容易就可以看到的。:)。如圖:

|