• 数据库小项目


    项目介绍: 

    环境使用的是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);
            }
        }
    
    }
  • 相关阅读:
    远程服务器上的weblogic项目管理(二)发布完成后如何重启weblogic容器
    Oracle中日期和时间类函数
    程序员应如何提高实效?读《程序员修炼之道》有感
    远程服务器上的weblogic项目管理(一)项目部署与更新流程
    远程服务器上的weblogic项目管理(四)filelock not found错误解决方法
    浅拷贝与深拷贝
    for...of 与 for...in
    工厂函数创建对象
    Promise
    闭包内存泄漏解决方法
  • 原文地址:https://www.cnblogs.com/lumc5/p/15247090.html
Copyright © 2020-2023  润新知