用一个JavaBean封装JDBC操作
2008-01-05 10:24:30 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佽鍨庨崘锝嗗瘱闂備胶顢婂▍鏇㈠箲閸ヮ剙鐏抽柡鍐ㄧ墕缁€鍐┿亜韫囧海顦﹀ù婊堢畺閺屻劌鈹戦崱娆忓毈缂備降鍔庣划顖炲Φ閸曨垰绠抽悗锝庝簽娴犻箖姊洪棃娑欐悙閻庢矮鍗抽悰顕€宕堕澶嬫櫖濠殿噯绲剧€笛囧箲閸ヮ剙钃熼柣鏂挎憸閻熷綊鏌涢…鎴濇灈妞ゎ剙鐗嗛—鍐Χ鎼粹€茬凹缂備緡鍠楅幐鎼佹偩閻戣棄纭€闁绘劕绉靛Λ鍐春閳ь剚銇勯幒鎴濐伀鐎规挷绀侀埞鎴︽偐閹绘帩浼€缂佹儳褰炵划娆撳蓟濞戞矮娌柟瑙勫姇椤ユ繈姊洪柅鐐茶嫰婢т即鏌熼搹顐e磳闁挎繄鍋涢埞鎴犫偓锝庘偓顓涙櫊閺屽秵娼幏灞藉帯闂佹眹鍊曢幊鎰閹惧瓨濯撮柛鎾村絻閸撳崬顪冮妶鍡楃仸闁荤啿鏅涢悾鐑藉Ψ瑜夐崑鎾绘晲鎼粹剝鐏嶉梺缁樻尰濞叉﹢濡甸崟顖氱疀闂傚牊绋愮花鑲╃磽娴h棄鐓愭慨妯稿妿濡叉劙骞樼拠鑼槰闂佸啿鎼崐濠毸囬弶搴撴斀妞ゆ梻銆嬪銉︺亜椤撶偛妲婚柣锝囧厴楠炴帡骞嬮弮鈧悗濠氭⒑鐟欏嫭鍎楅柛妯衡偓鐔插徍濠电姷鏁告慨鐑藉极閸涘﹥鍙忔い鎾卞灩绾惧鏌熼崜褏甯涢柍閿嬪灦閵囧嫰骞掗崱妞惧缂傚倷绀侀ˇ閬嶅极婵犳氨宓侀柛鈩冪⊕閸婄兘鏌涘┑鍡楊伀妞ゆ梹鍔曢埞鎴︽倻閸モ晝校闂佸憡鎸婚悷锔界┍婵犲洦鍤冮柍鍝勫暟閿涙粓姊鸿ぐ鎺戜喊闁告瑥楠搁埢鎾斥堪閸喓鍘搁柣蹇曞仧绾爼宕戦幘璇茬疀濞达絽鎲¢崐顖炴⒑绾懎浜归悶娑栧劦閸┾偓妞ゆ帒鍟惃娲煛娴e湱澧柍瑙勫灴閹瑩寮堕幋鐘辨闂備礁婀辨灙闁硅姤绮庨崚鎺楀籍閸喎浠虹紓浣割儓椤曟娊鏁冮崒娑氬幈闂佸搫娲㈤崝宀勬倶閻樼粯鐓曢柟鑸妼娴滄儳鈹戦敍鍕杭闁稿﹥鐗犲畷婵嬫晝閳ь剟鈥﹂崸妤€鐒垫い鎺嶈兌缁犲墽鈧厜鍋撳┑鐘辩窔閸嬫鈹戦纭烽練婵炲拑绲垮Σ鎰板箳閹冲磭鍠撻幏鐘绘嚑閼稿灚姣愰梻鍌氬€烽懗鑸电仚濠电偛顕崗妯侯嚕椤愩倖瀚氱€瑰壊鍠栧▓銊︾節閻㈤潧校缁炬澘绉瑰鏌ュ箵閹烘繄鍞甸柣鐘烘鐏忋劌顔忛妷褉鍋撶憴鍕碍婵☆偅绻傞~蹇涙惞閸︻厾锛滃┑鈽嗗灠閹碱偊锝炲鍥╃=濞达綁顥撻崝宥夋煙缁嬪灝鏆遍柣锝囧厴楠炲鏁冮埀顒傜不婵犳碍鍋i柛銉戝啰楠囬悗瑙勬尭缁夋挳鈥旈崘顔嘉ч柛鈩兠棄宥囩磽娴e壊鍎愰柛銊ュ缁顓兼径瀣偓閿嬨亜閹哄秶顦︾€殿喖鐏濋埞鎴﹀煡閸℃浠梺鍛婎焼閸曨収娲告俊銈忕到閸燁垶宕愰崹顐e弿婵☆垳鍘ф禍楣冩倵濮樼偓瀚�

核心提示:关于数据库在项目开发中的重要性,我想不用我在此多费唇舌;因此关于对数据库操作的重要性我想更不需要我在此大声疾呼!然而你是否思考过这样的几个问题:在你的每一个项目中共有多少子项目需要对数据库进行操作?你为此设计的操作数据库的javaBean是否能满足不同子项目的要求?当用户要求采用其他数据库系统时你是否需要对已经编译好的
关于数据库在项目开发中的重要性,我想不用我在此多费唇舌;因此关于对数据库操作的重要性我想更不需要我在此大声疾呼!然而你是否思考过这样的几个问题:在你的每一个项目中共有多少子项目需要对数据库进行操作?你为此设计的操作数据库的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
更多精彩
赞助商链接