`
wowlinda80
  • 浏览: 62071 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

MYSQL 一次性千万条带BLOB数据库批量插入经验

 
阅读更多
DbUtil db = new DbUtil();
try {

			
			db.connect(
			"com.mysql.jdbc.Driver",
			"jdbc:mysql://192.168.0.151/ztzx?useUnicode=true&characterEncoding=UTF-8",
			"app", "app");

			String sql = "select max(sfzhm) from idc";
			
			String uuid = "";
			String sfzhm = "0";
			
			Vector<Object[]> vec = db.select(sql);
			if(vec==null || vec.size()==0){
				sfzhm="0";
			}else{
				for(Object[] obj:vec){
					sfzhm= String.valueOf(obj[0]);					
				}
			}
			
			if(StringUtils.isBlank(sfzhm)){
				sfzhm = "0";
			}
			
			System.out.println("===start===sfzhm===="+sfzhm);
			File file = new File("D:\\sfzhm.jpg");
			InputStream in = new BufferedInputStream(new FileInputStream(file));
			blob = FileUtils.readFileToByteArray(file);
                        //PreparedStatement  必须的
			PreparedStatement ps = null; 
			//long sfz= 0;
			for (int i = 0; i < 10000000; i++) {				
				
				sfzhm = String.valueOf(Long.parseLong(sfzhm)+1);
				sfzhm = CommUtils.getFormatStr(sfzhm, 18);
				sql = "insert into idc (enabled,name,sfzhm,img) values (?,?,?,?)";

				ps = db.getCconOra().prepareStatement(sql);
				ps.setInt(1, 0);
				ps.setString(2, "测试姓名");
				ps.setString(3, sfzhm);
				ps.setBinaryStream(4, in, (int) file.length());
				//ps.setBytes(4, blob);
				
				ps.addBatch();
				// 1000条批量提交一次
				if (i % 100 == 0) {
					ps.executeBatch();
				}
				
				if (i % 1000 == 0) {
					db.commit();
					ps.close();
					ps = db.getCconOra().prepareStatement(sql);
				}
				
				
				System.out.println(i+"=====sfzhm===="+sfzhm);
			}
			
			in.close();
			in = null;

			db.commit();
			
			long end = System.currentTimeMillis();			

			System.out.println((end - start)/1000);
		} catch (Exception e) {
			db.rollback();
			e.printStackTrace();
		} finally {			
			db.disConnect();
		}
分享到:
评论

相关推荐

    QT-Mysql-Blob.zip_mysql blob_qt blob 文件_qt blob类型_qt的blob

    例如,对于大文件,可能需要考虑分块读写,以避免一次性加载大量内存。此外,你还需要确保数据库的索引策略考虑到BLOB字段,因为BLOB字段不适合作为主键或频繁进行索引查找。 在实际应用中,你可能还会遇到其他挑战...

    jdbc批量插入大字段

    当积累了一定数量的语句或者操作完成后,使用`PreparedStatement.executeBatch()`一次性提交所有语句。这种方式减少了与数据库的交互次数,提高了性能。 5. **关闭资源**:记得在操作完成后关闭Statement和...

    图片批量导入oracle数据库

    将多张图片的插入操作打包成一个批次,然后一次性提交,这样可以减少与数据库的交互次数,提高导入速度。 6. **错误处理和资源关闭**:确保在发生异常时正确地回滚事务,并在操作完成后关闭数据库连接和文件输入流...

    mysql数据库my.cnf配置文件

    适用于在一次性插入100-1000+条记录时, 提高效率。默认值是8M。可以针对数据量的大小,翻倍增加。 myisam_sort_buffer_size = 1024M # MyISAM设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX...

    MySQL数据库设计规范1

    7. **合并SELECT**:一次性获取多个字段,如`SELECT column1, column2 FROM table`。 8. **索引使用**:非等值条件可能阻止后续条件使用索引。 9. **避免计算和函数**:SQL中避免数学运算和函数,保持业务逻辑和...

    oraclemysql数据传输

    5. **数据批理插值**:批理插值是指在大数据量下进行数据插入操作时,一次性处理多条记录,而非一条一条地插入。这样可以大大提高效率,减少数据库系统的负担。 6. **挑战与注意事项**: - **数据类型兼容性**:...

    将图片上传到数据库

    同时,对于大型图片,一次性加载到内存可能会导致内存溢出,这时可以考虑分块读取和写入。另外,如果数据库支持,使用存储过程或批量插入可以提高性能。 8. **注意**: - BLOB字段的大小限制取决于数据库的配置,...

    Java+MySql图片数据保存与读取的具体实例

    - **效率**:批量操作可以提高性能,例如,将多个图片数据一次性写入数据库。 - **备份与恢复**:由于数据库中存储了图片数据,备份和恢复数据库也包括了图片数据,需要考虑备份策略和恢复的复杂性。 4. **使用...

    数据库存储读取图片

    1. 使用流处理而非一次性加载整个图片到内存。 2. 分离存储和访问,例如将图片URL存储在数据库中,而图片文件存储在文件系统或云存储服务。 3. 对于大量图片,使用索引优化查询速度。 4. 如果可能,使用存储过程来...

    com.mysql.jdbc.PacketTooBigException: Packet for query is too large (11087 > 102

    4. **分批处理**:对于大量数据的操作,如批量插入,可以采用循环分批处理的方式,避免一次性发送大量数据。 5. **数据存储优化**:对于经常涉及大字段操作的表,考虑是否真的需要这么大的字段,是否可以采用其他...

    MySQL最全学习笔记

    - **批量添加**:通过`INSERT INTO`语句的变种,一次插入多行数据。 - **查询数据**:使用`SELECT`语句获取满足条件的数据,可以结合`WHERE`子句进行筛选。 - **更新数据**:`UPDATE`语句用于修改现有记录,通常...

    atguigu的JDBC资料

    批量插入可以提高性能,避免多次数据库往返。在JDBC中,可以调用Statement对象的addBatch()方法添加SQL语句到批处理队列,然后调用executeBatch()执行批量操作。 【数据库事务】 数据库事务是确保数据一致性的重要...

    MySQL 数据库优化的具体方法说明

    2. 优化INSERT语句,可以使用多值INSERT语句一次性插入多行数据,减少网络通信开销。例如: ```sql INSERT INTO table_name (column1, column2) VALUES (value1, value2), (value3, value4), ... ``` 除此...

    MySQL终级面试题,提升你的内力,给你面试助力

    MySQL是世界上最流行的关系型数据库管理系统之一,其在面试中经常涉及深入的技术问题,尤其是在求职面试中。以下是对一些核心知识点的详细解释: 1. **MySQL 锁机制**: - **表级锁**:适用于简单查询和批量更新,...

    java(jdbc)学习

    批处理允许一次性执行多条SQL语句,减少了网络往返次数,提高了批量数据处理的效率。 #### 十二、JDBC其他API 包括可滚动结果集、分页技术和可更新结果集等功能,进一步增强了JDBC的灵活性和功能。 #### 十三、...

    Jdbc深入分析

    通过批量添加SQL语句到批处理队列中,然后一次性执行,可以显著提高插入速度。 #### 十二、JDBC其他API **12.1 可滚动结果集** 可滚动结果集允许用户前后移动游标位置,方便进行数据检索。 **12.2 分页技术** ...

Global site tag (gtag.js) - Google Analytics