数据库小项目

项目介绍: 

环境使用的是mysql5.2+java1.7+navicat_java。

项目内涉及到MVC模式,数据库连接,JDBC等知识。

项目要求连接到数据库上,使用Java代码实现对数据库增删改查操作。

一,设计功能

二,准备工作(UML属性图,建立数据库,MVC模式简介)

1,设计相关属性类型

  这里有必要说一下为啥id使用varchar类型,因为使用整型的id,在网页地址上就会很容易的被不法分子猜到下一个用户的id,对于用id索引的页面来说这样是非常不安全的,容易泄露内部信息。所以,这里推荐使用32位随即生成的UUID类型的id,id重复率极低,并且也保护了用户信息。

2,设计数据库,数据表

3,设计MVC模式功能

架构应该做到可维护性,可修改性。

MVC模式:用视图层(View)访问业务层(Model),业务层写功能。控制器接受请求。视图层和Controller进行交互。控制器向模型层索要用户列表。模型层找到用户列表的模型,返回给模型,模型再返回给控制器,控制器再拿给视图。

三,编写JDBC工具包

编写JDBC工具类,写一个工具类受用终身。数据库不也就是增删改查嘛,写好之后以后工作直接拿来用,赛高。

位置:

参考程序:

package util;

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

/**
 * 数据库连接工具类
 * @author Administrator
 *
 */
public class JDBCUtil {
    private static final String DB_USER_NAME="root";//数据库用户名
    private static final String DB_PASSWORD="root";//数据库密码
    private static final String DB_NAME="user_management";//数据库名称
    private static final String IP="127.0.0.1";//服务器IP地址
    private static final String URL="jdbc:mysql://"+IP+":3306/"+DB_NAME;//mysql连接
    
    private static Connection conn;//创建连接对象(路)
    private static Statement stmt;//执行命令的对象(执行sql语句)(人)
    private static ResultSet rs;//保存select之后查询结果的数据的对象(车)
    
    /**
     * 获取数据库连接对象Connection
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    private static Connection getCon() throws ClassNotFoundException, SQLException{
        //加载MySql驱动
        Class.forName("com.mysql.jdbc.Driver");
        if(conn==null||conn.isClosed()){
            conn=DriverManager.getConnection(URL, DB_USER_NAME, DB_PASSWORD);
        }
        return conn;//java单例模式可以让代码更优秀
    }
    
    /**
     * 获得statement对象用于执行Sql语句
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    private static Statement openStmt() throws ClassNotFoundException, SQLException{
        stmt=getCon().createStatement();
        return stmt;
    }
    
    
    /**
     * 执行数据库的增(insert),删(delete),改(update)操作
     * @param sql
     * @return
     */
    public static int executeSQL(String sql){
        int i=0;
        try {
            i=openStmt().executeUpdate(sql);//执行sql语句
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //关闭数据库相关对象
            close();
            
        }
        
        return i;
    }
    
    
    /**
     * 执行数据库查询(select)的操作
     * @param sql
     * @return
     */
    public static ResultSet search(String sql){
        try {
            rs=openStmt().executeQuery(sql);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return rs;
    }
    
    
    /**
     * 关闭数据库的方法
     */
    public static void close(){
        //先关车,再关人,最后关路
        try {
            if(rs!=null)
            {
                rs.close();//关闭ResultSet(车)
            }
            if(stmt!=null)
            {
                stmt.close();//关闭Statement对象(人)
            }
            if(conn!=null)
            {
                conn.close();//关闭Connrction对象(路)
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
}

四,编写MVC模式功能

像这样先建好mvc分开的三个包存储对应的代码,这样子方便维护。

 就拿注册界面举例,其他功能都是换汤不换药。

1,在Model里面建立一个model界面

这里是注册功能用的RegeditModel界面(名字我们自己取的)

参考 程序:

package model;

import java.util.UUID;

import entity.User;
import util.JDBCUtil;
/**
 * 用户注册导包
 * @author Administrator
 *
 */
public class RegeditModel {

    public boolean userRegedit(User user){
        boolean isOk=false;
        String id=(UUID.randomUUID()+"").replace("-","");
        //字符串截断,镶嵌id
        String sql = "insert into t_user values('"+id+"', '"+user.getUsername()+"', '"+user.getPwd()+"', '"+user.getSex()+"', "+user.getAge()+", '"+user.getPhone()+"', '"+user.getEmail()+"', '"+user.getIdcard()+"', '"+user.getAddr()+"')";
        int i=JDBCUtil.executeSQL(sql);
        if(i>0)
            isOk=true;
        return isOk;
    }
}

2,建立一个Controller来做中转用

不管多少个功能,都可以写在一个controller文件下,他就是实例化对象调用函数用的。

参考程序:

package controller;

import java.sql.ResultSet;

import entity.User;
import model.LoginModel;
import model.RegeditModel;
import model.ShowModel;
import model.UpdateModel;
/**
 * 控制层
 * @author Administrator
 *
 */
public class UserController {

    /**
     * 找到用户业务模型,并执行业务方法
     * @param user
     * @return
     */
    public boolean regedit(User user){
        RegeditModel model=new RegeditModel();
        return model.userRegedit(user);
    }
    
    

这里头是注册功能,所以实例化了一个User对象,用来储存属性值信息。放在了enitity包下

参考程序:

package entity;

public class User {
    private String id;
    private String username;
    private String pwd;
    private String sex;
    private int age;
    private String phone;
    private String email;
    private String idcard;
    private String addr;
    
    public User(){
        
    }
   
    public User(String id, String username, String pwd, String sex, int age, String phone, String email, String idcard,
            String addr) {
        this.id = id;
        this.username = username;
        this.pwd = pwd;
        this.sex = sex;
        this.age = age;
        this.phone = phone;
        this.email = email;
        this.idcard = idcard;
        this.addr = addr;
    }
    public final String getId() {
        return id;
    }
    public final void setId(String id) {
        this.id = id;
    }
    public final String getUsername() {
        return username;
    }
    public final void setUsername(String username) {
        this.username = username;
    }
    public final String getPwd() {
        return pwd;
    }
    public final void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public final String getSex() {
        return sex;
    }
    public final void setSex(String sex) {
        this.sex = sex;
    }
    public final int getAge() {
        return age;
    }
    public final void setAge(int age) {
        this.age = age;
    }
    public final String getPhone() {
        return phone;
    }
    public final void setPhone(String phone) {
        this.phone = phone;
    }
    public final String getEmail() {
        return email;
    }
    public final void setEmail(String email) {
        this.email = email;
    }
    public final String getIdcard() {
        return idcard;
    }
    public final void setIdcard(String idcard) {
        this.idcard = idcard;
    }
    public final String getAddr() {
        return addr;
    }
    public final void setAddr(String addr) {
        this.addr = addr;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", pwd=" + pwd + ", sex=" + sex + ", age=" + age
                + ", phone=" + phone + ", email=" + email + ", idcard=" + idcard + ", addr=" + addr + "]";
    }
    
}

3,建立View界面

参考程序:

package view;

import controller.UserController;
import entity.User;

/**
 * 视图层
 * @author Administrator
 *
 */
public class RegeditView {
    public static void main(String[] args) {
        
        UserController controller=new UserController();
        User u = new User(null, "admin", "123456", "男", 20, "13333337890", "2342434@qq.com", "220980776853675524", "吉林省长春市朝阳区");
        
        if(controller.regedit(u)){
            System.out.println("注册成功");
        }
        else{
            System.out.println("注册失败");
        }
    }
}

4,其他功能请重复123........

五,全部程序

 全部程序我粘贴在这里:

1,Controller

package controller;

import java.sql.ResultSet;

import entity.User;
import model.LoginModel;
import model.RegeditModel;
import model.ShowModel;
import model.UpdateModel;
/**
 * 控制层
 * @author Administrator
 *
 */
public class UserController {

    /**
     * 找到用户业务模型,并执行业务方法
     * @param user
     * @return
     */
    public boolean regedit(User user){
        RegeditModel model=new RegeditModel();
        return model.userRegedit(user);
    }
    
    
    
    
    
    
    public boolean login(String name,String pwd){
        LoginModel model=new LoginModel();
        return model.userLogin(name, pwd);
    }
    
    public ResultSet show(String name){
        ShowModel model=new ShowModel();
        return model.showinfo(name);
    }
    
    public int update(String id,String username,String pwd,String sex,int age,String phone,String email,String idcard,String addr){
        
        UpdateModel model=new UpdateModel();
        return model.userUpdate(id, username, pwd, sex, age, phone, email, idcard, addr);
    }
}

2,Model

这里一定要记得在业务层关闭数据库啊!!! 不然不部关数据库的话 当使用人数变多的时候 数据库就会反应不过来而导致崩溃的啊!!!一定要加上JDBCUtil.close();!!!

登录功能LoginModel

package model;

import java.sql.ResultSet;
import java.sql.SQLException;

import util.JDBCUtil;

public class LoginModel {
    
    public boolean userLogin(String uname,String pwd){
        boolean isOk=false;
        String sql="select* from t_user where username='"+uname+"' and pwd='"+pwd+"'";
        ResultSet rs=JDBCUtil.search(sql);
        try {
            isOk=rs.next();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    JDBCUtil.close();
return isOk; } }

注册功能RegeditModel

package model;

import java.util.UUID;

import entity.User;
import util.JDBCUtil;
/**
 * 用户注册导包
 * @author Administrator
 *
 */
public class RegeditModel {

    public boolean userRegedit(User user){
        boolean isOk=false;
        String id=(UUID.randomUUID()+"").replace("-","");
        //字符串截断,镶嵌id
        String sql = "insert into t_user values('"+id+"', '"+user.getUsername()+"', '"+user.getPwd()+"', '"+user.getSex()+"', "+user.getAge()+", '"+user.getPhone()+"', '"+user.getEmail()+"', '"+user.getIdcard()+"', '"+user.getAddr()+"')";
        int i=JDBCUtil.executeSQL(sql);
        if(i>0)
            isOk=true;
    JDBCUtil.close();
return isOk; } }

展示信息ShowModel

package model;

import java.sql.ResultSet;

import util.JDBCUtil;

public class ShowModel {
    
    public ResultSet showinfo(String name){
        
        
        String sql="select * from t_user where username='"+name+"'";
        ResultSet rs=JDBCUtil.search(sql);
        JDBCUtil.close();
        return rs;
        
    }
}

更新功能UpdateModel

package model;

import util.JDBCUtil;

public class UpdateModel {
    public int userUpdate(String id,String username,String pwd,String sex,int age,String phone,String email,String idcard,String addr){
        
        
        String sql="update t_user set username='"+username+"',pwd='"+pwd+"',sex='"+sex+"',age='"+age+"',phone='"+phone+"',email='"+email+"',idcard='"+idcard+"',addr='"+addr+"' where id='"+id+"'";
        int i=JDBCUtil.executeSQL(sql);
        System.out.println("更新"+username+"的数据成功");
      JDBCUtil.close();
return i; } }

3,View

登录页面LoginView

package view;

import java.util.Scanner;

import controller.UserController;

public class LoginView {
    public static void main(String[] args) {
        /**
         * 用户登录
         */
        UserController controller=new UserController();
            
        boolean flag=true;
        while(flag){
            System.out.println("用户登录");
            System.out.println("请输入用户名");
            Scanner sc=new Scanner(System.in);
            String name=sc.next();
            System.out.println("请输入密码:");
            String pwd=sc.next();
            if(controller.login(name,pwd)){
                System.out.println("登陆成功");
                flag=false;
            }else{
                System.out.println("登陆失败");
            }
        }
        
        
        
    }
}

注册界面RegeditView:

package view;

import controller.UserController;
import entity.User;

/**
 * 视图层
 * @author Administrator
 *
 */
public class RegeditView {
    public static void main(String[] args) {
        
        UserController controller=new UserController();
        User u = new User(null, "admin", "123456", "男", 20, "13333337890", "2342434@qq.com", "220980776853675524", "吉林省长春市朝阳区");
        
        if(controller.regedit(u)){
            System.out.println("注册成功");
        }
        else{
            System.out.println("注册失败");
        }
    }
}

展示信息界面ShowView:

package view;

import java.sql.ResultSet;
import java.sql.SQLException;

import controller.UserController;

public class ShowView {

    public static void main(String[] args) {
        UserController controller=new UserController();
        ResultSet rs=controller.show("陆双");
        try {
            while(rs.next()){
                String id=rs.getString("id");
                String name=rs.getString("username");
                String pwd=rs.getString("pwd");
                String sex=rs.getString("sex");
                int age=rs.getInt("age");
                String phone=rs.getString("phone");
                String email=rs.getString("email");
                String idcard=rs.getString("idcard");
                String addr=rs.getString("addr");
                System.out.println(id+","+name+","+pwd+","+pwd+","+sex+","+age+","+phone+","+email+","+idcard+","+addr);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

更新界面UpdateView:

package view;

import controller.UserController;

public class UpdateView {

    public static void main(String[] args) {
        UserController controller=new UserController();
        int i=controller.update("d8a27f32ad8a4b98a49d6de2ab584b36", "陆双", "122332", "女", 20, "13309098080", "232323@qq.com", "211321200109097776", "黑龙江省");
        
        System.out.println(i);
    }

}

六,代码优化

优化的是查询功能

可以使用ArrayList 内部存储User类型数据,让查询功能更有结构化

1,Model.UserListModel

package model;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import entity.User;
import util.JDBCUtil;

public class UserListModel {

    public List<User> selectUsers(){
        List<User> users=new ArrayList<>();
        
        String sql="select * from t_user";
        
        ResultSet rs=JDBCUtil.search(sql);
        
        try {
            while(rs.next()){
                String id=rs.getString("id");
                String username=rs.getString("username");
                String pwd=rs.getString("pwd");
                String sex=rs.getString("sex");
                int age=rs.getInt("age");
                String phone=rs.getString("phone");
                String email=rs.getString("email");
                String idcard=rs.getString("idcard");
                String addr=rs.getString("addr");
                
                User u=new User(id, username, pwd, sex, age, phone, email, idcard, addr);
                users.add(u);
            }
            JDBCUtil.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    return users;
    }
}

2,Controller

package controller;

import java.sql.ResultSet;
import java.util.List;

import entity.User;
import model.LoginModel;
import model.RegeditModel;
import model.ShowModel;
import model.UpdateModel;
import model.UserListModel;
/**
 * 控制层
 * @author Administrator
 *
 */
public class UserController {

    /**
     * 找到用户业务模型,并执行业务方法
     * @param user
     * @return
     */
    public boolean regedit(User user){
        RegeditModel model=new RegeditModel();
        return model.userRegedit(user);
    }
    
    
    
    
    
    
    public boolean login(String name,String pwd){
        LoginModel model=new LoginModel();
        return model.userLogin(name, pwd);
    }
    
    public ResultSet show(String name){
        ShowModel model=new ShowModel();
        return model.showinfo(name);
    }
    
    public int update(String id,String username,String pwd,String sex,int age,String phone,String email,String idcard,String addr){
        
        UpdateModel model=new UpdateModel();
        return model.userUpdate(id, username, pwd, sex, age, phone, email, idcard, addr);
    }
    
    /**
     * 获得全部用户
     */
    public List<User> getusers(){
        UserListModel model=new UserListModel();
        return model.selectUsers();
    }
}

3,View.UserView

package view;

import java.util.List;

import controller.UserController;
import entity.User;

public class UserView {

    public static void main(String[] args) {
        UserController con=new UserController();
        List<User> list=con.getusers();
        for(User a:list){
            System.out.println(a);
        }
    }

}
原文地址:https://www.cnblogs.com/lumc5/p/15247090.html