国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java實現Dbhelper支持大數據增刪改

2019-11-26 14:38:49
字體:
來源:轉載
供稿:網友

在做項目的時候,技術選型很重要,在底層的方法直接影響了我們對大數據訪問以及修改的速度,在Java中有很多優(yōu)秀的ORM框架,比如說:JPA,Hibernate 等等,正如我們所說的,框架有框架的好處,當然也存在一些可以改進的地方,這個時候,就需要我們針對于不同的業(yè)務不同的需求,不同的訪問量,對底層的架構重新封裝,來支持大數據增刪改。

代碼:

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 张家港市| 伊春市| 宁城县| 江源县| 蒲城县| 武强县| 潼南县| 监利县| 南皮县| 习水县| 海兴县| 福安市| 孟州市| 平江县| 广丰县| 周口市| 上高县| 柳河县| 比如县| 石景山区| 和平区| 平和县| 安平县| 罗甸县| 河曲县| 富民县| 定兴县| 左云县| 桐乡市| 恩平市| 永州市| 平遥县| 开原市| 海兴县| 六枝特区| 合川市| 汉沽区| 新乡市| 定结县| 上蔡县| 桐梓县|