连接数据库程序:
public class CreateODBC {
public static Connection getconn(){
Connection conn = null;
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/db?&characterEncoding=UTF-8";
String user = "root";
String password = "root";
try {
Class.forName(driver);
conn=DriverManager.getConnection(url, user, password);
} catch(Exception e) {
e.printStackTrace();
}
return conn;
}
}
处理程序:
public class DoSql {
/**
* 每次取存的数量
*/
static int rows = 5000;
/**
* items总条数
*/
static int count = 0;
/**
* 得到一个数据库连接
*/
static Connection con = null;
/**
* 得items总条数的statement对象
*/
static Statement smSelectCount = null;
/**
* 保存items总条数的结果
*/
static ResultSet rsSelectCount = null;
/**
* 从items 查name、nums的statement对象
*/
static Statement smSelect = null;
/**
* 保存从items 查name、nums的结果
*/
static ResultSet rsSelect = null;
/**
* 将name(nums),name(nums)保存到orders表中的statement对象
*/
static Statement smUpdate = null;
/**
* 查询orders表中是否已存在tostr(如果存在追加上去)
*/
static Statement smSelectName = null;
/**
* 保存 查询orders表中是否已存在tostr结果
*/
static ResultSet rsSelectName = null;
static String tostr = null;
/**
* @param args
* @describe 将tiems 表中的name字段、nums字段
* 转换成name(nums),name(nums)...的形式,存到sdb_orders表的tostr字段
*/
public static void main(String[] args) {
try {
count = getCount();
System.out.println("总条数为:" + count);
int count_2 = count % rows;
int times;
if (count_2 == 0) {
times = count / rows;
} else {
times = count / rows + 1;
}
int i = 0;
for (i = 0; i < times; i++) {
con=CreateODBC.getconn();
smSelect = con.createStatement();
smUpdate = con.createStatement();
String sql = getSelectSql(i * rows);
System.out.println(i + "、" + sql);
rsSelect = smSelect.executeQuery(sql);
int co = 0;
while (rsSelect.next()) {
tostr = rsSelect.getString("name") + "("
+ rsSelect.getString("nums") + ")";
//System.out.println(tostr);
String getTostr = "SELECT order_id,tostr from sdb_orders where order_id ="
+ rsSelect.getString("order_id") + ";";
smSelectName = con.createStatement();
rsSelectName = smSelectName.executeQuery(getTostr);
while (rsSelectName.next()) {
// 如果tostr不为空,就追加上去
if (!((rsSelectName.getString("tostr")=="") || (rsSelectName
.getString("tostr")==null))) {
tostr +=(rsSelectName.getString("tostr")=="")?(""):("," + rsSelectName.getString("tostr"));
}
}
String insertSql = "UPDATE sdb_orders SET tostr ='"
+ escap(tostr) + "'WHERE order_id= '"
+ rsSelect.getInt("order_id") + "';";
System.out.println("插入的第" + (i * rows + co) + "条:"
+ insertSql);
smUpdate.executeUpdate(insertSql);
co++;
}
rsSelectCount.close();
rsSelect.close();
smSelectCount.close();
smSelect.close();
smUpdate.close();
con.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
rsSelectCount.close();
rsSelect.close();
smSelectCount.close();
smSelect.close();
smUpdate.close();
con.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} finally {
}
}
/**
* 得到 items 的总条数
*
* @return 总条数
* @throws SQLException
*/
private static int getCount() throws SQLException {
con = CreateODBC.getconn();
smSelectCount = con.createStatement();
String getcount = "select count(*) from items;";
rsSelectCount = smSelectCount.executeQuery(getcount);
while (rsSelectCount.next()) {
count = rsSelectCount.getInt(1);
}
rsSelectCount.close();
smSelectCount.close();
return count;
}
/**
* 选出从m 开始的rows条数据
*
* @param m
* 开始行
* @return 该sql语句
*/
public static String getSelectSql(int m) {
String str = "";
str = "SELECT name,nums,order_id FROM items LIMIT " + m + ","
+ rows;
return str;
}
/**
* 将字符串str中的'转义
*
* @param str
* 要转义的字符串
* @return 转义后的字符串
*/
public static String escap(String str) {
str = str.replace("'", "\\'");
return str;
}
}
本人菜鸟,请斧正
分享到:
相关推荐
### Java大批量导出数据至Excel或XML技术详解 #### 技术背景及应用场景 在企业级应用开发中,...通过上述内容的学习,开发者可以更好地掌握Java大批量数据导出的技术要点,从而更加高效地应对实际开发中的各种需求。
Java批量插入Oracle数据是一种高效的数据处理策略,尤其是在大数据量场景下。通过合理设计代码结构,利用`PreparedStatement`的批处理功能,可以显著提升数据插入的速度和系统的整体性能。在实践中,还需注意细节如...
- 延迟写入:在数据量非常大的情况下,可以采用延迟写入策略,先将数据缓存起来,达到一定阈值或者指定条件时才批量写入文件。 总结来说,Java导出大量数据到Excel文件时,需要关注内存管理、文件分片以及格式兼容...
Java多线程编程实战之模拟大量数据同步是一个关键的话题,特别是在大数据处理和高并发系统中。这个主题涉及到了如何在Java环境中有效地管理和同步大量数据,确保数据一致性与系统的稳定性。 首先,我们要理解Java多...
标题中的"通过多线程任务处理大批量耗时业务并返回结果"指的是在Java或其他支持多线程的编程语言中,如何有效地分配工作到多个线程,以便同时处理大量任务,并在任务完成后收集和处理结果。 描述中提到的"当监测到...
本主题聚焦于“大批量数据导出到XLS”,这是一个关于如何高效地将大量数据从网页或其他数据源导出到Excel(XLS)文件的过程。XLS是Microsoft Excel的一种文件格式,广泛用于存储和组织表格数据,便于分析和共享。 ...
Java多线程导出Excel是处理大数据量时的一种高效策略,尤其在面对千万级别的数据时。传统的Apache POI库在处理大规模数据时可能会遇到栈溢出(StackOverflowError)和内存溢出(OutOfMemoryError)等问题,因为这些...
综上所述,这个大批量Excel导出工具类结合了Apache POI库,提供了读取和可能的写入Excel文件的能力,特别适合处理大量数据的导出场景,同时通过合理的数据结构和异常处理机制,保证了程序的稳定性和效率。
项目文件"SparkOnHiveToEs_v1"可能包含了实现上述步骤的Java源代码,包括Spark配置、Hive连接、数据处理逻辑和ElasticSearch的写入操作。通过阅读和理解这些代码,可以深入学习如何在实际项目中整合这些技术。 ...
SpringBoot简化了Spring应用程序的配置和启动过程,而SpringBatch则是一个强大的批处理框架,它提供了丰富的功能来处理大规模数据。 首先,SpringBoot是基于Spring框架的一个快速开发工具,它通过内嵌的Tomcat...
这是因为这些库在内存中构建整个工作簿模型,当数据量过大时,所需内存会迅速增加,可能导致Java虚拟机(JVM)崩溃。为了解决这个问题,可以采取分批导出策略。 分批导出是指将大数据集分割成若干小块,逐批处理和...
在IT领域,特别是服务器端和分布式系统的设计与优化中,管理大批量并发处理是一项至关重要的任务。并发处理能够显著提高系统的效率,使多个任务或请求同时进行,从而充分利用硬件资源,提升整体性能。本压缩包文件...
Java多线程读取大文本文件并批量插入MongoDB的代码,文本文件,csv文件,可以结合POI改造使其支持excel。 适合做大量文本数据或日志文件入库的场景,大文本被拆分成多个线程处理,速度快。 批量插入MongoDB,存在则...
Java大批量导入MySQL是一种高效的数据导入方式,使用MYSQL的LOAD DATA LOCAL INFILE语句可以快速地从一个文本文件中读取行,并装入一个表中。这种方式广泛应用于数据交换和导入,尤其是在数据量非常大的情况下。 ...
在Oracle数据库环境中,根据特定条件大批量删除数据是一项常见的任务,尤其在数据清理或系统维护时。本小程序的目的是提供一种高效且可控的方式来执行这样的操作。以下是对这个"Oracle环境下根据条件大批量删除数据...
本文将深入探讨多线程的概念、原理以及如何在Java中实现多线程,同时结合提供的"TestThread.java"文件,解析其代码结构和执行流程。 一、多线程基础 多线程是指在一个程序中存在多个执行流,这些执行流可以并行或...
在处理Excel数据时,尤其是涉及百万级别的数据量,效率和性能是至关重要的。"Excel百万级别数据的导入和导出"这一主题主要关注如何高效、有效地管理大量数据在Excel中的输入与输出。以下将详细讨论相关知识点: 1. ...
页面excle表导入大批量数据批量入库的边界值判断,假设excle表10万数据,5000为一批,10万是可以被5000整除的,那么此时整除的边界要进行处理(具体参见代码,以代码为列子阐述),否则会可能将会在最后一次出现null...