实现用户密码登录(MySQL数据库+自行封装的JDBC工具类)

news/2024/5/18 22:22:11 标签: jdbc, java, 数据库, mysql

 

JDBC的核心就是

注册驱动 → 获取连接 → 获取sql执行对象 → 执行sql → 释放资源
 
 

java">-------------------------------------- jdbc.properties 配置文件 ------------------------------------------------

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/myDB?serverTimezone=GMT%2B8
username=root
password=******
initialSize=5
maxActive=10
maxWait=3000
java">--------------------------------------- JDBCUtils.java  工具类-------------------------------------------------

/**
 * JDBCUtils工具类
 *
 * 使用工具类时,先自动执行静态代码块,从配置文件读取信息,并【注册驱动】;
 * 并且封装了两个静态方法:【获取连接】【释放资源(有重载)】
 */
public class JDBCUtils {

    private static String url;
    private static String user;
    private static String password;
    private static String driver;

    /**
     * 静态代码块———读取配置文件中的值,赋给上面的成员变量
     */
    static {
        try{
            Properties pro = new Properties();

            ClassLoader classLoader = JDBCUtils.class.getClassLoader();
            URL absoluteURL = classLoader.getResource("jdbc.properties");
            String path = absoluteURL.getPath();
            pro.load(new FileReader(path));				// 这里的path必须使用上面获取的绝对路径,相对路径会找不到文件

            url = pro.getProperty("url");
            user = pro.getProperty("user");
            password = pro.getProperty("password");
            driver = pro.getProperty("driver");

            Class.forName(driver);						// 加载类(真正目的是注册驱动)

        }catch (IOException | ClassNotFoundException e){
            e.printStackTrace();
        }
    }

    /**
     * 获取连接
     * @return 连接对象
     */
    public static Connection getConnection() throws SQLException{
        return DriverManager.getConnection(url, user, password);
    }


    /**
     * 释放资源
     * @param statement
     * @param conn
     */
    public static void close(Statement statement, Connection conn){
        if(statement != null){
            try{
                statement.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
        if(conn != null){
            try{
                conn.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
    }

    /**
     * 释放资源
     * @param result
     * @param statement
     * @param conn
     */
    public static void close(ResultSet result, Statement statement, Connection conn){
        if(result != null){
            try{
                result.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
        if(statement != null){
            try{
                statement.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
        if(conn != null){
            try{
                conn.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
    }
}
java">--------------------------------------------- Login.java  -------------------------------------------------


public class Login {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入账户 : ");
        String account = scanner.nextLine();
        System.out.print("请输入密码 : ");
        String password = scanner.nextLine();

        if(new Login().login(account, password)){
            System.out.println("登录成功!");
        }else{
            System.out.println("登录失败!");
        }

    }

    public boolean login(String account, String password) {
        Connection conn = null;
        PreparedStatement preparedStatement = null;
        ResultSet result = null;

        try {
            conn = JDBCUtils.getConnection();
            String sql = "select * from accountTable where account = ? and password = ?";
            preparedStatement = conn.prepareStatement(sql);
            preparedStatement.setString(1, account);
            preparedStatement.setString(2, password);
            result = preparedStatement.executeQuery();
            return result.next();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(result, preparedStatement, conn);
        }
        return false;
    }
}
java">--------------------------------------------- 运行结果  -------------------------------------------------

>>> 请输入账户: Loli
>>> 请输入密码: 123456
>>> ...
>>> 登录成功!

 

 

 

 

 

java">
-------------------------------- JDBCUtils.java  工具类(内部为连接池版本) ------------------------------------

/**
 * JDBCUtils工具类
 *
 * 内部通过连接池实现。
 * 使用工具类时,先自动执行静态代码块,从配置文件读取信息,并【注册驱动】;
 * 并且封装了两个静态方法:【获取连接】【释放资源(有重载)】
 */
public class JDBCUtils {

    private static DataSource pool = null;			// 只需要一个连接池成员变量;连接池自动帮我们完成注册驱动


    /**
     * 静态代码块 ———— 创建连接池
     */
    static {
        try{
            Properties pro = new Properties();
            InputStream stream = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(stream);
            pool = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e){
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


	/**
     * 获取连接池
     * (一般不用,直接用下面的getConnection就可以的)
     * @return
     */
    public static DataSource getDataSourse(){
        return pool;
    }


    /**
     * 获取连接
     * @return 返回连接对象
     */
    public static Connection getConnection() throws SQLException {
        return pool.getConnection();
    }


    /**
     * 释放资源
     * @param statement
     * @param conn
     */
    public static void close(Statement statement, Connection conn){
        if(statement != null){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }


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


-------------------------------- 只是内部实现不同。从外部看来,使用完全一致。 -----------------------------------

 

 

 

 

 


http://www.niftyadmin.cn/n/1330479.html

相关文章

hiho#1107 : Shortest Proper Prefix (统计非指定前缀在字符串集中出现次数)

1107 : Shortest Proper Prefix 时间限制:10000ms 单点时限:1000ms 内存限制:512MB 描述 Query auto-completion(QAC) is widely used in many search applications. The basic idea is that when you type some string s in the search box several high-frequency que…

【图解算法】染上龙血的勇者——彻底理清【递归】【记忆化搜索】【动态规划】的关系

很久以前,有一个王国。 突然有一天,国王的女儿失踪了。 一名勇者去寻找她。他年轻、强大、无畏,只是有着致命的软肋。 他提剑找寻到了森林深处的山顶,山洞里是公主和一头恶龙。 为了打败恶龙,勇者饮下了龙血。…

【LeetCode】Sama的个人记录_27

【Q95】(md) 不同的二叉搜索树Ⅱ 给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。 示例: 输入:3 输出: [ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3] ] >>> 这道题…

区间异或最大

首先我们看这样一个问题:给定一个包含N个整数的集合S{A1, A2, A3, … AN}。然后有M个询问,每次询问给定一个整数X,让你找一个Ai使得Ai xor X的值最大。 这道题也是可以用Trie解决的。首先我们知道一个整数可以用二进制表示成一个01串。比如3…

【Tomcat】配置Web项目+理解Tomcat文件夹

web相关概念回顾 ▶ 软件架构 C/S:客户端/服务器端B/S:浏览器/服务器端 ▶ 资源分类 ▶ 网络通信三要素:IP 端口 传输协议 web服务器软件 服务器:通俗的说,就是安装了服务器软件的计算机 服务器软件&#xff…

hdu 4825 (Xor Sum) 字典树异或问题

题目链接 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total Submission(s): 5132 Accepted Submission(s): 2222 Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合…

【XML】XML知识点汇总——标签化的键值对信息

基础知识 概念: Extensible Markup Language,可扩展标记语言 说明:可扩展的意思是,标签都是自定义的 功能:存储数据(配置文件,在网络中传输) xml与html的区别: html…

hiho1289 403 Forbidden (微软笔试,字典树解决掩码问题)

1289 : 403 Forbidden 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi runs a web server. Sometimes he has to deny access from a certain set of malicious IP addresses while his friends are still allow to access his server. To do this he w…