zoukankan      html  css  js  c++  java
  • JDBC MVC框架实现用户登录

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写

    1、实体entity

     1 package com.uplooking.entity;
     2 
     3 import java.io.Serializable;
     4 
     5 public class User implements Serializable {
     6     private int id;
     7     private String name;
     8     private String pwd;
     9 
    10 
    11     public int getId() {
    12         return id;
    13     }
    14     public void setId(int id) {
    15         this.id = id;
    16     }
    17     public String getName() {
    18         return name;
    19     }
    20     public void setName(String name) {
    21         this.name = name;
    22     }
    23     public String getPwd() {
    24         return pwd;
    25     }
    26     public void setPwd(String pwd) {
    27         this.pwd = pwd;
    28     }
    29 
    30 
    31 }

    2、

     1 package com.uplooking.dao;
     2 
     3 import com.uplooking.entity.User;
     4 
     5 import java.sql.Connection;
     6 import java.sql.DriverManager;
     7 import java.sql.PreparedStatement;
     8 import java.sql.ResultSet;
     9 import java.sql.SQLException;
    10 
    11 public class UserDao {
    12     public  User findByName(String name) {
    13         PreparedStatement statement = null;
    14         Connection con = null;
    15         try {
    16             //1、加载驱动
    17             Class.forName("com.mysql.jdbc.Driver");
    18             //2、创建连接
    19             String sqlUrl = "jdbc:mysql://127.0.0.1:3307/test?useunicode=true&characterEncoding=utf8";
    20             //Driver表示Java驱动的街口
    21             con = DriverManager.getConnection(sqlUrl,"root","");
    22 
    23             //3、预编译,使用占位符
    24             String sql = "select * from user where name= ? ";
    25 
    26             //4、创建连接状态
    27             statement = con.prepareStatement(sql);
    28 
    29             //5、填充占位符      第1列
    30             statement.setString(1, name);
    31 
    32             ResultSet set = statement.executeQuery();
    33 
    34             User user = null;
    35             if (set.next()) {
    36                 user = new User();
    37                 user.setId(set.getInt("id"));
    38                 user.setName(set.getString("name"));
    39                 user.setPwd(set.getString("pwd"));
    40                 return user; //结果集有用户,则返回用户
    41             }
    42 
    43         }catch(ClassNotFoundException e){
    44             e.printStackTrace();
    45         }catch(SQLException e){
    46             e.printStackTrace();
    47         }finally {
    48             try{
    49                 statement.close();
    50                 con.close();
    51             } catch(SQLException e){
    52                 e.printStackTrace();
    53             }
    54         }
    55         return null;
    56     }
    57 
    58 }

    3、服务

    (1)服务接口

    1 package com.uplooking.service;
    2 
    3 import com.uplooking.entity.User;
    4 
    5 public interface UserService {
    6     User login(String name,String pwd);
    7 }

    (2)服务实现

     1 package com.uplooking.service.imp;
     2 
     3 import com.uplooking.dao.UserDao;
     4 import com.uplooking.entity.User;
     5 import com.uplooking.service.UserService;
     6 
     7 public class UserServiceimp implements UserService {
     8    private UserDao userDao=new UserDao();
     9     @Override
    10     public User login(String name, String pwd) {
    11         User user=userDao.findByName(name);
    12         if(user!=null&&pwd.equals(user.getPwd())){
    13             return user;
    14         }
    15         return null;
    16     }
    17 }

    4、用户响应

     1 package com.uplooking.action;
     2 
     3 import com.uplooking.entity.User;
     4 import com.uplooking.service.UserService;
     5 import com.uplooking.service.imp.UserServiceimp;
     6 
     7 public class UserAction {
     8     public static void main(String[] args) {
     9         UserAction userAction=new UserAction();
    10         userAction.login("smith","123");
    11     }
    12     private UserService userService=new UserServiceimp();
    13     public void login(String name,String pwd){
    14         User user=userService.login(name,pwd);
    15         if(user!=null){
    16             System.out.println("用户:"+user.getName()+"   成功登陆。");
    17         }else{
    18             System.out.println("用户名或密码错误,登录失败。");
    19         }
    20     }
    21 
    22 }

     执行结果:

    二:进行方法抽象

    1、将配置文件放入properties文件中。

    1 --properties文件名为:dbconfig.properties
    2 
    3 DBSRIVER=com.mysql.jdbc.Driver
    4 DBURL=jdbc:mysql://127.0.0.1:3307/test?useunicode=true&characterEncoding=utf8
    5 DBUSER=root
    6 DBPWD=                    //密码为空

    2、用构造函数直接加载配置信息

     1 public BaseDao() {
     2         try{
     3             properties =new Properties();
     4             properties.load(this.getClass().getClassLoader().getResourceAsStream("com/uplooking/dbconfig.properties"));
     5             DBRIVER=properties.getProperty("DBRIVER");
     6             DBURL=properties.getProperty("DBURL");
     7             DBUSER=properties.getProperty("DBUSER");
     8             DBPWD=properties.getProperty("DBPWD");
     9 
    10 
    11         }catch (IOException e){
    12             e.printStackTrace();
    13         }
    14     }
    
    

    3、将以下信息抽象到BaseDao中成为可以直接调用的getCon()方法

    1 //1、加载驱动
    2 Class.forName("com.mysql.jdbc.Driver");
    3 //2、创建连接
    4  String sqlUrl = "jdbc:mysql://127.0.0.1:3307/test?useunicode=true&characterEncoding=utf8";
    5 //Driver表示Java驱动的街口
    6  con = DriverManager.getConnection(sqlUrl,"root","");

    获取连接的getcon()方法

     1     /**
     2      * @Method: getCon() 获取连接,当没有连接时或者连接已经关闭,调用方法重新获取连接
     3      * @return: 返回一个连接
     4      */
     5     public Connection getCon(){
     6         try{
     7             Class.forName(DBRIVER);
     8             if(con==null){
     9                 con=DriverManager.getConnection(DBURL,DBUSER,DBPWD);
    10             }else{
    11                 if(con.isClosed()){
    12                     con=DriverManager.getConnection(DBURL,DBUSER,DBPWD);
    13                 }
    14             }
    15         }catch(ClassNotFoundException e){
    16             e.printStackTrace();
    17         }catch(SQLException e){
    18             e.printStackTrace();
    19         }
    20         return con;
    21     }

     4、关闭连接

    (1)将关闭连接抽象到BaseDao中

    1 con.close();
    2 preparedstatement.close();

    (2)closeCon()

     1 protected void closeCon(){
     2         try {
     3             if(preparedStatement!=null&&!preparedStatement.isClosed()){
     4                 preparedStatement.close();
     5             }
     6 
     7             if(con!=null&&!con.isClosed()){
     8                 con.close();
     9             }
    10 
    11         } catch (SQLException e) {
    12                 e.printStackTrace();
    13 
    14         }
    15 
    16     }

    5、通过id对数据进行删除

    写入UserDaoB包中

     1 //按照id删除
     2     public int deleteById(int id){
     3         int result=0;
     4         try{
     5             //1、建立连接
     6             con=super.getCon();
     7             //sql语句
     8             String sql="delete from user where id=?";
     9             //2、用预编译执行sql语句
    10             statement=con.prepareStatement(sql);
    11             //3、填写占位符
    12             statement.setInt(1,id);
    13             //executeUpdate被用来执行delete,update和insert等操作
    14             result=statement.executeUpdate();
    15             super.closeCon();
    16 
    17         }catch (SQLException e){
    18             e.printStackTrace();
    19         }
    20         return result;
    21     }

    调用:

     1 package com.uplooking.action;
     2 
     3 import com.uplooking.dao.UserDao;
     4 
     5 public class JDBCTest {
     6     public static void main(String[] args) {
     7         UserDao userDao=new UserDao();
     8         int result=userDao.deleteById(4);
     9         System.out.println(result>0?"删除成功":"删除失败");
    10     }
    11 }

    6、使用公共方法对MySQL中的数据使用executeUpadte()进行delete、update和insert等等DDL操作。

    a、(1)在BaseDao中建立merger()公共方法按照id删除。

     1  /**           参照按照id删除核心代码
     2      *             //1、建立连接
     3      *             con=super.getCon();
     4      *             //sql语句
     5      *             String sql="delete from user where id=?";
     6      *             //2、用预编译执行sql语句
     7      *             statement=con.prepareStatement(sql);
     8      *             //3、填写占位符
     9      *             statement.setInt(1,id);
    10      *             //executeUpdate被用来执行delete,update和insert等操作
    11      *             result=statement.executeUpdate();
    12      */
    13 
    14     /**
    15      * @method:该方法是一个公共的方法,可以进行插入、删除和更新等操作
    16      * @return:返回操作结果
    17      * @parament:参数是需要执行的sql语句,和不可预估的操作类型和参数
    18      */
    19     protected int merger(String sql,Object...objects){
    20         int result=0;
    21         try{
    22             //1、连接
    23             con=this.getCon();
    24             //2、执行预编译sql语句
    25             preparedStatement=con.prepareStatement(sql);
    26             //3、填充占位符
    27             for (int i = 0; i <objects.length ; i++) {
    28                 preparedStatement.setObject(i+1,objects[i]);
    29             }
    30             //差点忘记,要执行DDL语句
    31             result=preparedStatement.executeUpdate();
    32 
    33         }catch (SQLException e){
    34             e.printStackTrace();
    35         }finally {
    36             this.closeCon();
    37         }
    38         return result;
    39     }

    (2)在UserDao中重写按照id删除数据库中的数据。

    1 public int deleteById(int id){
    2         String sql="delete from user where id=?";
    3         return super.merger(sql,id);
    4     }

    (3)调用方式与上述调用不变,删除成功。

    b、插入操作

    1 public int insert(User user){
    2         String sql="insert into user(id,name,pwd) values(?,?,?)";
    3                 return super.merger(sql,user.getId(),user.getName(),user.getPwd());
    4     }

    (2)调用

    1  //插入操作
    2         User user=new User();
    3         user.setName("huhu");
    4         user.setPwd("123");
    5         user.setId(4);
    6         System.out.println(userDao.insert(user)>0?"插入成功":"插入失败");

    c、

    (1)更新操作

    1 public int update(User user){
    2         String sql="update user set name=?,pwd=? where id=?";
    3         return super.merger(sql,user.getName(),user.getPwd(),user.getId());
    4     }

    (2)调用

    1 //更新操作
    2         User user=new User();
    3         user.setName("hua");
    4         user.setPwd("6");
    5         user.setId(5);
    6         System.out.println(userDao.update(user)>0?"更新成功":"更新失败");
  • 相关阅读:
    JS基础学习四:绑定事件
    常用JS事件对象
    jq 使用手册
    access数据库根据指定日期进行查询
    IP地址变动后,https://localhost:1158/em无法访问解决办法
    结构体对齐方式
    宏得到当前函数的名字
    std::list保存大量数据时,类型即是无析构函数,该list析构时会占用大量CPU
    装了vs2010 SP1后,开机速度慢
    查询SQL Server版本号
  • 原文地址:https://www.cnblogs.com/echola/p/9559769.html
Copyright © 2011-2022 走看看