JDBC(二) 通过JDBC、DBUtil实现登陆的练习

简介: 基于java+JDBC+DBUtil实现登陆

项目截图1
在这里插入图片描述

项目建立步骤:
1、在src目录下建立dp.properties文件,存放配置信息

jdbc.driver=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.user=scott
jdbc.password=tiger

2、建立DBUtil工具类、对JDBC的相关功能进行封装

package cn.bjsxt.util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;


/**
 * 软编码,将配置信息生成一个配置文件,然后让程序在执行过程中,读取配置信息
 * 好处:可以动态调整配置信息,有助于后续代码的维护
 *
 *Java中,提供了一个类,叫Properties类,用于读取properties文件
 */
public class DBUtil {
    private static  String url;
    private static  String user;
    private static  String password;
    private static  String driver;
    
    static {
        try {
            //创建Properties对象
            Properties prop=new Properties();
            //加载配置文件
            prop.load(DBUtil.class.getClassLoader().getResourceAsStream("db.properties"));
            //读取信息并进行初始化,trim()的作用是取出字符串两端多余的字符或者是其他预定义字符
            driver=prop.getProperty("jdbc.driver").trim();
            url=prop.getProperty("jdbc.url").trim();
            user=prop.getProperty("jdbc.user").trim();
            password=prop.getProperty("jdbc.password").trim();
            
            
            //注册驱动
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 获取数据库连接
     * @return
     */
    public static Connection getConn() {
        Connection conn=null;
        try {
            conn=DriverManager.getConnection(url,user,password);
        } catch (SQLException e) {
            System.out.println(
                    "DBUtil.getConn(连接创建失败, 请检查[url]:" + url + ", [user]:" + user + ", [password]:" + password + ")");
        }
        return conn;
    }
    
    /**
     * 获取sql发送器
     * @param conn
     * @return
     */
    public static Statement     getStmt(Connection conn) {
        Statement stmt=null;
        try {
            stmt=conn.createStatement();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return stmt;
    }
    
    /**
     * 获取预处理发送器
     * @param conn
     * @param sql
     * @return
     */
    public static PreparedStatement getPstmt(Connection conn,String sql) {
        PreparedStatement pstmt=null;
        try {
            pstmt=conn.prepareStatement(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return pstmt;
    }
    
    /**
     * 动态绑定参数
     * @param pstmt
     * @param params
     */
    public static void bindParam(PreparedStatement pstmt,Object...params) {
        //...可变参数,可以被认为是一个数组
        try {
            for (int i = 1; i <= params.length; i++) {
                pstmt.setObject(i, params[i-1]);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 
     * @param rs
     * @param stmt
     * @param conn
     */
    public static void close(ResultSet rs,Statement stmt,Connection conn) {
        if (rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (stmt!=null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }if (conn!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

3、编写主类

package cn.bjsxt.login;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

import cn.bjsxt.util.DBUtil;
/**
 * 将预处理发送器以及动态绑定也通过DBUtil调用
 * @author chy
 */
public class Login3 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入用户名");
        String username=sc.nextLine();
        System.out.println("请输入密码");
        String password=sc.nextLine();
        
        //定义SQL语句->不做拼接操作,改为使用占位符
        String sql = "select count(*) from t_user where username=? and password=?";
        System.out.println(sql);
        
        //获取数据库连接
        Connection conn=DBUtil.getConn();
        //获取发送器->预处理发送器
        PreparedStatement pstmt=DBUtil.getPstmt(conn, sql);
        //声明结果集
        ResultSet rs=null;
        //通过DBUtil绑定参数
        DBUtil.bindParam(pstmt, username,password);//通过可变参数的设定可以同时传多个值
        try {
            
            //发送并执行
            rs=pstmt.executeQuery();
            //处理结果集
            if (rs.next()) {
                if (rs.getInt(1)==0) {
                    System.out.println("登陆失败,用户名或密码错误!");
                }else {
                    System.out.println("欢迎"+username+"登陆成功!");
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(rs, pstmt, conn);//不能在try...catch里面定义对象,不然在finally中无法解析该对象
        }
        sc.close();
        
    }
}

  1. 展开的类为本项目所使用的类。没有展开的都是测试类
相关文章
|
7月前
|
安全 Java
javaweb实训第四天下午——员工管理系统-JSP&Servlet&JDBC综合练习-CRUD
1.课程介绍 Servlet细节; (掌握) 员工信息相关的CRUD; (掌握) 部门信息相关的CRUD; (掌握) 2.Servlet细节 2.1.多种匹配方式
106 0
|
Java 数据库连接 数据库
JDBC知识【JDBC练习】第五章
JDBC知识【JDBC练习】第五章
|
存储 SQL Java
|
SQL Java 数据库连接
JDBC系列--template实例练习
JDBC系列--template实例练习
88 0
|
SQL Java 数据库连接
JDBC系列--登录练习和事务控制
JDBC系列--登录练习和事务控制
103 0
|
SQL Oracle 关系型数据库
JDBC(四) 连接参数的配置(附DBUtil工具类)
进行JDBC操作时,连接参数的配置(附DBUtil工具类)
JDBC(四)  连接参数的配置(附DBUtil工具类)
|
Java 数据库连接
JDBC练习
JDBC练习
96 0
JDBC练习
|
Java 数据库连接 数据安全/隐私保护
|
Java 关系型数据库 MySQL
Spring练习,使用Properties类型注入方式,注入MySQL数据库连接的基本信息,然后使用JDBC方式连接数据库,模拟执行业务代码后释放资源,最后在控制台输出打印结果。
Spring练习,使用Properties类型注入方式,注入MySQL数据库连接的基本信息,然后使用JDBC方式连接数据库,模拟执行业务代码后释放资源,最后在控制台输出打印结果。
212 0
Spring练习,使用Properties类型注入方式,注入MySQL数据库连接的基本信息,然后使用JDBC方式连接数据库,模拟执行业务代码后释放资源,最后在控制台输出打印结果。
|
Java 数据库连接
编写Java程序,遍历所有英雄信息(美和易思JDBC,PreparedStatement执行查询语句练习习题)
编写Java程序,遍历所有英雄信息(美和易思JDBC,PreparedStatement执行查询语句练习习题)
149 0