开发伊始就想试一试封装数据库访问。
前言:
1。开发工具 Myeclipse。
2。数据库 Oracle 10g ,MSSQL2005
3。在Tomcat5.0和MyEclipse 中分别 配置好了Oracle 10g 的JDBC 驱动程序、MSSQL2005的JDBC 驱动程序。
接下来步骤如下:
一.、配置tomcat连接池
<Context path="/test" docBase="test"
debug="5" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_test_log." suffix=".txt"
timestamp="true"/>
<resource name="jdbc/test" auth="Container"
type="javax.sql.DataSource">
</resource>
< ResourceParams name ="jdbc/test" >
< parameter >
< name >factory </name>
< value >org.apache.commons.dbcp.BasicDataSourceFactory </value>
</parameter>
< parameter >
< name >maxActive </name>
< value >100 </value>
</parameter>
< parameter >
< name >maxIdle </name>
< value >30 </value>
</parameter>
< parameter >
< name >maxWait </name>
< value >10000 </value>
</parameter>
< parameter >
< name >username </name>
< value >test </value>
</parameter>
< parameter >
< name >password </name>
< value >123 </value>
</parameter>
< parameter >
< name >driverClassName </name>
< value >oracle.jdbc.driver.OracleDriver </value>
</parameter>
< parameter >
< name >url </name>
< value >jdbc:oracle:thin:@172.0.0.1:1521:test </value>
</parameter>
</ResourceParams>
< ! -- connect mssql -- >
< ResourceParams name ="jdbc/cor" >
< parameter >
< name >factory </name>
< value >org.apache.commons.dbcp.BasicDataSourceFactory </value>
</parameter>
< parameter >
< name >maxActive </name>
< value >100 </value>
</parameter>
< parameter >
< name >maxIdle </name>
< value >30 </value>
</parameter>
< parameter >
< name >maxWait </name>
< value >10000 </value>
</parameter>
< parameter >
< name >username </name>
< value >test </value>
</parameter>
< parameter >
< name >password </name>
< value >123 </value>
</parameter>
< parameter >
< name >driverClassName </name>
< value >com.microsoft.sqlserver.jdbc.SQLServerDriver </value>
</parameter>
< parameter >
< name >url </name>
< value >jdbc:sqlserver://172.0.0.1;database=testdb;user=test;password=123 </value>
</parameter>
</ResourceParams>
</Context>
二、配置项目的 web.xml
<
resource-ref
>
< description >DB Connection </description>
< res-ref-name >jdbc/test </res-ref-name>
< res-type >javax.sql.DataSource </res-type>
< res-auth >Container </res-auth>
</resource-ref>
< resource-ref >
< description >DB Connection </description>
< res-ref-name >jdbc/cor </res-ref-name>
< res-type >javax.sql.DataSource </res-type>
< res-auth >Container </res-auth>
</resource-ref>
< description >DB Connection </description>
< res-ref-name >jdbc/test </res-ref-name>
< res-type >javax.sql.DataSource </res-type>
< res-auth >Container </res-auth>
</resource-ref>
< resource-ref >
< description >DB Connection </description>
< res-ref-name >jdbc/cor </res-ref-name>
< res-type >javax.sql.DataSource </res-type>
< res-auth >Container </res-auth>
</resource-ref>
三、创建包com/cn, 新建AccessDB.java
package com.cn;
import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;
public class AccessDB {
private Statement stmt;
private ResultSet rs;
private String lookupStr; //数据库连接字符串如:java:comp/enc/jdbc/test
private Connection con;
/***********************************************
* 函数功能:构造函数。需要调用setLookupStr
* ************************************************/
public AccessDB() {
super();
}
/***********************************************
* 函数功能:获取数据库连接
* ************************************************/
public Connection getCon() throws Exception{
Context ctx;
DataSource ds;
try{
ctx = new InitialContext();
ds = (DataSource)ctx.lookup(lookupStr);
return ds.getConnection();
}
catch(SQLException e){
throw e;
}
catch(NamingException e){
throw e;
}
}
/***********************************************
* 函数功能:获取数据库集合不用于SELECT语句
* ************************************************/
public Statement getStmt(){
stmt = null;
try{
try{
con= this.getCon();
}
catch(Exception e)
{
System.out.println( "getCon");
System.out.println(e.getMessage());
}
stmt=con.createStatement();
}
catch(SQLException e){
System.out.println( "getStmt");
System.out.println(e.getMessage());
}
return stmt;
}
/***********************************************
* 函数功能:获取数据库中数据
************************************************/
public ResultSet getRs(String sqlstr){
rs= null;
try{
stmt = this.getStmtread();
rs=stmt.executeQuery(sqlstr);
}
catch(Exception e){
System.out.println( "getRs");
System.out.println(e.getMessage());
}
return rs;
}
import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;
public class AccessDB {
private Statement stmt;
private ResultSet rs;
private String lookupStr; //数据库连接字符串如:java:comp/enc/jdbc/test
private Connection con;
/***********************************************
* 函数功能:构造函数。需要调用setLookupStr
* ************************************************/
public AccessDB() {
super();
}
/***********************************************
* 函数功能:获取数据库连接
* ************************************************/
public Connection getCon() throws Exception{
Context ctx;
DataSource ds;
try{
ctx = new InitialContext();
ds = (DataSource)ctx.lookup(lookupStr);
return ds.getConnection();
}
catch(SQLException e){
throw e;
}
catch(NamingException e){
throw e;
}
}
/***********************************************
* 函数功能:获取数据库集合不用于SELECT语句
* ************************************************/
public Statement getStmt(){
stmt = null;
try{
try{
con= this.getCon();
}
catch(Exception e)
{
System.out.println( "getCon");
System.out.println(e.getMessage());
}
stmt=con.createStatement();
}
catch(SQLException e){
System.out.println( "getStmt");
System.out.println(e.getMessage());
}
return stmt;
}
/***********************************************
* 函数功能:获取数据库中数据
************************************************/
public ResultSet getRs(String sqlstr){
rs= null;
try{
stmt = this.getStmtread();
rs=stmt.executeQuery(sqlstr);
}
catch(Exception e){
System.out.println( "getRs");
System.out.println(e.getMessage());
}
return rs;
}
四、创建包com/myComp
新建ConnOrcl.java:
package com.test;
import com.cn.*;
public class ConnOrcl extends AccessDB {
public ConnOrcl(){
super();
String lookupString = "java:comp/env/jdbc/test";
super.setLookupStr(lookupString);
}
}
import com.cn.*;
public class ConnOrcl extends AccessDB {
public ConnOrcl(){
super();
String lookupString = "java:comp/env/jdbc/test";
super.setLookupStr(lookupString);
}
}
新建ConnSql.java:
package com.test;
import com.cn.*;
public class ConnSql extends AccessDB {
public ConnSql() {
super();
String lookupString= "java:comp/env/jdbc/cor";
super.setLookupStr(lookupString);
}
}
import com.cn.*;
public class ConnSql extends AccessDB {
public ConnSql() {
super();
String lookupString= "java:comp/env/jdbc/cor";
super.setLookupStr(lookupString);
}
}
五、在jsp中调用javabean:
<body>
<jsp:useBean id= "db" class= "com.test.ConnOrcl" scope= "page"></jsp:useBean>
显示oracle数据:
<hr>
<%
String sqlStr= "select * from table1 ";
ResultSet rs=db.getRs(sqlStr);
while(rs.next())
{
out.print(rs.getInt(0)+ " ");
out.print(rs.getString(1)+ "<br>");
}
rs.close();
db.closeDB();
%>
<hr>
<jsp:useBean id= "db2" class= "com.test.ConnSql" scope= "page"></jsp:useBean>
显示SQL数据:
<hr>
<%
sqlStr = "select * from table2";
ResultSet rs2=db2.getRs(sqlStr);
while(rs2.next())
{
out.print(rs2.getString(0)+ " ");
out.print(rs2.getString(1)+ "<br>");
}
rs2.close();
db2.closeDB();
%>
<jsp:useBean id= "db" class= "com.test.ConnOrcl" scope= "page"></jsp:useBean>
显示oracle数据:
<hr>
<%
String sqlStr= "select * from table1 ";
ResultSet rs=db.getRs(sqlStr);
while(rs.next())
{
out.print(rs.getInt(0)+ " ");
out.print(rs.getString(1)+ "<br>");
}
rs.close();
db.closeDB();
%>
<hr>
<jsp:useBean id= "db2" class= "com.test.ConnSql" scope= "page"></jsp:useBean>
显示SQL数据:
<hr>
<%
sqlStr = "select * from table2";
ResultSet rs2=db2.getRs(sqlStr);
while(rs2.next())
{
out.print(rs2.getString(0)+ " ");
out.print(rs2.getString(1)+ "<br>");
}
rs2.close();
db2.closeDB();
%>
</body>
六、运行显示:
![](https://i-blog.csdnimg.cn/blog_migrate/7f4df257de505183b25d974f18c01494.jpeg)
七、结语
以后修改数据源时,即使是异构的数据源,只需要:
1。修改Context
2。修改web.xml。
3。增加类,继承AccessDB父类,设置lookupStr,就可以使用数据库访问的功能了。应用层的调用不会受到影响。
好用吧。
转载于:https://blog.51cto.com/nihaiou/274381