一、工具介绍
1、Random
Java中的Random类是一个用于生成随机数的辅助类。它可以用来生成伪随机数序列,通过不同的种子值可以生成不同的随机数序列。
Random类提供了多个方法来生成随机数,如nextInt()用于生成一个int类型的随机数,nextLong()用于生成一个long类型的随机数,nextDouble()用于生成一个double类型的随机数等等。
在使用Random类时,需要创建一个Random对象,并给它一个种子值。种子值可以是任意的long类型整数,如果不指定种子值,则使用系统当前时间作为默认种子值。通过相同的种子值创建的Random对象将生成相同的随机数序列。
代码中的应用
Random rand = new Random();
int num1 = rand.nextInt(10000)+202400000;
String num=Integer.toString(num1);
2、JDBC
JDBC(Java Database Connectivity)是一种用于在Java程序中连接和操作数据库的API(Application Programming Interface)。
JDBC允许Java应用程序通过数据库驱动程序与各种数据库进行交互。它提供了一组用于执行SQL查询、更新数据和管理数据库连接的类和接口。
JDBC的主要功能包括:
1. 连接数据库:JDBC允许应用程序与数据库建立连接,通过提供数据库的URL、用户名和密码等信息来连接数据库。
2. 执行SQL查询:JDBC提供了执行SQL查询语句的方法,应用程序可以通过执行查询语句来获取数据库中的数据。
3. 更新数据:JDBC允许应用程序执行SQL更新语句,如插入、更新和删除数据。
4. 管理数据库连接:JDBC提供了管理数据库连接的方法,包括打开和关闭数据库连接、事务管理和连接池等功能。
通过JDBC,Java程序可以与各种数据库进行交互,如MySQL、Oracle、SQL Server等。开发人员可以使用标准的JDBC API来编写数据库相关的代码,无需关注具体数据库的实现细节。
总的来说,JDBC提供了一种方便、可靠的方式来连接和操作数据库,使Java应用程序能够有效地与数据库进行交互。
代码中的应用
1.连接数据库
有报错则添加serverTimezone=UTC,无报错可省略,本意为设置时区
package conn;
import java.sql.*;
public class DataBase {
// 数据库连接获取方法
public static Connection getConn() {
Connection conn = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/[自己的数据库名]?&serverTimezone=UTC", "root", "root");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
}
2.操作数据库
package Dao;
import conn.DataBase;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class SelectDao {
// 用于查询的数据库操作方法
public static ResultSet look(String sql){
ResultSet rs = null;
Connection conn;
Statement stm;
try {
conn= DataBase.getConn();
stm=conn.createStatement();
rs=stm.executeQuery(sql);
}catch (Exception e){
e.printStackTrace();
}
return rs;
}
}
二、方法构思
- 第一步,在首页点击注册按钮时,即可生成随机账号
- 第二步,在数据库中进行查询,查询条件为生成的随机账号
- 第三步,若无重复,返回值到UI界面进行插入
三、代码
1、UI代码
这里布局使用了setBounds进行固定的布局
package UI;
import Dao.UpdateDao;
import service.UserGet;
import service.MyMessage;
import javax.swing.*;
import java.awt.*;
public class Reg extends JFrame {
public Reg(){
JFrame rf = new JFrame("个人通讯录");
rf.setLayout(null);
rf.setResizable(false);
JLabel lb1=new JLabel("您的账号是:");
lb1.setFont(new Font("楷体",Font.CENTER_BASELINE,24));
JLabel lb2=new JLabel("请设置密码:");
lb2.setFont(new Font("楷体",Font.CENTER_BASELINE,24));
JTextField t1= new JTextField();
t1.setFont(new Font("楷体",Font.CENTER_BASELINE,24));
JPasswordField t2=new JPasswordField();
t2.setFont(new Font("楷体",Font.CENTER_BASELINE,24));
JLabel lb3 = new JLabel("设密保问题:");
lb3.setFont(new Font("楷体",Font.CENTER_BASELINE,24));
JTextField t3=new JTextField();
t3.setFont(new Font("楷体",Font.CENTER_BASELINE,24));
JLabel lb4=new JLabel("密保的答案:");
lb4.setFont(new Font("楷体",Font.CENTER_BASELINE,24));
JTextField t4=new JTextField();
t4.setFont(new Font("楷体",Font.CENTER_BASELINE,24));
JButton btn = new JButton("确认");
btn.setFont(new Font("楷体",Font.CENTER_BASELINE,24));
JButton btn1 = new JButton("清空");
btn1.setFont(new Font("楷体",Font.CENTER_BASELINE,24));
rf.setSize(800,600);
t2.setEchoChar('*');
lb1.setBounds(190,100,160,40);
t1.setBounds(370,100,200,40);
lb2.setBounds(190,150,160,40);
t2.setBounds(370,150,200,40);
lb3.setBounds(190,200,160,40);
t3.setBounds(370,200,200,40);
lb4.setBounds(190,250,160,40);
t4.setBounds(370,250,200,40);
btn.setBounds(245,300,100,40);
btn1.setBounds(415,300,100,40);
rf.add(lb1);
rf.add(t1);
rf.add(lb2);
rf.add(t2);
rf.add(lb3);
rf.add(t3);
rf.add(lb4);
rf.add(t4);
rf.add(btn);
rf.add(btn1);
rf.setLocationRelativeTo(null);
rf.setVisible(true);
rf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String temp=UserGet.temp();//在此调用工具类
t1.setText(temp);
btn1.addActionListener(e -> {
t2.setText("");
t3.setText("");
t4.setText("");
});
btn.addActionListener(e -> {
String pwd = new String(t2.getPassword());
String who = t3.getText();
String it = t4.getText();
String sql="insert into user values('"+temp+"','"+pwd+"','"+who+"','"+it+"')";
if(UpdateDao.upData(sql)>0){
new MyMessage("创建账户成功!您的账号为 "+temp+" 请牢记!");
rf.dispose();
new LoginIn();
}else {
new MyMessage("创建账户失败!");
}
});
}
}
2、生成账号代码
package service;
import Dao.SelectDao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Random;
public class UserGet {
// 创建用户的工具类,用户名是不同的随机生成的,此类就是一个随机生成用户名及查重的类,用户名以2024开头
public static String temp(){
String sql = "select username from user";
ResultSet rs = SelectDao.look(sql);//在此调用查询语句
Random rand = new Random();
int num1 = rand.nextInt(10000)+202400000;//在此可以控制开头数字
String num=Integer.toString(num1);
int flag=0;
try {
while (rs.next()){
if (num.equals(rs.getString("username"))){
flag+=1;
break;
}
}
if (flag>0){
temp();
}else {
return num;
}
}catch (Exception e1){
e1.printStackTrace();
}finally {
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return "";
}
}
3、数据库查询操作代码
package Dao;
import conn.DataBase;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class SelectDao {
// 用于查询的数据库操作方法
public static ResultSet look(String sql){
ResultSet rs = null;
Connection conn;
Statement stm;
try {
conn= DataBase.getConn();
stm=conn.createStatement();
rs=stm.executeQuery(sql);
}catch (Exception e){
e.printStackTrace();
}
return rs;
}
}