使用Java+MySQL做的一个简单的注册登录页面

时间:2022-08-31 11:09:14

昨天开始接触MySQL数据库,大概熟悉了一下在java中操作mysql数据库的基本用法,今天尝试着上手做了一个简单的注册登录的小例子,包括界面布局等,纯手工,感觉收获满满,特来分享一下。

我只用了5个类,包括  “连接数据库”,“注册页面”,“注册信息操作页面”,“登录页面”,“登录信息检查页面”。

注册和登录页面,我采用了BOX布局方式,因为我喜欢它的不随页面的大小改变而改变的特点,顺便通过这些练习,来检验一下自己最近的学习成果。

我发现我还是对MySQL的操作不熟,看来接下来得要有一段时间来研究MySQL数据库了。我坚持使用mysql数据库,是因为我之前对它还是了解一些的,只是没有真正上手操作,我认为数据库的操作原理应该都相似,先熟悉一门,那么别的自然是水到渠成;

行了,废话不多说了,我来分享一下我的代码,激励一下自己,如果能帮到其他和我一样的初学者,那就更好了;


(1)conn_db类

package 注册信息;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class conn_db{
Connection con;
String url = null;
//Statement stmt;

public void connection() throws ClassNotFoundException{
url = "jdbc:mysql://localhost:3306/wang?"
+ "user=root & password=883883 & useUnicode=true & characterEnunicode=UTF8";
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url);
System.out.println("连接成功");
//stmt = con.createStatement();
}
catch(SQLException e){
e.printStackTrace();
}
}


//public static void main(String[] args) throws ClassNotFoundException {
//conn_db conn = new conn_db();
//conn.connection();
//
//}
}


(2)login类

package 注册信息;

import java.awt.FlowLayout;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.*;

public class login extends JFrame{
//JLabel accountL,nameL;
JTextField accountT,nameT;
JButton okB,registB;
Box baseB1,baseB2,box1,box2,box3;//此登录页面采用Box布局方式;
login_db log;

login(){
init();
}
void init(){
log = new login_db();

accountT = new JTextField(10);
nameT = new JTextField(20);
okB = new JButton("登录");
registB = new JButton("注册");

box1 = Box.createVerticalBox();
box1.add(new JLabel("账号:"));
box1.add(Box.createVerticalStrut(8));
box1.add(new JLabel("姓名"));

box2 = Box.createVerticalBox();
box2.add(accountT);
box2.add(Box.createVerticalStrut(8));
box2.add(nameT);

box3 = Box.createHorizontalBox();
box3.add(okB);
box3.add(Box.createHorizontalStrut(20));
box3.add(registB);

baseB1 = Box.createHorizontalBox();
baseB1.add(box1);
baseB1.add(Box.createHorizontalStrut(8));
baseB1.add(box2);

baseB2 = Box.createVerticalBox();
baseB2.add(baseB1);
baseB2.add(Box.createVerticalStrut(10));
baseB2.add(box3);

okB.addActionListener(log);
registB.addActionListener(log);

log.setaccountT(accountT);
log.setnameT(nameT);
log.setButton(okB,registB);

add(baseB2);
setLayout(new FlowLayout());
setBounds(200,150,400,300);
setVisible(true);
setTitle("用户登录界面");
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}

public static void main(String[] args) {
login lo = new login();
}
}

3)login_db类

package 注册信息;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.*;

public class login_db extends conn_db implements ActionListener {
JTextField accT,nameT;
JButton okB,registB;
register re;
ResultSet rs;

public void setaccountT(JTextField a){
accT = a;
}
public void setnameT(JTextField n){
nameT = n;
}
public void setButton(JButton b1,JButton b2){
okB = b1;
registB = b2;
}

public void actionPerformed(ActionEvent e){
if(e.getSource() == okB){
if(accT.getText().equals(""))//判断用户输入是否为空;
JOptionPane.showMessageDialog(null, "请填写账号!");
else if(nameT.getText().equals(""))
JOptionPane.showMessageDialog(null, "请输入姓名");
else{
String accountT = accT.getText();
String namesT = nameT.getText();
try {
connection(); //加载conn_db类,连接数据库;
boolean com = compareWithSql(accountT,namesT);
if(com)
JOptionPane.showMessageDialog(null, "登录成功");
else{
JOptionPane.showMessageDialog(null, "账号或姓名不正确,请重新输入");
accT.setText("");
nameT.setText("");
}
}
catch (Exception e1) {
e1.printStackTrace();
}
}
}
else if(e.getSource() == registB){
new JFrame().dispose();
re = new register();
}
}

//用户输入检查
boolean compareWithSql(String accountT,String namesT) throws Exception{
String sql;
Connection con = super.con;
Statement stmt = con.createStatement();
sql = "select * from my";
//System.out.println(sql);
rs = stmt.executeQuery(sql);
while(rs.next()){//用户输入的信息和数据库中的信息做比较,判断输入是否正确;
String acc = rs.getString(1);
String names = rs.getString(2);
if(acc.equals(accountT) && names.equals(namesT)){
//break;
return true;
}
//System.out.println(acc + " " + names);
//System.out.println(accountT + " " + namesT);

}
//System.out.println("hahahaha");
return false;

}

}

4)register类

package 注册信息;

import javax.swing.JFrame;

import java.awt.FlowLayout;
import javax.swing.*;

public class register extends JFrame{
JLabel accountLabel,nameLabel;
JButton okButton,resetButton;
JTextField accountText,nameText;
Box baseBox1,baseBox2, box1,box2,box3; //此注册页面采用Box布局方式;
//JPanel pane1,pane2;

register_db regist;

register(){
init();
}


void init(){
setLayout(new FlowLayout());
accountLabel = new JLabel("账号");
nameLabel= new JLabel("姓名");
accountText = new JTextField(10);
nameText = new JTextField(20);
okButton = new JButton("确定");
resetButton = new JButton("重置");

regist = new register_db();

//lab = new JLabel("用户注册页面");

box1 = Box.createVerticalBox();
box1.add(accountLabel);
box1.add(Box.createVerticalStrut(8));
box1.add(nameLabel);
box2 = Box.createVerticalBox();
box2.add(accountText);
box2.add(Box.createVerticalStrut(8));
box2.add(nameText);
box3 = Box.createHorizontalBox();
box3.add(okButton);
box3.add(Box.createHorizontalStrut(15));
box3.add(resetButton);
baseBox1 = Box.createHorizontalBox();
baseBox1.add(box1);
baseBox1.add(Box.createHorizontalStrut(8));
baseBox1.add(box2);
baseBox2 = Box.createVerticalBox();
baseBox2.add(baseBox1);
baseBox2.add(Box.createVerticalStrut(10));
baseBox2.add(box3);
add(baseBox2);

okButton.addActionListener(regist);
resetButton.addActionListener(regist);


regist.setaccountField(accountText);
regist.setnameField(nameText);
regist.setokButton(okButton);
regist.setresetButton(resetButton);

setBounds(200,200,400,300);
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setTitle("用户注册界面");
}

//void registAction(){
//
//}


//public static void main(String[] args) {
//register re = new register();
//}

}


5)register_db类

package 注册信息;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.*;

public class register_db extends conn_db implements ActionListener{

JTextField textacc,textname;
JButton okButton,resetButton;
Statement stmt;
ResultSet rs;
//double acc;
//String name;
//Connection con = null;

public void setaccountField(JTextField a){
textacc = a;
}
public void setnameField(JTextField n){
textname = n;
}
public void setokButton(JButton b1){
okButton = b1;
}
public void setresetButton(JButton b2){
resetButton = b2;
}

public void actionPerformed(ActionEvent e){
if(e.getSource() == okButton){
if(textacc.getText().equals(""))//判断用户输入是否为空;
JOptionPane.showMessageDialog(null, "请输入账号","警告对话框",JOptionPane.WARNING_MESSAGE);
else if(textname.getText().equals(""))
JOptionPane.showMessageDialog(null,"请输入姓名","警告对话框",JOptionPane.WARNING_MESSAGE);
else{
String acc = textacc.getText();
String name = textname.getText();
try {
connection();
writeInSql(acc,name);
} catch (Exception e1) {
System.out.println("插入失败");
e1.printStackTrace();
}
}
}
else if(e.getSource() == resetButton){
textacc.setText("");
textname.setText("");
}
}

void writeInSql(String acc,String name) throws Exception{
String sql;

Connection con = super.con;
Statement stmt = con.createStatement();

//创建并检查数据库表,若没有"my"表,则创建表并执行插入操作,若表已存在,则直接执行操作,插入数据
sql = "create table if not exists my(account varchar(10),name varchar(20))";

stmt.executeUpdate(sql);
//System.out.println(sql);//查错;
System.out.println("创建表成功");

//插入存文本框中获取的数据;
sql = "insert into my(account,name) values('"+acc+"','"+name+"')";
int rw = stmt.executeUpdate(sql);
//System.out.println(sql);
if(rw <= 0){//判断数据是否插入成功
JOptionPane.showMessageDialog(null,"注册失败");
}
else{
JOptionPane.showMessageDialog(null, "注册成功");
}
}
}



运行结果:



欢迎指导!!!