获取多个随机生成的不重复的6位数,不重复的6位数或8位数串

获取多个随机生成的6位数,每次获取都不会与前一次重复 

思路1:创建一张表table,每次生成一条之后,查询一下表中是否已存在这样的话,数据越来越多,后面就挺麻

烦的,判断多次才能取到一个表中不存在的 

思路2:建议一次性在数据库表中插入多条数据(如10000条), 表名table、主键自增长id、随机数:randoms,

编写程序 执行insert 语句插入 然后创建一个sequence,从1开始,步数为1 

select randoms from table where id = (select sequence.nextval from dual);

SQL如下:

drop table tbl_random;
create table tbl_random(
    id int not null auto_increment,
    num varchar(6),
    misc varchar(10),
    primary key(id)
);
insert into tbl_random(num,misc) values('098787','000');

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
	static PreparedStatement pre = null;
	static ResultSet rs = null;

	public static void main(String[] args) {
		for (int i = 0; i < 100; i++) {
			String result = new Test().getRandom();
			System.out.println(result);
			while (exits(result) == 0) {
				execInsert(result);
				break;
			}
		}
	}

	public String getRandom() {
		String result = "";
		// 下面的6改成8就是8位随机数字
		while (result.length() < 6) {
			String str = String.valueOf((int) (Math.random() * 10));
			if (result.indexOf(str) == -1) {
				result += str;
			}
		}
		return result;
	}

	public static int exits(String num) {
		try {
			String sql2 = "select * from tbl_random where num='" + num +"'";
			pre = getConnect().prepareStatement(sql2);
			rs = pre.executeQuery();
			System.out.println(sql2);

			List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
			ResultSetMetaData md = rs.getMetaData();
			int count = md.getColumnCount();
			while (rs.next()) {
				Map<String, Object> rowData = new HashMap<String, Object>();
				for (int i = 1; i <= count; i++) {
					rowData.put(md.getColumnName(i), rs.getObject(i));
				}
				list.add(rowData);
			}
			if (list.size() > 0) {
				return 1;
			}else{
				return 0;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return 0;
	}

	public static void execInsert(String str) {
		try {
			String sql = "insert into tbl_random(num,misc) values(?,?)";
			pre = getConnect().prepareStatement(sql);
			pre.setString(1, str);
			pre.setString(2, "--");
			pre.executeUpdate();
			System.out.println(sql);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static Connection getConnect() {
		String Driver = "com.mysql.jdbc.Driver";
		String url = "jdbc:mysql://localhost:3306/test";
		String user = "root";
		String password = "pwd";
		Connection con = null;
		try {
			Class.forName(Driver).newInstance();
			con = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return con;
	}
}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值