学了一段时间的Java了,思量着做一点简单的小模块的东西吧,于是就有了下面的这个简单的小案例。


大致实现的功能就是注册于登录还有就是用到了一点,分层思想。仅此而已,所以非常的适合新手围观。

建立好数据库

我这里使用的是MySQL数据库,当然了,你可以选择任何你喜欢的你熟悉的数据库管理软件,只不过在建立数据库连接的时候细节不一样罢了。其作用都是一样的。

首先是建表语句咯。

/*
Navicat MySQL Data Transfer

Source Server         : localhost_3306
Source Server Version : 50624
Source Host           : localhost:3306
Source Database       : database01

Target Server Type    : MYSQL
Target Server Version : 50624
File Encoding         : 65001

Date: 2016-04-22 20:01:09
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `tb_user`
-- ----------------------------
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(15) NOT NULL,
  `password` varchar(20) NOT NULL,
  `email` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

然后是我的目录结构



从这里就可以简单的看到分层的脉络了吧。

导包

千万千万,记得导入MySQL的jar包,然后BuildPath这是必不可少的一步。否则的话,项目就进行不下去咯。

然后是思路,这也是最核心的地方

之所以分层,就是为了解决开发过程中的迷茫。这就好比我们盖房子,如果没有一个框架,随心所欲的按照自己的思路来盖房子,有可能在盖房子的中途就会出现各种意想不到的问题,到最后即使是盖出了房子,恐怕也不是我们心目中想要的结果吧。而分层就相当于搭建好一个框架,然后我们按照一种模式,在本模块上进行“丰富”,到最后把这些模块整合起来就成为了我们所希望的了。这同时也是面向对象编程的核心思想。在面向对象的世界里,万事万物皆是对象。有时候我们感觉迷茫,不是因为事物本身,而是我们面向对象解决问题的思路还没有打开罢了。

核心就是MVC设计理念,每一个都肩负着自己的使命,完成不同的任务。Model + View + Controller 结合是我们今后开发软件必不可少的一项能力。所以我们一定要在平时锻炼自己这方面的思维,这样才能游刃有余。

  • domain:即所谓的实体层,也成为bean层,“盛放”的就是一个对象,我们的数据元。

  • dao:即Data Access Object,数据访问对象。肩负着和底层(比如数据库,网络请求等等)打交道的责任。

  • service:业务逻辑层,主要是一个桥梁的作用,连接着DAO层和View层,实现我们在View层中进行的业务逻辑。

  • view:视图层,直接和用户打交道的层。给用户展现一个视图,方便用户使用软件,和直接进行操作。

  • util: 工具包。我们常用的比如数据库utils,网络请求utils,ioutils等等吧,都可以放到这里面来,给开发带来方便快捷的使用,也在一定程度上减少了重复性代码的编写,利于代码的维护。

  • test: 如果说在软件开发过程中,有一个包必不可少。那么这一定是test包,我们可以使用System.out.println的方式调试,也可以打断点的方式,或者使用JUnit的方式来完成对某一段代码编写完成后的简单的测试。所有的测试都是有必要的,因为很有可能一个很小的前期的bug,就会引起后期开发过程中的致命的危险。

代码展示

由于代码比较多,我就列出来几个简单的类吧,方便查看。

bean类如下User.java:

package domain;

import java.io.Serializable;

public class User implements Serializable {

    private String username;
    private String password;
    private String email;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password + ", email=" + email + "]";
    }
    public User(String username, String password, String email) {
        super();
        this.username = username;
        this.password = password;
        this.email = email;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}

DbUtils.java:

package utils;

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

public class DbUtils {

    private static String URL = "jdbc:mysql://localhost:3306/database01";
    private static String DRIVER = "com.mysql.jdbc.Driver";
    private static String ROOT = "root";
    private static String PASSWORD = "mysql";
    private static Connection conn = null;

    /**
     * 获得数据库连接对象
     * @return
     */
    public static Connection getConnection() {

        try {
            Class.forName(DRIVER);
            conn = DriverManager.getConnection(URL, ROOT, PASSWORD);
            if(conn != null ) {
                return conn;
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            if(conn == null ){
                throw new RuntimeException("Sorry, Connection is null! Please Check it!");
            }
        }
        return null;
    }

    /**
     * 释放数据库连接对象,避免出现资源的空等和浪费
     */
    public void releaseConnection() {

        try {
            if(conn != null ){
                conn.close();
                conn = null;
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

UserDao.java:

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import domain.User;
import utils.DbUtils;

public class UserDao {

    /**
     * 与数据库打交道的数据访问层,注册用户方法的实现
     * @param user
     * @return
     */
    public boolean register(User user) {

        if(isUserExist(user.getUsername())){
            return false;
        }

        Connection conn = null;
        try {
            conn = DbUtils.getConnection();
            String sql = "insert into tb_user(username,password,email) values(?,?,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getPassword());
            ps.setString(3, user.getEmail());

            boolean counts = ps.execute();
            if (counts) {
                return true;
            } else {
                return false;
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if (conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e2) {
                // TODO: handle exception
            }
        }

        return false;
    }

    /**
     * 登录
     * 只有在用户名和密码都匹配的情况下才能获取登陆成功的权限
     * @param username
     * @param password
     * @return
     */
    public boolean login(String username, String password) {

        Connection conn = null;
        try {
            conn = DbUtils.getConnection();
            String sql = "select count(*) totalCount from tb_user where username='" + username
                    + "' and password= '" + password + "'";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet result = ps.executeQuery();
            boolean counts = result.next();
            int totalCount = 0;
            if (counts) {
                totalCount = result.getInt("totalCount");
                if(totalCount>=1){
                    return true;
                }else {
                    return false;
                }
            }
        } catch (Exception e) {
            // TODO: handle exception
        } finally {
            try {
                if (conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return false;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////这个方法存在问题:不管用户名是什么都会返回一个true,然而这显然不是我想要的结果

    /**
     * 给定一个用户名,判断该用户名是否已经被注册
     *
     * @param username
     * @return
     */
    public boolean isUserExist(String username) {
        Connection conn = null;
        try {

            conn = DbUtils.getConnection();
            String sql = "select password from tb_user where username='" + username + "'";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet result = ps.executeQuery();
            boolean userPassword = result.next();
            if(userPassword){
                return true;
            }else{
                return false;
            }

        } catch (Exception e) {
            // TODO: handle exception
        } finally {
            try {
                if (conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return true;
    }

}

总结

本次代码量不是很大,而且不是很难,就是些简单的和数据库操作,Swing创建,以及MVC架构的实现。可能在代码中有些地方做得不够好,希望大家予以批评指正。

下面附上这个项目的打包的源码,有需要的博友可以拿去参考一下拙作。





项目源码下载链接

MySQL设计软件登录模块的更多相关文章

  1. 如何设计App登录模块?

    1.熟悉目前常见的手机APP登陆方式 ① 账号登陆(手机.邮箱) ② 第三方登陆(微信,QQ,微博) ③ 一键快捷登录(工具类,如不记单词) ④ 游客登陆(bbs) ⑤ demo测试登陆(如友盟等) ...

  2. Java SSH框架系列:用户登录模块的设计与实现思路

    1.简介用户登录模块,指的是根据用户输入的用户名和密码,对用户的身份进行验证等.如果用户没有登录,用户就无法访问其他的一些jsp页面,甚至是action都不能访问.二.简单设计及实现本程序是基于Jav ...

  3. Web应用程序系统的多用户权限控制设计及实现-登录模块【4】

    通过前三个模块的介绍,把web权限系统开发所需要的基本类,Css文件,EasyUI框架等准备好后,就可以着手开始系统的编码了. 登陆模块是权限处理系统的关键,根据输入用户的的信息,可自动从数据库中加载 ...

  4. 基于Servlet、JSP、JDBC、MySQL登录模块(包括使用的过滤器和配置)

    遇见前文的注冊模块,本篇是登录模块.主要包含登录主界面,和登录相关编写的LoginAction.LoginDao和LoginService.以及配置的Filter.以下按逻辑顺序记录具体过程和代码: ...

  5. express框架+jade+bootstrap+mysql开发用户注册登录项目

    完整的项目代码(github):https://github.com/suqinhui/express-demo express是基于Node.js平台的web应用开发框架,用express框架开发w ...

  6. WinForm EF+MySql企业管理软件C/S项目实战演练

    一.课程介绍 我们都知道在软件架构方式分为:C/S和B/S两类.这里阿笨不谈论两种软件架构的优劣之分,因为它们各有千秋,用于不同场合.一位伟大的讲师曾经说过一句话:事物存在即合理!录制这堂课程的目的就 ...

  7. MySQL 设计与开发规范

    MySQL 设计与开发规范 1 目的 本规范的主要目的是希望规范数据库设计与开发,尽量避免由于数据库设计与开发不当而产生的麻烦:同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很好保 ...

  8. 读<<领域驱动设计-软件核心复杂性应对之道>>有感

    道可道,非常道. 名可名,非常名. 无名天地之始,有名万物之母. ---老子 关于标题 好久没写东西了,动笔的动机是看完了一本书,想写点总结性的东西,一是为了回顾一下梳理知识点,二是为了日后遗忘时能有 ...

  9. 免费的ER 设计软件调研

    目标: 找到一个免费的ER 设计软件, 适合数据仓库项目开发. 结果: 经初步调研, Oracle的 SQL Developer Data Modeler基本满足需求. 但在功能和操作性等方面, 较P ...

随机推荐

  1. BZOJ4589 Hard Nim(快速沃尔什变换模板)

    终于抽出时间来学了学,比FFT不知道好写到哪里去. #include <cstdio> typedef long long ll; ,p=1e9+; int k,m,n,a[N],pi[N ...

  2. 笔记10 在XML中声明切面(1)

    1.无注解的Audience package XMLconcert; public class Audience { public void silenceCellPhones() { System. ...

  3. python2.7练习小例子(二)

        2):题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%:2 ...

  4. Qone 正式开源,使 javascript 支持 .NET LINQ

    Qone 下一代 Web 查询语言,使 javascript 支持 LINQ Github: https://github.com/dntzhang/qone 缘由 最近刚好修改了腾讯文档 Excel ...

  5. vue 移动端公众号采坑经验

    自己用vue做微信公众号项目有一段时间了,遇到各种奇葩的问题,下面细数那些坑: 第一坑:微信分享导致安卓手机无法调起相册和无法调起微信充值 解决方案: setTimeout(_ => { wx. ...

  6. java.lang.NumberFormatException: For input string: " "

    原因:这个异常是说,在将字符串""转换为number的时候格式化错误.额,很简单的异常,以前我是写个方法,然后遍历对比不正确的数字或者用正则表达式之类的.现在发现一个很漂亮的方法, ...

  7. Java 的异常处理机制

    异常是日常开发中大家都「敬而远之」的一个东西,但实际上几乎每种高级程序设计语言都有自己的异常处理机制,因为无论你是多么厉害的程序员,都不可避免的出错,换句话说:你再牛逼,你也有写出 Bug 的时候. ...

  8. aways on 配置部署(一)——准备工作

    sqlserver的aways on 配置需要经历三个步骤,前面两个步骤是对aways on 配置的一个准备步骤. 经过了一个星期的研究,终于成功的完成了前两个步骤,期间参考了很多的资料和博客,总感觉 ...

  9. 如何找回Oracle所有用户丢失的密码

    如何找回Oracle所有用户丢失的密码: 方法一:1.以操作系统验证的方式登录 SQL>conn / as sysdba; 2.查看系统中的用户名. SQL>select USERNAME ...

  10. Winform DevExpress控件库(二) 使用SplashScreenManager控件定制程序加载页面

    SplashScreenManager控件:主要作用是显示在进行耗时操作时的等待界面: 位于 工具箱 -> Navigation & Layout(导航栏与布局类控件) 目录下: 在工具 ...