package oracle;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class jdbcHelper {
private static Connection con1, con2;
private static Statement sta;
private static ResultSet rs;
/**
* 分页结果集
* @param sql
* @param start
* @param end
* @param id
* @return
*/
public static List queryList(String sql, int start, int end, Map params) {
List result=new ArrayList();
try {
con1 = JdbcUtils.getConnection();// 获得数据库连接
StringBuffer buffer = new StringBuffer();
buffer.append("select * from (select row_.*, rownum rownum_ from ( ");
buffer.append(sql);
buffer.append(" ) row_ where rownum ");
buffer.append(start);
if(params.size()>0){
buffer.append(" and id=").append("'").append(params.get("id")).append("'");
}
sta = con1.createStatement();
rs = sta.executeQuery(buffer.toString());
while (rs.next()) {
result.add(rs.getString(1));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtils.closeConnection(rs, sta, con1);
}
return result;
}
/**
* 总数
* @param sql
* @param id
* @return
*/
public static int getCount(String sql,Map params){
int count=0;
try {
con1 = JdbcUtils.getConnection();// 获得数据库连接
StringBuffer buffer = new StringBuffer();
buffer.append(sql);
if(params.size()>0){
buffer.append(" where id=").append("'").append(params.get("id")).append("'");
}
sta = con1.createStatement();
rs = sta.executeQuery(buffer.toString());
while (rs.next()) {
count=rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtils.closeConnection(rs, sta, con1);
}
return count;
}
}
上面这段代码主要实现ORCAL数据库分页,目的在于用多少取多少!
package oracle;
import java.util.List;
import java.util.Map;
/**
* .
*
* @author dongwenhua
*
*/
public class PageList {
private int curPage; // 当前是第几页
private int maxPage; // 一共有多少页
private int maxRowCount; // 一共有多少行
private int rowsPerPage = 10;// 每页多少行
private Object data;
private int startPage;
private int endPage;
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public void setCurPage(int c) {
this.curPage = c ;
}
public void setMaxPage() { // 根据总行数计算总页数
if (this.maxRowCount % this.rowsPerPage == 0) {
this.maxPage = this.maxRowCount / this.rowsPerPage;
} else {
this.maxPage = this.maxRowCount / this.rowsPerPage + 1;
}
}
public void setMaxRowCount(int m) {
this.maxRowCount = m;
}
public int getCurPage() {
return this.curPage ;
}
public int getMaxPage() {
return this.maxPage;
}
public int getMaxRowCount() {
return this.maxRowCount;
}
public int getRowsPerPage() {
return this.rowsPerPage;
}
public void setMaxPage(int maxPage) {
this.maxPage = maxPage;
}
public void setRowsPerPage(int rowsPerPage) {
this.rowsPerPage = rowsPerPage;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
这个内处理分页和结果集的封装
package oracle;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 解决大数据量发邮件问题
*
* @author dongwenhua
*
*/
public class DataTest {
private static int no=0;
public static void main(String[] args) {
String sql = "select * from test ";
String count = "select count(1) from test";
Map params=new HashMap();//存放参数
int pageSize=10;
int total= jdbcHelper.getCount(count, params);//总数
int pageNo=1;
while(true){
if (no == total) {
no=0; break;
}
PageList list = getResultList(sql, count, params, pageNo, pageSize);
sendMail(list.getData());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
pageNo++;
}
System.out.println("other programm is run contiue");
}
public static PageList getResultList(String querySql,String countSql,Map params, int pageNo,int pageSize){
PageList page=new PageList();
page.setCurPage(pageNo);//当前页
page.setRowsPerPage(pageSize);//每页显示多少条
// 计数
int total = jdbcHelper.getCount(countSql, params);
page.setMaxRowCount(total);
page.setMaxPage();//计算出共有多少页
if(pageNo>page.getMaxPage()){
pageNo = page.getMaxPage();
}
int start = (pageNo - 1) * pageSize;
int end = pageNo * pageSize;
// 取单页结果集
List data = jdbcHelper.queryList(querySql, start, end, params);
page.setData(data);
return page;
}
public static void sendMail(Object obj){
if(obj instanceof List){
List list=(List)obj;
for(int i=0;i<list.size();i++){
System.out.println("发送邮件--:"+list.get(i));
no++;
}
System.out.println("--end--");
}
}
}
相关推荐
一年前写过一个百万级别数据库数据生成配置xml文件的程序,程序目的是用来把数据库里面的数据生成xml文件....最近几天现场催的比较紧,最近抽空把这个问题处理了一下,在解决问题的过程中我把解决的步骤和方法记
Java海量数据分页Bean, 适用于Oracle(适当修改,适用于任何数据库).功能描述:传入到达页码(具有容错性)、每页记录数、Select查询语句,返回该页所有的记录(整页是List集合,每条记录是一个 HashMap)、总行数、总...
基于Java3D海量地形数据网络发布.pdf文件提供了一个基于Java3D的海量地形数据网络发布系统,解决了海量地形数据的实时网络传输、管理和快速更新问题。该系统采用JEE架构,存储和管理多比例尺度DEM数据和不同分辨率...
通过使用EasyExcel,我们不仅解决了处理大量Excel数据时可能出现的内存溢出问题,还大大提高了数据处理的速度。对于104万行20列的大规模Excel文件,EasyExcel能够在70秒内完成处理,极大地提高了工作效率。未来,...
CSV(Comma Separated Values)格式因其简单、通用性而广泛用于数据交换,但在处理海量数据时,传统的导出方法可能面临效率和内存管理的难题。 在Java中,Apache POI库通常用于操作Microsoft Office文档,包括Excel...
本项目是使用Java开发的一个分布式海量小文件存储系统,功能包括文件上传、文件下载、文件存储等,解决了海量小文件在存储和访问过程中遇到的各种性能问题。 本项目是使用Java开发的一个分布式海量小文件存储系统,...
这是因为Excel文件格式本身的设计,以及Java默认处理大数据的方式,可能导致内存占用过高,尤其是在一次性加载大量数据到内存中进行处理时。为了解决这个问题,我们可以采用以下几种策略: 1. **分批导出**: - ...
该工具类是poi基于事件驱动去读取海量excel数据,解决内存溢出以及空单元格的问题。 该压缩包里面有两个文件,TestExcel.java主要是原始的处理方法,操作简单,适合小数据量的读取。 ExampleEventUserModelUtil.java...
在Java开发中,处理大数据量的数据导出是一个常见的挑战,特别是在CSV格式的文件处理上。CSV(Comma Separated Values)是一种广泛使用的数据交换格式,因其简单性和通用性而受到青睐。然而,当数据量达到千万级别时...
本项目"Java Mybatis Maven多线程处理百万数据修改的小工具"正是为了解决这样的问题而设计的。它利用Mybatis作为持久层框架,结合Java的多线程特性,实现了对大量数据进行高效修改的功能。 Mybatis是Java领域广泛...
本文将深入探讨如何使用Java编程语言实现从一个数据库中定时自动抽取数据并复制到另一个数据库,以达到数据库间的实时或近实时同步。 首先,我们需要了解基础概念。Java是一种广泛使用的面向对象的编程语言,具有...
本文将深入探讨如何使用Java来实现多个数据库之间的数据同步。 首先,我们需要理解数据同步的含义。数据同步是指在两个或多个数据库之间,当某个数据库中的数据发生改变时,这些变化能够被实时或者近实时地反映到...
在Java开发中,处理大数据量的Excel导出是一项常见的任务,尤其当数据量达到数十万条时,单个Excel文件可能会遇到性能瓶颈或格式限制。本项目针对这一问题提出了一种解决方案,即分块生成多个Excel文件,然后将它们...
本文将详细讨论如何使用Java语言来抓取网页数据,包括两种主要方法:直接抓取原网页内容和处理网页中的JavaScript返回数据。 首先,让我们探讨**抓取原网页**的方法。在Java中,我们可以使用`java.net.URL`类来建立...
Java抓取https网页数据,解决peer not authenticated异常。导入eclipse就能运行,带有所用的jar包(commons-httpclient-3.1.jar,commons-logging.jar,httpclient-4.2.5.jar,httpcore-4.2.4.jar)
在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang.OutOfMemoryError: Java heap space”是一种常见的异常情况,它表明Java虚拟机(JVM)...
Java多线程导出Excel是处理大数据量时的一种高效策略,尤其在面对千万级别的数据时。传统的Apache POI库在处理大规模数据时可能会遇到栈溢出(StackOverflowError)和内存溢出(OutOfMemoryError)等问题,因为这些...
利用 Kettle 的 API 运用 Java 代码完成数据转换到 Excel 和数据库源码 Kettle 是一个开源的 ETL 工具,纯 Java 编写,绿色无需安装,数据抽取高效稳定。Kettle 中有两种脚本文件,transformation 和 job,...
互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识