今天接到客户那边一个需求,用26个大写英文字母加8个数字(去掉0和1,因为和字母里面的I/O相似)产生11位的随机字符串。不能有重复。(客户是个生产饮料的企业,字符打在瓶盖上,抽奖用)
看起来其实是蛮简单的,关键是要5300万条。
第一步:用java生成随机码,插入到DB,1000条提交一次,整个过程用了20多分钟。
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class RandCode {
/**
* 生成随机码,插到数据表中
* @param agrs
*/
public static void main(String[] agrs){
Connection conn = getConnection();
try{
PreparedStatement stmt = conn.prepareStatement("insert into A2 values(?)");
String temp = "";
StringBuffer buf = new StringBuffer("A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z");
buf.append(",2,3,4,5,6,7,8,9");
String[] arr = buf.toString().split(",");
for(int k = 0; k < 53000; k++){
for (int i = 0; i < 1000; i++){
temp = getPswd(arr);
stmt.setString(1, temp);
stmt.addBatch();
}
stmt.executeBatch();
conn.commit();
System.out.println(k);
}
}catch(SQLException e){
e.printStackTrace();
}
}
public static String getPswd(String[] arr){
StringBuffer b = new StringBuffer();
java.util.Random r;
int k ;
for(int i=0;i<11;i++){
r = new java.util.Random();
k = r.nextInt();
b.append(String.valueOf(arr[Math.abs(k % 34)]));
}
return b.toString();
}
}
第二步:剔除重复数据。
1、本来考虑用select语句查询出重复数据,然后删除。
select distinct(code) from a2 t group by code having count(code) > 1;
后来发现这个方法实在太天真了,5300万条数据,在等待了几分钟后,Cancel了。
请教了DBA,说建议我用md5算法,这样可以保证产生的结果不会有重复。但是md5加密出来的结果比较长,好像是32位吧,而我的客户要的是11位的。
后来DBA提议另外一个办法,再建一个临时表,把原始表里面的非重复数据选择出来,然后插入临时表。
insert into a1 (select distinct code from a2);
果然在不到5分钟的时间内,执行结束。
结束后看了看a1表中的记录总数:52999665,剔除了335条重复记录。
第三步:导出数据。
写个程序导到txt文件中去,没啥好说的,就是有点慢。(本来想保存到excel里面去,可惜每个sheet只能保存65536条。。。!)
个人感觉应该还有更加好的办法,特别是在产生随机码这块。如果能有办法直接生成不重复的记录就好了。
分享到:
相关推荐
在易语言中,生成不重复随机数是一项常见的需求,特别是在游戏开发、数据分析或者算法设计等场景。本文将深入探讨如何在易语言中实现取不重复随机数的功能。 首先,我们需要了解易语言中的随机数生成函数。在易语言...
在编程领域,尤其是在易语言中,取随机数不重复是一个常见的需求,比如在制作抽奖程序、模拟随机事件或者填充无重复数据的数组时。本文将深入探讨如何在易语言中实现这一功能,并提供相关的源码解析。 易语言,全称...
在编程领域,生成指定范围内的随机数而不重复是一项常见的需求,尤其在抽奖系统、密码生成或者数据模拟等场景。这个例子以Java语言为基础,提供了一种解决方案,可以在myEclipse集成开发环境中直接运行。下面我们将...
在编程领域,生成不重复的随机数序列是一个常见的需求,特别是在游戏开发、模拟实验或数据加密等场景。易语言作为一款中国本土的编程语言,以其简单易学的特点,深受初学者和业余爱好者的喜爱。本资源提供的“易语言...
通过循环创建随机种子来循环生成随机数,避免了重复调用Random的Next方法产生重复随机数的问题,程序里可设置文件的保存路径和产生的随机数长度
### Unity随机数不重复出现知识点详解 在Unity游戏开发中,随机数的生成是一个非常常见的需求,尤其是在设计一些需要概率事件或随机元素的游戏时。然而,有时候我们需要确保生成的随机数在一定范围内不会重复出现,...
### 数组存放不重复随机数实现方法 #### 背景与目标 在日常的编程实践中,有时我们需要生成一系列不重复的随机数,并将这些数字存储到数组中以供后续处理使用。例如,在彩票系统中,为了模拟双色球等类型的彩票...
### 生成不重复随机数的算法 在许多应用领域中,比如在线考试系统、游戏开发或是数据处理等场景,生成不重复的随机数是一项非常重要的技术。本文将详细介绍几种不同的方法来实现这一功能,并通过具体的Java代码示例...
VBA生成不重复的随机数源码.txt
在VB(Visual Basic)编程中,生成不重复的随机数是一项常见的需求,特别是在模拟、测试或者数据填充等场景。为了实现这一功能,我们可以利用FSO(FileSystemObject)对象中的词典(Dictionary)来辅助我们。词典...
根据提供的标题、描述以及部分代码内容,我们可以总结出在Visual Basic (简称VB)环境中生成不重复随机数的主要方法。此技术常用于各种场景,比如彩票系统、抽奖程序或需要无重复随机选择的应用。 ### 一、基本原理 ...
在IT领域,尤其是在编程语言C#中,生成不重复的随机数是一个常见且重要的需求,尤其是在游戏开发、安全系统、数据分析等应用场景中。本文将基于提供的文件内容,深入解析三种不同的方法来实现这一功能,旨在为读者...
在易语言中,我们经常会遇到需要生成一组不重复随机数的需求,比如在制作抽奖程序或者模拟随机事件时。"易语言取随机数不重复源码.zip"这个压缩包文件显然包含了实现这一功能的源代码。 生成不重复随机数的关键在于...
在“易语言取不重复随机数.rar”这个压缩包中,我们可以找到关于如何在易语言中生成不重复随机数的相关教程或源代码。 在编程中,生成随机数是一项常见的任务,特别是在游戏、模拟、加密等领域。而在易语言中,生成...
在Java编程中,生成十个不重复的随机数是一项常见的任务,尤其在进行数据模拟、测试或者游戏设计等场景。要实现这个功能,我们需要利用到Java的集合框架和Math类中的随机数生成方法。下面我们将详细讲解如何实现这个...
电脑随机数是如何生成的?.docx
/// 随机数最小值 /// 是否包含最小值 /// 随机数最大值 /// 是否包含最大值 /// 随机结果数量 /// 结果是否重复</param>
"不重复"则意味着我们需要生成一个序列,其中的每个随机数都是唯一的,不会出现重复。 易语言的随机数生成主要通过"随机数"函数来实现,这个函数可以根据参数设置生成指定范围内的整数或浮点数。比如,如果我们想要...
在IT行业中,生成不重复的随机数是一项常见的需求,尤其在编程和数据分析任务中。"取不重复随机数.rar"这个文件可能包含了一个易语言(EasyLanguage)的程序或者示例,用于解决这个问题。易语言是一种简洁、直观的...
在.NET框架中,生成不重复的随机数是一个常见的需求,特别是在模拟、测试或者游戏开发等场景。本篇文章将深入探讨如何使用.NET实现这一功能,并提供一个VB.NET的示例代码。 首先,我们要明白生成随机数的基本原理。...