*************************/
public synchronized
connection getconnection() {
//get connection and set to delay time
long starttime = new java.util.date().gettime();
connection con = null;
while (con == null) {
con = newconnection();
if (con != null) {
//log("create new connection!");
break;
}
try {
log("连接超时,重新连接,等待" + timeout + "ms");
wait(timeout);
}
catch (interruptedexception e) {
log(e, "连接超时!");
}
if ( (new java.util.date().gettime() - starttime) >= timeout) {
log("connection timeout!");
break;
}
}
return con;
}
private
connection newconnection() {
connection con = null;
try {
con = ds.getconnection();
if (con == null) {
throw new exception("create connection failed!");
}
}
catch (exception e) {
log("create connection failed!");
system.out.println(e.getmessage());
}
return con;
}
/************************************
* release the connection
* @param conn connection
* @param stmt statement
* @param pstmt preparedstatement
************************************/
public synchronized
void freeconnection(connection conn,
statement stmt,
preparedstatement pstmt) {
try {
//close statement
if (stmt != null) {
stmt.close();
stmt = null;
//log("close statement......");
}
//close preparedstatement
if (pstmt != null) {
pstmt.close();
pstmt = null;
//log("close preparedstatement......");
}
}
catch (exception e) {
system.out.println(e.getmessage());
}
try {
//close connection
if (conn != null) {
conn.close();
conn = null;
//log("close connection......");
}
}
catch (sqlexception e) {
log(e, "释放资源出错!");
}
}
/************************************
* write log file.
* @param s string
************************************/
private
void log(string s) {
if (verbose) {
system.out.println(new java.util.date() + ":" + s);
//logger.info(new java.util.date()+s);
}
}
/************************************
* write log file.
* @param ex object
************************************/
private
void logerr(object ex) {
if (verbose) {
//system.out.println(new java.util.date()+":"+s);
//logger.error(ex);
}
}
/************************************
* write log file.
* @param e throwable
* @param msg string
************************************/
private
void log(throwable e, string msg) {
system.out.println(new java.util.date() + ": " + msg);
//logger.info(new java.util.date() + ": " + msg, e);
}
……
}
ok,你现在可以方便的使用连接池了,想要一个得一个,记得要释放哦,连接池的数量总是有限的。
二、中文问题照样很简单
每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ascii码, 中国的 gb2312-80,日本的 jis 等,作为该国家/区域内信息处理的基础,有着统一编码的重要作用。字符编码集按长度分为 sbcs(单字节字符集),dbcs(双字节字符集)两大类。早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本(l10n),为了区分,引进了 lang, codepage 等概念。但是由于各个本地字符集代码范围重叠,相互间信息交换困难;软件各个本地化版本独立维护成本较高。因此有必要将本地化工作中的共性抽取出来,作一致处理,将特别的本地化处理内容降低到最少。这也就是所谓的国际化(i18n)。各种语言信息被进一步规范为 locale 信息。处理的底层字符集变成了几乎包含了所有字形的 unicode。
现在大部分具有国际化特征的软件核心字符处理都是以 unicode 为基础的,在软件运行时根据当时的 locale/lang/codepage 设置确定相应的本地字符编码设置,并依此处理本地字符。在处理过程中需要实现 unicode 和本地字符集的相互转换,甚或以 unicode 为中间的两个不同本地字符集的相互转换。这种方式在网络环境下被进一步延伸,任何网络两端的字符信息也需要根据字符集的设置转换成可接受的内容。
java 语言内部是用 unicode 表示字符的,遵守 unicode v2.0。java 程序无论是从/往文件系统以字符流读/写文件,还是往 url 连接写 html 信息,或从 url 连接读取参数值,都会有字符编码的转换。这样做虽然增加了编程的复杂度,容易引起混淆,但却是符合国际化的思想的。从理论上来说,这些根据字符集设置而进行的字符转换不应该产生太多问题。而事实是由于应用程序的实际运行环境不同,unicode 和各个本地字符集的补充、完善,以及系统或应用程序实现的不规范,转码时出现的问题时时困扰着程序员和用户。
其实解决 java 程序中的汉字编码问题的方法往往很简单,但理解其背后的原因,定位问题,还需要了解现有的汉字编码和编码转换。相信这样的东西大家都见过了
new string(request.getparameter("test").getbytes("iso-8859-1"),"gbk")
但这样的代码相信不是一个解决的办法,这样会增加程序的复杂度,写数据库,提交表单,url中传中文参数,到处都是中文问题!作为一个连走路都要算计最短距离的懒人,当然不愿天天叨念着new string(request.getparameter("test").getbytes("iso-8859-1"),"gbk"),然汉战战兢兢的处理各种字符转换的问题,我跋山涉水,翻山越岭,终于找到了完美的解决方式,在tomcat中只需要简单的配置,引入2个文件就可以轻松搞定。
前