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

在做项目的时候,技术选型很重要,在底层的方法直接影响了我们对大数据访问以及修改的速度,在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(); 

  }
} 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, Dbhelper
大数据增删改
dbhelper java、java dbhelper类、java mysql dbhelper、java dbhelper官方、java oracle dbhelper,以便于您获取更多的相关知识。

时间: 2024-12-29 10:05:16

Java实现Dbhelper支持大数据增删改_java的相关文章

简单用户登录和数据增删改查

问题描述 简单用户登录和数据增删改查 <%@page pageEncoding=""utf-8"" isELIgnored=""false""%><%@taglib uri=""http://java.sun.com/jsp/jstl/core"" prefix=""c""%><%@taglib uri="&

java对xml节点属性的增删改查实现方法_java

学习本文之前请先看我的另一篇文章JAVA对XML节点的操作可以对XML操作有更好的了解. package vastsum; import java.io.File; import java.io.FileWriter; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; i

使用超大规模数据分析技术支持大数据预测

我给大家带来的演讲内容是关于"使用超大规模数据分析技术支持大数据预测"这方面的.首先介绍一下我自己,我叫韩卿,很多人叫我Luke.我是Kyligence公司的联合创始人兼CEO,Apache Kylin开源项目的创始人,同时也是这个项目的项目管理委员会主席,以及Apache软件基金会会员. 一.超大规模数据分析的挑战 Hadoop 首先,我想和大家分享一下我们在大数据技术领域碰到的挑战,这里在座很多朋友都是从传统的数据仓库出来的,事实上以前是没有Hadoop的,因此数据并不是很大,我记

C#操作Excel数据增删改查示例_实用技巧

C#操作Excel数据增删改查. 首先创建ExcelDB.xlsx文件,并添加两张工作表. 工作表1: UserInfo表,字段:UserId.UserName.Age.Address.CreateTime. 工作表2: Order表,字段:OrderNo.ProductName.Quantity.Money.SaleDate. 1.创建ExcelHelper.cs类,Excel文件处理类 复制代码 代码如下: using System; using System.Collections.Gen

java spring mvc怎么设置全局增删改方法为post请求

问题描述 java spring mvc怎么设置全局增删改方法为post请求 我不想在每个增删改方法注解的形式表明此方法为post请求,想在配置文件中设置全局的以add*updata*等开头的方法为post请求 解决方案 @Controller@RequestMapping(value=""t""method=RequestMethod.POST)public class TestController {...} 解决方案二: @Controller@Request

每年3个亿支持“大数据”

昨日,省政府第25次常务会议审议了<关于加快大数据产业发展及应用若干政策的意见>,明确从今年起连续3年,省和贵阳市.贵安新区每年各安排不少于1亿元资金,用于支持大数据产业发展及应用. <意见>特别提出,对大数据龙头企业,可采取"一企一策"."一事一议"的方式加大支持力度.旨在吸引大数据及关联企业聚集我省,吸引大数据人才汇聚我省,大力引进和培育大数据企业,通过引进行业领先企业与培育本地企业相结合的模式,着力拓展大数据产业链,对在我省发展大数据产

Java通过JDBC进行简单的增删改查MySQL数据库

JDBC基本操作   下面的所有方法和数据成员都在public class JDBCOperation内部. (1)定义记录的类(可选) 这样做主要是为了便于操作和接口定义,是非必须的. static class Student {         private String Id;         private String Name;         private String Sex;         private String Age;           Student(Str

C#在winform中实现数据增删改查等功能_C#教程

winform中利用ado.net实现对单表的增删改查的详细例子,具体如下: 1.前言: 运行环境:VS2013+SQL2008+Windows10 程序界面预览: 使用的主要控件:dataGridview和menuStrip等.  2.功能具体介绍: 1.首先,我们要先实现基本的数据操作,增删改查这几个操作. (1)先定义一个数据库操作的公共类: using System; using System.Collections.Generic; using System.Linq; using S

java连接mysql数据库配置及增删改查操作记录

一.软件下载 直接到MySQL官网下载以下两个工具:mysql-5.1.32-win32.msi.mysql-gui-tools-5.0-r17-win32.msi 前者是MySQL的安装文件,后者是MySQL Tool安装文件,包括JDBC. 二.环境配置 把mysql-connector-java-5.0.4-bin.jar从MySQL\MySQL Tools for 5.0\java\lib拷贝到D:\Tomcat 6.0\lib下,然后在classpath里面加入D:\Tomcat 6.