本文主要是介绍基于Derby数据库的注册登录模拟系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Derby真有趣.jpg
-
(题目来自java作业) -
(总所周知,编程只能自学。)
-
(我写代码比较随意,本篇里出现的代码可能并不是最优解,但肯定是可行解)
首先配置Derby环境(自己百度 狗头 )
或者安装依赖库也行吼
**友情提示:这只是使用数据库模拟注册登录系统,并没有涉及Cookie和Session,各位大大请无视此篇 **
<dependency><groupId>org.apache.derby</groupId><artifactId>derby</artifactId><version>10.15.2.0</version>
</dependency>
首先献上总目录
有点乱,随便看看就好啦。
分析
程序大致分为几个部分:
main方法 Example.java
import service.DatabaseService;
import service.impl.DatabaseServiceImpl;public class Example {public static void main(String[] args) {DatabaseService databaseService=new DatabaseServiceImpl();databaseService.connect("test");databaseService.createbiao("test","qwe");Win win=new Win(databaseService);}
}
总界面Win.java
import service.DatabaseService;
import service.impl.DatabaseServiceImpl;
import windows.Login;
import windows.Register;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class Win extends JFrame implements ActionListener {boolean loginzt=false;JTabbedPane p;JButton button;DatabaseService databaseService;Register register;Login login;Win(DatabaseService databaseService){this.databaseService=databaseService;login=new Login(databaseService,loginzt);register=new Register(databaseService);setTitle("登录后可玩华容道");button=new JButton("玩华容道");setBounds(100,100,650,200);setVisible(true);p=new JTabbedPane(JTabbedPane.TOP);p.add("我要注册",register);p.add("我要登录",login);p.validate();button.addActionListener(this);add(button,BorderLayout.NORTH);add(p, BorderLayout.CENTER);validate();setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}@Overridepublic void actionPerformed(ActionEvent e) {if(login.isLoginzt()){JOptionPane.showMessageDialog(this,"已登录,开始游戏");}else{JOptionPane.showMessageDialog(this,"尚未登录");}}
}
注册界面Register.java
package windows;import model.Data;
import service.DatabaseService;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Register extends JPanel implements ActionListener {DatabaseService databaseService;JTextField id,rq;JPasswordField password;JButton button;public Register(DatabaseService databaseService){this.databaseService=databaseService;add(new JLabel("ID:"));id=new JTextField(10);add(id);add(new JLabel("密码:"));password =new JPasswordField(10);add(password);add(new JLabel("出生日期:"));rq=new JTextField(10);add(rq);button=new JButton("注册");button.addActionListener(this);add(button);}@Overridepublic void actionPerformed(ActionEvent e) {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");Data data=new Data();String dataid=id.getText();String datapass=new String(password.getPassword());String datestr=rq.getText();Date datarq= null;try {datarq = simpleDateFormat.parse(datestr);} catch (ParseException parseException) {System.out.println(parseException);parseException.printStackTrace();}java.sql.Date date = new java.sql.Date(datarq.getTime());data.setDate(date);try {data.setId(dataid);data.setPassword(datapass);boolean y=databaseService.register(data);if(y){JOptionPane.showMessageDialog(this,"注册成功");}else{JOptionPane.showMessageDialog(this,"注册失败,已存在该用户");}} catch (Exception exception) {exception.printStackTrace();JOptionPane.showMessageDialog(this,"注册失败,格式错误");}}
}
登录界面Login.java
package windows;import model.Data;
import service.DatabaseService;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class Login extends JPanel implements ActionListener {DatabaseService databaseService;boolean loginzt;JTextField id;JPasswordField password;JButton button;public Login(DatabaseService databaseService,boolean loginzt){this.databaseService=databaseService;id=new JTextField(10);password=new JPasswordField(10);button=new JButton("登录");add(new JLabel("ID:"));add(id);add(new JLabel("密码:"));add(password);add(button);button.addActionListener(this);}@Overridepublic void actionPerformed(ActionEvent e) {Data data=new Data();String dataid=id.getText();String datapass=new String(password.getPassword());data.setPassword(datapass);data.setId(dataid);if(databaseService.login(data)){loginzt=true;JOptionPane.showMessageDialog(this,"登录成功");}else{JOptionPane.showMessageDialog(this,"登录失败,请检查ID和密码是否正确");}}public boolean isLoginzt() {return loginzt;}
}
方法接口DatabaseService.java和DatabaseServiceImpl.java
package service;import model.Data;public interface DatabaseService {public void connect(String name);public void createbiao(String name,String biaoname);public boolean register(Data data);public boolean login(Data data);
}
package service.impl;import java.sql.*;
import model.Data;
import service.DatabaseService;public class DatabaseServiceImpl implements DatabaseService {String biaoname,name;Connection con=null;PreparedStatement sta=null;ResultSet rs=null;String SQL=null;@Overridepublic void connect(String name) {try {Class.forName("org.apache.derby.jdbc.EmbeddedDriver");} catch (Exception e) {e.printStackTrace();System.out.println(e);}try {this.name=name;con=DriverManager.getConnection("jdbc:derby:"+name+";create=true");} catch (Exception throwables) {throwables.printStackTrace();System.out.println(throwables);}}@Overridepublic void createbiao(String name,String biaoname) {try {this.biaoname=biaoname;con=DriverManager.getConnection("jdbc:derby:"+name+";create=true");SQL="create table "+this.biaoname+" (id char(10) primary key,password varchar(30),birth date)";sta=con.prepareStatement(SQL);sta.executeUpdate();System.out.println("建表成功");} catch (Exception throwables) {System.out.println(throwables);System.out.println("表已存在");}}public boolean register(Data data){try {SQL="insert into "+this.biaoname+" values(?,?,?)";sta=con.prepareStatement(SQL);sta.setString(1,data.getId());sta.setString(2,data.getPassword());sta.setDate(3,data.getDate());sta.executeUpdate();return true;} catch (SQLException throwables) {throwables.printStackTrace();return false;}}public boolean login(Data data){try {SQL="select * from "+this.biaoname+" where id = ?";sta=con.prepareStatement(SQL);sta.setString(1,data.getId());rs=sta.executeQuery();rs.next();if(rs.getString("password").equals(data.getPassword())){return true;}else{return false;}} catch (SQLException throwables) {System.out.println(throwables);return false;}}}
以及数据对象 Data.java
package model;import java.sql.Date;public class Data {private String id;private String password;private Date date;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}
}
后记
有一说一,做Derby踩了好多坑,所以我在这里扫个雷,做Derby建议使用预处理来使用SQL语句,其次要知道Date类分为java.util.Date和java.sql.Date 就很。。。
反正我能想到的大致是这样了最后的效果大致是这样
那个华容道建议无视(作业要求),具体那个按键就是为了检验有没有登录的(模拟)。
这篇关于基于Derby数据库的注册登录模拟系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!