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; } }