关于数据库在项目开发中的重要性,我想不用我在此多费唇舌;因此关于对数据库操作的重要性我想更不需要我在此大声疾呼!然而你是否思考过这样的几个问题:在你的每一个项目中共有多少子项目需要对数据库进行操作?你为此设计的操作数据库的JavaBean是否能满足不同子项目的要求?当用户要求采用其他数据库系统时你是否需要对已经编译好的Class文件重新编译?
如果你是一位很勤奋的程序员,你可能会说:“无所谓,只要修改一下连接方式然后再编译一下就OK了!”然而你是否曾经想过,如果我们可以花一点时间把这个JavaBean完善一下,我们甚至连这种“修改”都可以省去?
笔者并不是一个勤奋的程序员,因此希望通过一个JavaBean来完成对数据库的大部分操作,同时希望该JavaBean能够满足对目前大部分主流数据库的操作。在此基础上写了一个JavaBean,目前暂时命名为LPWDatabaseOperation。以下为该JavaBean的相关信息:
一、支持对Oracle、Sybase、MySQL、SQLServer、DB2、PostgreSQL、Jdbc-Odbc-Bridge等数据库的DriverManager格式的操作;
二、提供了以Tomcate服务器为平台的数据源的操作(其他诸如WebLogic、WebSphere等大型服务器通常通过实体Bean来访问数据库,因此本程序没有提供对这两种服务器数据源的访问,但保留了相应位置,有兴趣的读者可以自己进行补充。);
三、使用了唯一的一个方法executeSQL对数据的增加、删除、修改和查询等操作进行统一处理,省去了记忆多个方法的麻烦;
四、提供了对分页显示的简单支持。
本文提供了该JavaBean的完整源代码,同时源代码中有详细的文档注释,有兴趣的读者可以将其编译成开发文档,以供随时参考。源代码如下:
package lpw.beans;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
/
Title:
Description:
Copyright: Copyright 2004
Company: 吕培文
@author not attributable
@version 1.0
/
public class LPWDatabaseOperation
{
/
使用Oracle格式的DriverManager
@see LPWDatabaseOperation#getUseContextType
/
public final int useOracleDriverManager = 0;
/
使用Sybase格式的DriverManager
@see LPWDatabaseOperation#getUseContextType
/
public final int useSybaseDriverManager = 1;
/
使用MySQL格式的DriverManager
@see LPWDatabaseOperation#getUseContextType
/
public final int useMysqlDriverManager = 2;
/
使用SQLServer格式的DriverManager
@see LPWDatabaseOperation#getUseContextType
/
public final int useSqlserverDriverManager = 3;
/
使用DB2格式的DriverManager
@see LPWDatabaseOperation#getUseContextType
/
public final int useDb2DriverManager = 4;
/
使用Informix格式的DriverManager
@see LPWDatabaseOperation#getUseContextType
/
public final int useInformixDriverManager = 5;
/
使用PostgreSQL格式的DriverManager
@see LPWDatabaseOperation#getUseContextType
/
public final int usePostgresqlDriverManager = 6;
/
使用Jdbc-Odbc-Bridge格式的DriverManager
@see LPWDatabaseOperation#getUseContextType
/
public final int useJdbcOdbcBridge = 7;
/
使用Tomcate格式的DataSource
@see LPWDatabaseOperation#getUseContextType
/
public final int useTomcateDataSource = 8;
/
使用WebLogic格式的DataSource
@see LPWDatabaseOperation#getUseContextType
/
public final int useWeblogicDataSource = 9;
/
使用WebSphere格式的DataSource
@see LPWDatabaseOperation#getUseContextType
/
public final int useWebsphereDataSource = 10;
/////////////////////////////////////////////////////////
private String[] driverManagerType;
private int useContextType;
private int pageSize,pageCount,absolutePage,recordCount;
//////////////////////////////////////////////////////////
private Connection connection;
private PreparedStatement preparedStatement;
private ResultSet resultSet;
/
构造LPWDatabaseOperation。
在构造时需选择所使用的环境类型,
LPWDatabaseOperation支持多种主流的DriverManager驱动及DataSource环境,
并定义了一些常用DriverManager和DataSource的标准格式,
其中包括Oracle、Sybase、MySQL、SQLServer等主流数据库的DriverManager格式,
以及Jdbc-Odbc-Bridge的标准格式,
同时还提供了Tomcate、WebLogic和WebSphere下DataSource的标准格式,
程序员在使用时只需要选择相应的常量即可。
@param useContextType int
使用的环境类型
@see LPWDatabaseOperation#getUseContextType
/
public LPWDatabaseOperation(int useContextType)
{
if(useContextType<0) useContextType = 0;
if(useContextType>7) useContextType = 7;
this.useContextType = useContextType;
/////////////////////////////////////////////////////////
this.driverManagerType[this.useOracleDriverManager] = new String("oracle.jdbc.driver.OracleDriver");
this.driverManagerType[this.useSybaseDriverManager] = new String("com.sybase.jdbc.SybDriver");
this.driverManagerType[this.useMysqlDriverManager] = new String("com.mysql.jdbc.Driver");
this.driverManagerType[this.useSqlserverDriverManager] = new String("com.microsoft.jdbc.sqlserver.SQLServerDriver");
this.driverManagerType[this.useDb2DriverManager] = new String("com.ibm.db2.jdbc.app.DB2Driver");
this.driverManagerType[this.useInformixDriverManager] = new String("com.informix.jdbc.IfxDriver");
this.driverManagerType[this.usePostgresqlDriverManager] = new String("org.postgresql.Driver");
this.driverManagerType[this.useJdbcOdbcBridge] = new String("sun.jdbc.odbc.JdbcOdbcDrive");
/////////////////////////////////////////////////////////
this.pageSize = 20;
this.pageCount = 0;
this.absolutePage = 0;
this.recordCount = 0;
//////////////////////////////////////////////////////////
this.connection = null;
this.preparedStatement = null;
this.resultSet = null;
}
/
打开数据库,需要给该方法提供数据库的URL地址、用户名称及用户密码。
成功打开数据库后便可通过executeSQL方法对数据库进行操作。
@param databaseURL String
数据库的URL地址,如果使用DataSource则为数据库的JNDI-Name
@param userName String
用户名称
@param password String
用户密码
@throws java.sql.SQLException
@throws java.lang.ClassNotFoundException
@throws javax.naming.NamingException
/
public void openDatabase(String databaseURL,String userName,String password)
throws java.sql.SQLException,java.lang.ClassNotFoundException,javax.naming.NamingException
{
if(this.useContextType>=0 && this.useContextType<=this.useJdbcOdbcBridge)
{
Class.forName(this.driverManagerType[this.useContextType]);
this.connection = DriverManager.getConnection(databaseURL,userName,password);
}
else if(this.useContextType==this.useTomcateDataSource)
{
Context context = new InitialContext();
DataSource dataSource = (DataSource)context.lookup(databaseURL);
this.connection = dataSource.getConnection(userName,password);
}
else if(this.useContextType==this.useWeblogicDataSource)
{
}
else if(this.useContextType==this.useWebsphereDataSource)
{
}
}
/
执行SQL语句,可以是Select、Insert、Delete、Update中的任何一个。
@param sql String
欲被执行的SQL语句
@return ResultSet
如果执行查询操作,则返回该查询操作的ResultSet;如果执行的是其它操作,则返回null。
@throws java.sql.SQLException
/
public ResultSet executeSQL(String sql) throws java.sql.SQLException
{
sql = sql.trim();
this.preparedStatement = this.c