god_father9 2020-04-15 17:26 采纳率: 33.3%
浏览 272

JAVAEE:JSP传值给数据库,测试信息进行登录

PersonDAO.java

package dao;

import java.sql.*;


import domain.Person;
import util.JDBCUtils;

/**
 * 数据层一个程序
 * DAO层返回对象,在业务层通过操作这些对象来实现增删改查
 * */
public class PersonDAO {    

    public Person login(Person user) { //登录       
        Person existUser = null;
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;

        try {//JDBC查询
            conn = JDBCUtils.getConnection();
            String sql = "select * from person where name=? and password=?"; //数据库编译时
            stmt = conn.prepareStatement(sql);  //将sql发送给数据库进行编译

            //设置sql参数
            stmt.setString(1,user.getName());   //传入数据值,不会作为关键字 --防止注入
            stmt.setString(2,user.getPassword());            
            rs = stmt.executeQuery();           //执行sql

            //如果登陆成功,只有一条记录            
            if (rs.next()) {
                existUser=new Person();     //表示已登录用户
                existUser.setID(rs.getString("ID"));
                existUser.setName(rs.getString("name"));
                existUser.setPassword(rs.getString("password"));
                existUser.setBirthDate(rs.getDate("birthday"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(user.getName());
        System.out.println(user.getPassword());
        try {
             System.out.println(rs.getString("name"));
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("2");

        }

        return existUser;
    }
}


这个是个测试文件Test

package dao;
import util.JDBCUtils;
import java.sql.*;

import domain.Person;

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
         Person existUser = null;
            Connection conn = null;
            PreparedStatement stmt = null;
            ResultSet rs = null;

            try {//JDBC查询
                conn = JDBCUtils.getConnection();
                String sql = "select * from person where name=? and password=?"; //数据库编译时
                stmt = conn.prepareStatement(sql);  //将sql发送给数据库进行编译

                //设置sql参数
                stmt.setString(1, "Tom");   //传入数据值,不会作为关键字 --防止注入
                stmt.setString(2, "12345");            
                rs = stmt.executeQuery();           //执行sql

                //如果登陆成功,只有一条记录            
                if (rs.next()) {
                    existUser=new Person();     //表示已登录用户
                    existUser.setID(rs.getString("ID"));
                    existUser.setName(rs.getString("name"));
                    existUser.setPassword(rs.getString("password"));
                    existUser.setBirthDate(rs.getDate("birthday"));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                System.out.println(rs.getString("name"));
            } catch (Exception e) {
                // TODO: handle exception
            }
            System.out.println(existUser.getID());
            System.out.println(existUser.getName());
            System.out.println(existUser.getPassword());
            System.out.println(existUser.getBirthDate());
    }

}

图片说明
这是我做的一个测试 如果直接输入Tom和12345 数据库就会读到 包括结果集rs和新建的person类existuser都有数值
图片说明
之后我再DAO类里面做测试 user的值能传过来 但是查询过后就没有 rs没有数值 try语句会走向catch
JDBCUtils

package util;

import java.sql.*;

/*
 * Person类的JDBC 工具类,抽取公共方法
 */
public class JDBCUtils {
    //设置数据库名称和登录用户信息
    private static String DRIVERCLASS="com.mysql.cj.jdbc.Driver";
    private static String URL="jdbc:mysql://localhost:3306/factory?serverTimezone=UTC";
    private static final String USER="root";        //数据库用户
    private static final String PASSWORD="12345";   //用户root的连接数据库的密码

    private static Connection conn=null;    //与数据库的连接;

    // 装载驱动
    private static void loadDriver() {
        try {
            //1.加载MYSQL JDBC驱动程序
            Class.forName(DRIVERCLASS);
        } catch(ClassNotFoundException e) {
            e.printStackTrace();
        }        
    }

    //建立连接
    public static Connection getConnection() throws Exception {
        loadDriver();
        return (Connection)DriverManager.getConnection(URL, USER, PASSWORD);
    }

    //释放资源
    public static void release(ResultSet rs, Statement stmt, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }

        release(stmt, conn);
    }

    public static void release(Statement stmt, Connection conn) {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            stmt = null;
        }

        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
}

Person.java

package domain;

import java.util.Date;

//传输对象,保存User相关数据
public class Person {   
    private String ID;      //类属性需要与数据库中的字段一一对应
    private String name;
    private String password;
    private Date birthday; 

    public Person() {
        super();
    }

    public Person(String iD, String name, String password, Date birthDate) {
        super();
        ID = iD;
        this.name = name;
        this.password = password;
        this.birthday = birthDate;
    }   

    public String getID() {
        return ID;
    }

    public void setID(String iD) {
        ID = iD;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthDate() {
        return birthday;
    }

    public void setBirthDate(Date birthDate) {
        this.birthday = birthDate;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

personservice.java

package service;

import domain.Person;
import dao.PersonDAO;

/**
 * 业务层一个程序
 * */
public class PersonService {
    /**
     * 根据用户名 和 密码查询其它信息 
     * @param user
     * @return 如果返回null证明 用户名或者密码错误
     */
    public Person login(Person user) {       
        PersonDAO userDAO = new PersonDAO(); //查询, 将 user对象传递 DAO
        return userDAO.login(user);
    }
}

login.jsp
loginValidat.jsp

我最后解决了 原来是下面lib没有jar包 jsp访问不了mysql
图片说明

  • 写回答

1条回答 默认 最新

  • Json-Huang 2020-04-15 22:02
    关注

    user确认有值传入?name和password是否Tom和12345一致?或者是否有类似空格

                stmt.setString(1,user.getName());   //传入数据值,不会作为关键字 --防止注入
                stmt.setString(2,user.getPassword());   
                            PersonDAO下上面改成实际的值试过吗
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么