java自定义数据库连接池Word文件下载.docx
- 文档编号:20501226
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:17
- 大小:18.98KB
java自定义数据库连接池Word文件下载.docx
《java自定义数据库连接池Word文件下载.docx》由会员分享,可在线阅读,更多相关《java自定义数据库连接池Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
packagedataWebService;
importjava.sql.DriverManager;
importjava.util.Date;
importjava.sql.Connection;
importjava.sql.SQLException;
importjava.sql.Statement;
publicclassDBPool{
privateStringcls;
privateStringurl;
privateStringusr;
privateStringpss;
privateintconnCount=3;
//连接数
privateConnection[]connections;
//保存数据库连接
privateString[]connStatus;
//已连可用Y已连不可用N未连接X
privateDate[]lastQueryTime;
//时间戳
publicDBPool(DBPoolConfigurationpoolConfiguration){
this.connCount=poolConfiguration.getConnCount();
this.cls=poolConfiguration.getCls();
this.url=poolConfiguration.getUrl();
this.usr=poolConfiguration.getUsr();
this.pss=poolConfiguration.getPss();
this.connections=newConnection[this.connCount];
this.connStatus=newString[this.connCount];
for(inti=0;
i<
this.connCount;
i++){
this.connStatus[i]="
X"
;
//初始化全部未连接
}
this.lastQueryTime=newDate[this.connCount];
publicDBPool(Stringcls,Stringurl,Stringusr,Stringpss){
this.cls=cls;
this.url=url;
this.usr=usr;
this.pss=pss;
publicvoidinitPool(){
if(connCount<
1){
System.out.println("
请正确设置连接池窗口个数"
}else{
try{
Class.forName(this.cls);
//registerclass
}catch(ClassNotFoundExceptione){
System.out.println(e.getMessage());
}catch(Exceptione){
//otherexceptions
this.connections[i]=DriverManager.getConnection(this.url,this.usr,this.pss);
Y"
}catch(SQLExceptione){
initPoolisready..."
}//endif
publicvoidfreePool(){
this.connections[i].commit();
this.connections[i].close();
this.lastQueryTime[i]=null;
}catch(Exceptione1){
System.out.println(e1.getMessage());
//justforcatch
freePoolisover..."
publicDBPoolConnectiongetPoolConn()throwsDBPoolIsFullException{
DBPoolConnectionpoolConnection=newDBPoolConnection();
poolConnection.connNbr=getConnNbr();
if(poolConnection.connNbr==-1){
thrownewDBPoolIsFullException("
连接池已满"
poolConnection.conn=getConn(poolConnection.connNbr);
returnpoolConnection;
publicvoidfreePoolConn(DBPoolConnectionpoolConnection){
if(poolConnection==null){
poolConnection==null,不需要释放"
freeConn(poolConnection.connNbr);
publicvoidprintPoolStatus(){
this.connStatus.length;
"
System.out.print(this.connStatus[i].toString());
if(this.lastQueryTime[i]==null){
System.out.print("
-[null]"
-["
+this.lastQueryTime[i].toString()+"
]"
publicStringgetCls(){
returnthis.cls;
publicStringgetUrl(){
returnthis.url;
publicStringgetUsr(){
returnthis.usr;
intgetConnNbr(){
intiConn=-1;
if(this.connStatus[i].equals("
)){
this.lastQueryTime[i]=newDate();
N"
iConn=i;
break;
returniConn;
ConnectiongetConn(inti){
returnthis.connections[i];
voidcloseConnForTest(DBPoolConnectionpoolConnection){
this.connections[poolConnection.connNbr].close();
booleancheckConn(DBPoolConnectionpoolConnection){
Statementstmt=null;
StringcheckMessage="
booleancheckResult=true;
//检查连接是否有效
Stringsql="
select*fromdual"
stmt=this.connections[poolConnection.connNbr].createStatement();
stmt.executeQuery(sql);
//executesql
stmt.close();
checkMessage="
checkConn:
checkMessage:
executesqlsuccess"
System.out.println(checkMessage);
checkMessage=e.getMessage();
if(checkMessage==null){
checkMessage="
e.getMessage()isnull"
//采取激进重连的策略,尽量避免业务中断
if(checkMessage.indexOf("
ORA-00942"
)>
=0){
checkResult=true;
//不需要重连
}elseif(checkMessage.indexOf("
doesnotexist"
Syntaxerror"
checkResult=false;
//需要重连
returncheckResult;
booleanresetConn(DBPoolConnectionpoolConnection){
booleanresult=false;
//默认不需要重建连接
poolConnection==null,不知道您想重设哪个连接"
}elseif(poolConnection.connNbr==-1){
poolConnection.connNbr==-1,不知道您想重设哪个连接"
if(checkConn(poolConnection)==true){
连接有效,不需要重设"
//重设连接
this.connections[poolConnection.connNbr]=DriverManager.getConnection(this.url,this.usr,this.pss);
this.connStatus[poolConnection.connNbr]="
System.out.println(poolConnection.connNbr+"
连接已重建"
result=true;
//告知调用者连接已重建
returnresult;
voidfreeConn(inti){
if(i==-1){
i=-1,不需要释放"
}
DBPoolConfiguration.java
packagedataWebService;
publicclassDBPoolConfiguration{
privateintconnCount;
publicStringgetCls(){
returncls;
publicvoidsetCls(Stringcls){
this.cls=cls;
publicStringgetUrl(){
returnurl;
publicvoidsetUrl(Stringurl){
this.url=url;
publicStringgetUsr(){
returnusr;
publicvoidsetUsr(Stringusr){
this.usr=usr;
publicStringgetPss(){
returnpss;
publicvoidsetPss(Stringpss){
this.pss=pss;
publicintgetConnCount(){
returnconnCount;
publicvoidsetConnCount(intconnCount){
this.connCount=connCount;
DBPoolConnection.java:
publicclassDBPoolConnection{
publicintconnNbr=-1;
publicConnectionconn=null;
DBPoolConnection(){
this.connNbr=-1;
this.conn=null;
DBPoolIsFullException.java
publicclassDBPoolIsFullExceptionextendsException{
staticfinallongserialVersionUID=1L;
DBPoolIsFullException(Stringmessage){
super(message);
Test.java
packagemyAction;
importdataWebService.DBPool;
importdataWebService.DBPoolConnection;
importdataWebService.DBPoolConfiguration;
importjava.sql.ResultSet;
importjava.sql.ResultSetMetaData;
publicclassTest{
staticStringrpad(Stringstr,intlen){
Strings=str;
if(s==null){
s="
while(s.getBytes().length<
len){
s+="
"
returns;
publicstaticvoidmain(String[]args){
//初始化
Stringcls="
url="
usr="
pss="
sql="
ResultSetrs=null;
StringgapStr="
|"
//分隔符
intconnCount=2;
//最大连接数
//连接Oracle配置
cls="
oracle.jdbc.driver.OracleDriver"
url="
jdbc:
oracle:
thin:
@localhost:
1521:
myoradb"
usr="
abc"
pss="
123"
sql="
selectt.field_id,t.field_content,to_char(t.record_create_date,'
YYYYMMDD'
)dayfrommy_tablet"
DBPoolConfigurationpoolConfiguration=newDBPoolConfiguration();
poolConfiguration.setCls(cls);
poolConfiguration.setUrl(url);
poolConfiguration.setUsr(usr);
poolConfiguration.setPss(pss);
poolConfiguration.setConnCount(connCount);
DBPoolmyPool=newDBPool(poolConfiguration);
myPool.initPool();
afterinitPool"
myPool.printPoolStatus();
DBPoolConnectionc1=null;
c1=myPool.getPoolConn();
aftergetPoolConn"
stmt=c1.conn.createSta
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 自定义 数据库连接