您的位置:首页 > 编程语言 > Java开发

一个封装了数据库大部分操作的JavaBean

2006-07-06 02:18 711 查看
package beans;

import java.sql.*;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.sql.Connection;
import java.sql.DriverManager;

 /**
  * 该Bean是一个数据库操作Bean
  * 内部封装了对数据库的大部分基本操作
  *    Bean支持多种主流数据库的DriverManager格式
  * 以及标准的jdbc-odbc-bridge格式
  *
  */
public class DBOperation{    
    
    /**
     * 使用Oracle格式的DriverManager
     * @see #getUseContextType
     */ 
    public static final int USE_ORACLE_DRIVERMANAGER = 0;
    /**
     * 使用MySQL格式的DriverManager
     * @see #getUseContextType
     */ 
    public static final int USE_MYSQL_DRIVERMANAGER = 1;
    /**
     * 使用SQLServer格式的DriverManager
     * @see #getUseContextType
     */ 
    public static final int USE_SQLSERVER_DRIVERMANAGER = 2;
    /**
     * 使用Sybase格式的DriverManager
     * @see #getUseContextType
     */ 
    public static final int USE_SYBASE_DRIVERMANAGER = 3;
    /**
     * 使用Jdbc-Odbc-bridge格式的DriverManager
     * @see #getUseContextType
     */ 
    public static final int USE_JDBCODBC_DRIVERMANAGER = 4;
    
    private String[] driverManagerType;//存放DriverManager格式类型的字符串数组
    private int useContextType;    //当前使用DriverManager的驱动类型
    private java.sql.ResultSet resultSet;            //返回查询结果的记录集集合
    //private java.sql.Statement stmt;        //用语执行不带参数的简单sql语句    
    private java.sql.PreparedStatement prep
4000
aredStatement;//用于执行带或不带in参数的预编译sql语句
    //private java.sql.CallableStatement ctmt;//用于执行对数据库以存储过程的调用
    private java.sql.Connection connection;        //与给定的数据库建立连接

    
    //该方法执行一些初始化工作
    private void init(){
        driverManagerType = new String[5];
        driverManagerType[USE_ORACLE_DRIVERMANAGER] = new String("oracle.jdbc.driver.OracleDriver");
        driverManagerType[USE_MYSQL_DRIVERMANAGER] = new String("com.mysql.jdbc.Driver");
        driverManagerType[USE_SQLSERVER_DRIVERMANAGER] = new String("com.microsoft.jdbc.sqlserver.SQLServerDriver");        
        driverManagerType[USE_SYBASE_DRIVERMANAGER] = new String("com.sybase.jdbc.SybDriver");        
        driverManagerType[USE_JDBCODBC_DRIVERMANAGER] = new String("sun.jdbc.odbc.JdbcOdbcDriver");
        resultSet = null;
        preparedStatement = null;
        connection = null;    
    }
    
    /**
     * 该构造方法不带参数
     * 默认使用Jdbc-Odbc-bridge格式的DriverManager驱动
     * 并调用openDatabase()方法与数据库建立连接      
     * 这是我为了方便而写的,大家可以根据自己的需要改成自己适合的
     * 
     * @see #DBOperation
     * @see #openDatabase
     */
    public DBOperation(){
        //我用的是Access数据库,没有用数据源,大家根据自己mdb文件的路径改改就行了
        String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=E:/Tomcat 5.0/webapps/jsp/mydatabase.mdb";
        try{
            init();                        
            Class.forName(driverManagerType[DBOperation.USE_JDBCODBC_DRIVERMANAGER]);
            connection = DriverManager.getConnection(url);            
        }catch(Exception e){
            e.printStackTrace();
        }
    }    

    
     /**
      * 构造一个新的<b>DBOperation</b>
      * 在构造时需要选择相应的DriverManager驱动格式
      * 该Bean中定义了Oracle,MySQL,SQLServer,Jdbc-Odbc-bridge四中常用的驱动格式
      * 在使用时只需要选择相应的常量即可
      * 
      * @prame useContextType int使用的驱动格式
      * @see #getContextType
      */
    public DBOperation(int useContextType){
        if( useContextType < 0){
            useContextType = 0;
        }else if( useContextType > 4){
            useContextType = 4;            
        }
        this.useContextType = useContextType;
        init();    
    }    
    
     /**
      * 该方法打开数据库,需要给该方法提供三个参数,数据库的URL,用户名和密码
      * 打开数据库建立连接后,就可以使用executeSQL(String sql)方法对数据库执行操作
      * 并捕获SQLException异常
      *
      * @prame dataBaseURL String数据库连接地址
      * @prame id String用户名
      * @prame pwd String密码
      * @see #executeSQL
      * @exception 该方法将抛出java.sql.SQLException,java.lang.ClassNotFoundException异常
      */
    public void openDatabase(String databaseURL,String id,String pwd)throws java.sql.SQLException,java.lang.ClassNotFoundException{
        if(useContextType <= 0 || useContextType >=4 ){    
            Class.forName(driverManagerType[useContextType]);    
            connection = DriverManager.getConnection(databaseURL,id,pwd);                                
        }
    }
    
    
    /**
     * 该方法执行sql语句,可以是select,insert,update,delete,等等常用的SQL语句
     * 查询结果返回后,必须调用void dbClose()方法来释放所有资源
     *
     * @param sql String类型的sql查询语句
     * @return 如果执行select查询将返回一个ResultSet对象,否则返回null
     * @exception 该方法将抛出java.sql.SQLException异常
     */
    public ResultSet executeSQL(String sql)throws SQLException{ 
        sql = sql.trim();        
        preparedStatement = connection.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);        
        if( sql.substring(0,1).equalsIgnoreCase("s") ){        
            resultSet = preparedStatement.executeQuery();
            return resultSet;
        }else{
            preparedStatement.executeUpdate();
            return null;
        }               
    }     

    /**
     * 该方法关闭与数据库建立的连接,释放所有资源
     * 
     * @exception 该方法将抛出java.sql.SQLException异常
     */
    public void closeDatabase()throws java.sql.SQLException{
        if( resultSet != null ){
            resultSet.close();
        }
        if( preparedStatement != null ){
            preparedStatement.close();
        }
        if( connection != null ){
            connection.close();
        }         
    }

    
    /**
     * main方法把该Bean当做一个application测试时使用,真正发布时可以删除
     */
    public static void main(String[] args){
        DBOperation database = new DBOperation();
        try{                      
            ResultSet rst = database.executeSQL("select * from buyerInfo");
            while( rst.next() ){ 
                System.out.println (rst.getString("id"));
                   System.out.println (rst.getString("name"));
            }        
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
                  database.closeDatabase();    
            }catch(SQLException e){
            }    
        }    
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息