这是前人总结出来的
bean的种类分三种:
第一种:负责操作数据库,只有一个DBOperate.java,里面包括加载驱动、建立链接等,对外提供两个方法ResultSet executeQuery(String sql)和boolean executeUpdate(String sql);
第二种:描述数据结构的bean,基本上是每个jsp页面/数据库表一个bean,其属性都是表单/数据库表中的字段,方法全是set(),get(),如对于用户注册,可以写一个UserInfo.java,属性包括user_name,user_id等,方法包括getUserName(),setUserName,getUserID(),setUserID()等
第三种:负责控制的bean,应该是一个对象一个bean,如对于用户你可以建立一个User.java,里面全是方法,如boolean addUser(UserInfo user_info),boolean deleteUser(int user_id),UserInfo queryUser(int user_id)等我自己实践了一下,觉得第二第三也可以合在一起
只是在进行update和delete的时候觉得不是很灵活,不知如何设计update()和delete()方法,以灵活处理各种条件限制
update table set column1 = ?,......where columnn=?
delete from table where .............
大家是怎么实现的,请指教

解决方案 »

  1.   

    package testbean;
    /**
     * Title:        
     * Description:  
     * Copyright:    
     * @author 
     * @version 
     */import java.sql.*;
    public class ConnDb {
        private String query_statement;  /*定义sql语句*/
        private String param[];          /*查询条件,或者是新的记录*/
        private String strParam[];       //事务中的一系列SQL语句
        private String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
        private String sConnStr = "jdbc:odbc:eshop";    private ResultSet result = null;
        private Connection conn = null;
        private Connection conn1;    public ConnDb() {
          try{
          Class.forName(sDBDriver);
          this.conn1 = DriverManager.getConnection(sConnStr,"sa","soft");
          this.conn1.setAutoCommit(false);  /*设置事务完成模式*/
          this.conn = this.conn1;
          }
          catch(java.lang.Exception e){
          System.err.println("OpenDb():" + e.getMessage());}
        }    public Connection getConn() {
          return this.conn;
        }    public void setParam(String[] args) {
            this.param = args;
        }
        
        public void setStrParam(String[] args) {
            this.strParam = args;
        }
        
        public void setQuerystatement(String query_statement) {
            this.query_statement = query_statement;
        }    /*获取查询结果*/
        public ResultSet getResult() {
            if(query_statement == null || query_statement == "")
              System.out.println("SQL语句为空!");
            try
            {
                PreparedStatement select_stm = conn.prepareStatement(query_statement,java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
                if (param != null)
                        for(int i = 0; i < param.length; i++)
                            select_stm.setString(i+1,param[i]);
                result = select_stm.executeQuery();
            }
            catch (Exception e){
             System.out.println(e);
            }
            return result;
        }
        
        //执行事务
        public boolean commitToDb() throws SQLException {
          conn.setAutoCommit(false);
          if(strParam == null){
              System.out.println("事务语句为空!");
              return false;
          }
          Statement tt = conn.createStatement();
          try{
            conn.setAutoCommit(false);
            for(int i = 0; i < strParam.length; i++){
              //System.out.println("i=" + i);
              tt.execute(strParam[i]);
            }
            conn.commit();
          }
          catch(SQLException e){
            conn.rollback();
            tt.close();
            e.printStackTrace();
            return false;
          }
          tt.close();
          conn.setAutoCommit(true);
          return true;
        }  /*对数据库进行增加记录操作*/
        public boolean insertRecord() throws SQLException,java.io.UnsupportedEncodingException {
            boolean returnTemp = true;
            if(query_statement == null || query_statement == "")
              System.out.println("SQL语句为空!");
            try
            {
                PreparedStatement insert_stm=conn.prepareStatement(query_statement);
                if (param!=null)
                    for(int i=0;i<param.length;i++)
                        insert_stm.setString(i+1,param[i]);
                insert_stm.executeUpdate();
                insert_stm.close();
                conn.commit();
            }
            catch(Exception e) {
                System.out.println(e);
                returnTemp = false;
                conn.rollback();
            }
            return returnTemp;
        }  /*对数据记录进行更改操作*/
            public boolean updateRecord() throws SQLException,java.io.UnsupportedEncodingException {
                boolean returnTemp = true;
                if(query_statement == null || query_statement == "")
                  System.out.println("SQL语句为空!");
                try
                {
                    PreparedStatement update_stm=conn.prepareStatement(query_statement);
                    if (param!=null)
                        for (int i=0;i<param.length;i++)
                            update_stm.setString(i+1,param[i]);
                    update_stm.executeUpdate();
                    returnTemp = true;
                    update_stm.close();
                    conn.commit();
                }
                catch(Exception e) {
                    System.out.println(e);
                    returnTemp = false;
                    conn.rollback();
                }
                return returnTemp;
            }
       /*删除数据记录*/
            public boolean deleteRecord() throws SQLException,java.io.UnsupportedEncodingException {
                if(query_statement == null || query_statement == "")
                  System.out.println("SQL语句为空!");
                try
                {
                    PreparedStatement delete_stm=conn.prepareStatement(query_statement);
                    if (param!=null)
                        for (int i=0; i < param.length; i++)
                            delete_stm.setString(i+1,param[i]);
                    delete_stm.executeUpdate();
                    delete_stm.close();
                    conn.commit();
                    return true;
                }
                catch(Exception e) {
                    System.out.println(e);
                    conn.rollback();
                    return false;
                }
            }        /*//得到统计值
            public float getFloat()
            {
                float returnTemp = 0;
                if(query_statement == null || query_statement == "")
                  System.out.println("SQL语句为空!");
                try
                {
                    Statement rs;
                    returnTemp = rs.getMaxRows(query_statement);
                    rs.close();
                    conn.commit();
                }
                catch(Exception e) {
                    System.out.println(e);
                    conn.rollback();
                }
                return returnTemp;
            }
            */
       /*在数据库中执行任何SQL语句*/
            public boolean executeSql() throws SQLException,java.io.UnsupportedEncodingException {
                boolean returnTemp = true;
                if(query_statement == null || query_statement == "")
                  System.out.println("SQL语句为空!");
                try
                {
                    PreparedStatement execute_stm=conn.prepareStatement(query_statement);
                    if (param!=null)
                        for (int i=0;i<param.length;i++)
                            execute_stm.setString(i+1,param[i]);
                    execute_stm.execute();
                    returnTemp = true;
                    execute_stm.close();
                    conn.commit();
                }
                catch(Exception e) {
                    System.out.println(e);
                    returnTemp = false;
                    conn.rollback();
                }
                return returnTemp;
            }
    }
      

  2.   

    魔鬼的脸蛋,天使的身材,query_statement == ""这种写法好象没见过.
      

  3.   

    我刚学,我是这样写的。
    第一个bean 是负责处理数据库连接的包括数据库事物处理。
    其他的bean 里自己定义一些方法,实现各种操作,就是说把第二和第三和在一起了。也不一定要用get,set语句,
    你写一个带变量的方法不也可以吗?
    我都用过,就是get set太麻烦了,还不如些个
    public boolean ClassUpdate(String userName,String passWord,int age){
    }比用set 和 get方法要简单一点!数据库连接一般用*.properties文件来设置,这样不是很好吗?------------------------------------------
    偶也不知道哪中方法更好一点。
      

  4.   

    你说的前人总结出来的很正确!!第一个bean成为工具类,提供访问数据库接口,这个类一般要通过连接池来运行
    第二种类对应每个表的记录,就是所谓的EntityBean,只保存数据,不处理。只包含set,get方法
    第三种类就是SessionBean,包含处理EntityBean的方法,每个EntityBean至少对应一个SessionBean