多平台统一管理软件接口,如何实现多平台统一管理软件接口
206
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 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(); } } sqlValues = new ArrayList();
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 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(); } } sqlValues = new ArrayList();
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~