首页 > 编程 > Java > 正文

Java实现Dbhelper支持大数据增删改

2019-11-26 14:38:49
字体:
来源:转载
供稿:网友

在做项目的时候,技术选型很重要,在底层的方法直接影响了我们对大数据访问以及修改的速度,在Java中有很多优秀的ORM框架,比如说:JPA,Hibernate 等等,正如我们所说的,框架有框架的好处,当然也存在一些可以改进的地方,这个时候,就需要我们针对于不同的业务不同的需求,不同的访问量,对底层的架构重新封装,来支持大数据增删改。

代码:

import java.io.*; import java.sql.*; import java.util.*; import java.util.logging.Level; import java.util.logging.Logger;  import javax.servlet.jsp.jstl.sql.*;  /**  * DbHelper  * @author qmx  *  */ public class Dbhelper {    private String sql;  //要传入的sql语句   public void setSql(String sql) {   this.sql = sql; }   private List sqlValues; //sql语句的参数 public void setSqlValues(List sqlValues) {   this.sqlValues = sqlValues; }   private List<List> sqlValue; //sql语句的参数 public void setSqlValue(List<List> sqlValues) {   this.sqlValue = sqlValues; }  private Connection con; //连接对象   public void setCon(Connection con) {   this.con = con; }    public Dbhelper(){     this.con=getConnection(); //给Connection的对象赋初值   }      /**    * 获取数据库连接    * @return    */   private Connection getConnection(){        String driver_class=null;     String driver_url=null;     String database_user=null;     String database_password=null;     try {       InputStream fis=this.getClass().getResourceAsStream("/db.properties"); //加载数据库配置文件到内存中       Properties p=new Properties();       p.load(fis);              driver_class=p.getProperty("driver_class");   //获取数据库配置文件       driver_url=p.getProperty("driver_url");       database_user=p.getProperty("database_user");       database_password=p.getProperty("database_password");                 Class.forName(driver_class);       con=DriverManager.getConnection(driver_url,database_user,database_password);                   } catch (ClassNotFoundException e) {       // TODO Auto-generated catch block       e.printStackTrace();     } catch (SQLException e) {       // TODO Auto-generated catch block       e.printStackTrace();     } catch (FileNotFoundException e) {       // TODO Auto-generated catch block       e.printStackTrace();     } catch (IOException e) {       // TODO Auto-generated catch block       e.printStackTrace();     }     return con;   }            /**    * 关闭数据库    * @param con    * @param pst    * @param rst    */   private void closeAll(Connection con,PreparedStatement pst,ResultSet rst){     if(rst!=null){       try {         rst.close();       } catch (SQLException e) {         // TODO Auto-generated catch block         e.printStackTrace();       }     }          if(pst!=null){       try {         pst.close();       } catch (SQLException e) {         // TODO Auto-generated catch block         e.printStackTrace();       }     }          if(con!=null){       try {         con.close();       } catch (SQLException e) {         // TODO Auto-generated catch block         e.printStackTrace();       }     }             }       /**    * 关闭数据库    * @param con    * @param pst    * @param rst    */   private void closeAll(Connection con,Statement pst,ResultSet rst){     if(rst!=null){       try {         rst.close();       } catch (SQLException e) {         // TODO Auto-generated catch block         e.printStackTrace();       }     }          if(pst!=null){       try {         pst.close();       } catch (SQLException e) {         // TODO Auto-generated catch block         e.printStackTrace();       }     }          if(con!=null){       try {         con.close();       } catch (SQLException e) {         // TODO Auto-generated catch block         e.printStackTrace();       }     }             }      /**    * 查找    * @param sql    * @param sqlValues    * @return    */   public Result executeQuery(){     Result result=null;     ResultSet rst=null;     PreparedStatement pst=null;     try {            pst=con.prepareStatement(sql);       if(sqlValues!=null&&sqlValues.size()>0){ //当sql语句中存在占位符时         setSqlValues(pst,sqlValues);       }     rst=pst.executeQuery();     result=ResultSupport.toResult(rst); //一定要在关闭数据库之前完成转换            } catch (SQLException e) {       // TODO Auto-generated catch block       e.printStackTrace();     }finally{       this.closeAll(con, pst, rst);     }          return result;   }         /**    * 增删改    * @return    */   public int executeUpdate(){     int result=-1;     PreparedStatement pst=null;     try {       pst=con.prepareStatement(sql);       if(sqlValues!=null&&sqlValues.size()>0){ //当sql语句中存在占位符时         setSqlValues(pst,sqlValues);       }     result=pst.executeUpdate();     } catch (SQLException e) {       // TODO Auto-generated catch block       e.printStackTrace();     }finally{       this.closeAll(con, pst, null);     }           return result;   }         /**    * 使用PreparedStatement加批量的方法    * @return    */   public int[] executeUpdateMore(){       int[] result=null;        try{         PreparedStatement prest =con.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);        for(List sqlValueString : sqlValue){                for(int i=0;i<sqlValueString.size();i++){           try {             prest.setObject(i+1,sqlValueString.get(i));           } catch (SQLException e) {             // TODO Auto-generated catch block             e.printStackTrace();           }                             }         prest.addBatch();        }        prest.executeBatch();       /*  con.commit();*/          this.closeAll(con, prest, null);     } catch (SQLException ex){        Logger.getLogger(Dbhelper.class.getName()).log(Level.SEVERE, null,ex);       }      return result;        }       /**    * 使用PreparedStatement加批量的方法,strvalue:    * "INSERT INTOadlogs(ip,website,yyyymmdd,hour,object_id) VALUES('192.168.1.3','localhost','20081009',8,'23123')"    * @return    * @throws SQLException    */   public int[] executeUpdateMoreNotAuto() throws SQLException{        int[] result =null;     con.setAutoCommit(false);       Statement stmt =con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,                         ResultSet.CONCUR_READ_ONLY);       String[] SqlString= null;     for(String strvalue : SqlString){               stmt.execute(strvalue);       }       con.commit();      return result;   }            /**    * 使用PreparedStatement加批量的方法,strvalue:    * "INSERT INTOadlogs(ip,website,yyyymmdd,hour,object_id) VALUES('192.168.1.3','localhost','20081009',8,'23123')"    * @return    * @throws SQLException    */   public int[] executeMoreNotAuto() throws SQLException{        //保存当前自动提交模式     Boolean booleanautoCommit=false;     String[] SqlString= null;     int[] result= null;      try      {       booleanautoCommit=con.getAutoCommit();        //关闭自动提交       con.setAutoCommit(false);       Statement stmt =con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,             ResultSet.CONCUR_READ_ONLY);        //使用Statement同时收集多条sql语句       /*stmt.addBatch(insert_sql1);       stmt.addBatch(insert_sql2);       stmt.addBatch(update_sql3);*/       for(String strvalue : SqlString){                 stmt.addBatch(strvalue);         }                //同时提交所有的sql语句        stmt.executeBatch();        //提交修改        con.commit();        con.setAutoCommit(booleanautoCommit);        this.closeAll(con, stmt, null);      }      catch(Exception e)      {       e.printStackTrace();       con.rollback();  //设定setAutoCommit(false)没有在catch中进行Connection的rollBack操作,操作的表就会被锁住,造成数据库死锁      }      return result;   }            /**    * 给sql语句中的占位符赋值    * @param pst    * @param sqlValues    */   private void setSqlValues(PreparedStatement pst,List sqlValues){     for(int i=0;i<sqlValues.size();i++){       try {         pst.setObject(i+1,sqlValues.get(i));       } catch (SQLException e) {         // TODO Auto-generated catch block         e.printStackTrace();       }     }   }      } 

我们的在db.properties中写入访问数据库的信息:

driver_class=com.mysql.jdbc.Driver driver_url=jdbc:mysql://192.168.22.246:3306/importexceltest database_user=basic database_password=basic 

测试:

import java.util.*;  public class ImportExcelTest {   public static void main(String[] args){        /*Dbhelper db = new Dbhelper();     String sql = "insert into tb_coursetype(id,courseTypeName) values('2012003','qmx3')";     db.setSql(sql);     db.executeUpdate();*/          /*Dbhelper db1 = new Dbhelper();     String sql1 = "insert into tb_coursetype(id,courseTypeName) values(?,?)";     List sqlValues = new ArrayList();     sqlValues.add("2012004");     sqlValues.add("qmx4");     db1.setSqlValues(sqlValues);     db1.setSql(sql1);     db1.executeUpdate();*/               Dbhelper db = new Dbhelper();     String sql = "insert into tb_coursetype(id,courseTypeName) values(?,?)";     List<List> sqlValues = new ArrayList();     List sqlValueString =new ArrayList();     sqlValueString.add("2012010");     sqlValueString.add("qmx10");     sqlValues.add(sqlValueString);     List sqlValueString1 =new ArrayList();     sqlValueString1.add("2012011");     sqlValueString1.add("qmx11");     sqlValues.add(sqlValueString1);     List sqlValueString2 =new ArrayList();     sqlValueString2.add("2012012");     sqlValueString2.add("qmx12");     sqlValues.add(sqlValueString2);     List sqlValueString3 =new ArrayList();     sqlValueString3.add("2012013");     sqlValueString3.add("qmx13");     sqlValues.add(sqlValueString3);     db.setSqlValue(sqlValues);     db.setSql(sql);     db.executeUpdateMore();        } } 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表