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

网友投稿 181 2023-07-22


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

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

public void setSqlValue(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

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

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 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 Arrahttp://yList();

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

}

}

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

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 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 Arrahttp://yList();

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

}

}

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 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 Arrahttp://yList();

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

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:提高性能表现!探索优秀的HTTP接口压力测试工具
下一篇:很不错的两款Bootstrap Icon图标选择组件
相关文章

 发表评论

暂时没有评论,来抢沙发吧~