基于Derby数据库的注册登录模拟系统

2024-01-19 10:30

本文主要是介绍基于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.javaDatabaseServiceImpl.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.Datejava.sql.Date 就很。。。

反正我能想到的大致是这样了最后的效果大致是这样
在这里插入图片描述

那个华容道建议无视(作业要求),具体那个按键就是为了检验有没有登录的(模拟)。

这篇关于基于Derby数据库的注册登录模拟系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/622130

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查

Python+PyQt5实现MySQL数据库备份神器

《Python+PyQt5实现MySQL数据库备份神器》在数据库管理工作中,定期备份是确保数据安全的重要措施,本文将介绍如何使用Python+PyQt5开发一个高颜值,多功能的MySQL数据库备份工具... 目录概述功能特性核心功能矩阵特色功能界面展示主界面设计动态效果演示使用教程环境准备操作流程代码深度解

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo