jsp開發(fā)中調(diào)用tomcat數(shù)據(jù)庫連接池,可能很多朋友都會,下面這段代碼相信用過的人都很熟悉:
list1:testpool.jsp
<%
initialcontext ctx=new initialcontext();
datasource ds = (datasource)ctx.lookup("java:comp/env/jdbc/mysql");
connection conn = ds.getconnection();
statement stmt = conn.createstatement();
string strsql = " select * from t_user";
resultset rs = stmt.executequery(strsql);
......
stmt.close();
rs.close();
conn.close();
%>
但是許多人不知tomcat啟動時(shí),用jndi對數(shù)據(jù)源做了綁定,所以就不知道如何在j2se中用main函數(shù)調(diào)用這個數(shù)據(jù)源,其實(shí),只要把testpool.jsp做一點(diǎn)改動:
initialcontext ctx=new initialcontext();
object o = ctx.lookup("java:comp/env/hibernate");
out.print("class="+o.getclass().getname());
datasource ds=(datasource)o;
.......
即利用反射api打印出這個已注冊到j(luò)ndi中數(shù)據(jù)源對象的class全名,就會知道原來數(shù)據(jù)源是一個“org.apache.commons.dbcp.basicdatasource”對象,這個class就在%tomcat%/common/lib下commons-dbcp-1.2.1.jar包里,與其關(guān)聯(lián)的還有commons-collections-3.1.jar、commons-pool-1.2.jar。
把以上三個包加入當(dāng)前的工作環(huán)境,用下面這段代碼就可調(diào)用連接池了。我用的是mysql數(shù)據(jù)庫,請?jiān)谡{(diào)試時(shí)加入mysql的jdbc驅(qū)動和%tomcat%/common/lib下的naming-java.jar
public static void main(string[] args) throws hibernateexception {
try{
basicdatasource bdds = new basicdatasource();
//設(shè)置數(shù)據(jù)庫驅(qū)動
bdds.setdriverclassname("org.gjt.mm.mysql.driver");
//設(shè)置jdbc的url
bdds.seturl("jdbc:mysql://localhost/sample");
bdds.setusername("root");
bdds.setpassword("1234");
//設(shè)置連接池初始大小
bdds.setinitialsize(2);
//jndi配置
hashtable env = new hashtable();
env.put("java.naming.factory.initial","org.apache.naming.java.javaurlcontextfactory");
initialcontext ctx=new initialcontext(env);
//數(shù)據(jù)源綁定到j(luò)ndi
ctx.bind("tomcatds",bdds);
//在jndi查找數(shù)據(jù)源
datasource ds = (datasource)ctx.lookup("tomcatds");
connection con = ds.getconnection();
statement stmt = con.createstatement();
string strsql = "select * from user";
resultset rs = stmt.executequery(strsql);
while(rs.next()){
system.out.println("id="+rs.getstring(1));
}
rs.close();
stmt.close();
con.close();
}catch(exception ex){
system.out.print(ex.tostring());
}
}
新聞熱點(diǎn)
疑難解答
圖片精選