jsp学习笔记(四)

package DAO;
    import java.sql.*;
    import java.util.ArrayList;
    public class DBOperation {
      private Connection conn = null;
      private Statement st = null;
      private PreparedStatement pst = null;
      private ResultSet rs = null;
      //数据转换器
      public void DataChange(ArrayList param, PreparedStatement pst) throws SQLException{
          for(int i=0,j=1; i<param.size();i++,j++){
            if(param.get(i).getClass().getName().equals("java.lang.Integer")){
              Integer temp=(Integer)(param.get(i));
              pst.setInt(j, temp.intValue());//如果是整型。
            }
            else if(param.get(i).getClass().getName().equals("java.lang.Long")){
              Long temp=(Long)(param.get(i));
              pst.setLong(j,temp.longValue());//如果是长整型
            }
            else if(param.get(i).getClass().getName().equals("java.lang.Float")){
              Float temp=(Float)(param.get(i));
              pst.setFloat(j, temp.floatValue());//如果是浮点型
            }
            else if(param. get(i).getClass().getName().equals("java.lang.Double")){
              Double temp=(Double)(param.get(i));
              pst.setDouble(j, temp.doubleValue());//如果是double型
            }
              else if(param.get(i).getClass().getName().equals("java.lang.String"))
                pst.setString(j, (String)(param.get(i)));//如果是字符串
                else {System.out.println("error");}//其它暂不考虑。
              }
          }
      }
	//用于对表有简单插入、删除及修改操作。
      public boolean insertDeleteUpdate(String sql , ArrayList param) {
          boolean flag = true;
          conn = DBConnection.getConn();
          if(conn==null)return false;
          try {
            pst=conn.prepareStatement(sql);
            DataChange(param,pst);//给“?”位置赋值。
            pst.executeUpdate();
          } catch (SQLException e) {
            e.printStackTrace();
            flag = false;
          } finally {
            DBConnection.close( conn, st ,rs);
          }
          return flag;
      }
//成批数据的修改操作。
      public boolean UpdateByBatch(String sql ,ArrayList param){
          boolean flag=false;
          try {   
            conn = DBConnection.getConn(); 
            pst=conn.prepareStatement(sql);
            conn.setAutoCommit(false); 
            // 若不出现异常,则继续执行到try语句完,否则跳转到catch语句中 
            for(int i=0;i<param.size();i++){
              DataChange((ArrayList)param.get(i),pst);
              pst.addBatch(); 
            }
            pst.executeBatch();   
            // commit:若成功执行完所有的插入操作,则正常结束   
            conn.commit();    
            flag=true;
          }catch (SQLException e) {   
            e.printStackTrace();
            //若出现异常,对数据库中所有已完成的操作全部撤销
            try {conn.rollback();} 
            catch (Exception e1) {   
              e1.printStackTrace();   
            } 
          }		
          finally {
            try{conn.setAutoCommit(true);}
            catch(Exception e){}
            DBConnection.close(conn, st , rs);   
          } 
          return flag;
      }
      /**
      *  <p>返回结果集及结果集中的列名的查询,用于普通查询</p>
      * @param sql
      * @return
      */
      public ArrayList queryReturnList(String sql) {
          ArrayList al = new ArrayList();
          ResultSetMetaData rsmd = null;
          String colname[];// 列名
          int columns;
          conn = DBConnection.getConn();
          try {
            st = conn.createStatement();
            rs = st.executeQuery(sql);
            rsmd = rs.getMetaData();
            columns = rsmd.getColumnCount();// 获得列数;
            colname = new String[columns];// 列名
            for (int i = 1; i <=columns; i++)
              colname[i-1] = rsmd.getColumnName(i);
            while (rs.next()) {
              ArrayList alRow = new ArrayList();
              for (int i = 1; i <=columns; i++)
                alRow.add(rs.getString(colname[i-1]));
              al.add(alRow);
            }
          } catch (Exception e) {
            e.printStackTrace();
          } finally {
            DBConnection.close(conn, st, rs);
          }
          return al;
      }
      /**
      * <p>返回boolean的查询操作,用于login等的服务</p>
      * @param sql
      * @return
      */
      public boolean queryReturnboolean(String sql) {
        boolean flag = true;
        conn = DBConnection.getConn();
        try {
          st = conn.createStatement();
          rs = st.executeQuery(sql);
          if (!rs.next())
            flag = false;
        } catch (SQLException e) {
          e.printStackTrace();
          flag = false;
        } finally {
          DBConnection.close(conn,st, rs);
        }
        return flag;
      }
	//计算表的总记录数
	public int getCount(String sql){ 
		conn = DBConnection.getConn();
		int  num=0;
		try {
			st=conn.createStatement();
			rs= st.executeQuery(sql);
			rs.next();//结果集中,只有一条记录,其值为总记录数。
			num=rs.getInt(1);//获得总记录数。
			} catch (SQLException e) {
			e.printStackTrace();
			} finally {
				DBConnection.close(conn, st , rs);
			}
		return num;
	}
}

你可能感兴趣的:(DAO,sql,jsp,J#)