编写JDBC工具类、JDBC实现登录案例

​ 需求: 创建一张员工表,包含id,name,age,address字段.定义添加员工,修改员工,删除员工方法操作数据库。

​ 通过上面案例需求我们会发现每次去执行SQL语句都需要注册驱动,获取连接,得到Statement,以及释放资源。发现很多重复的劳动,我们可以将重复的代码定义到某个类的方法中。直接调用方法,可以简化代码。
​ 那么我们接下来定义一个JDBCUtils类。把注册驱动,获取连接,得到Statement,以及释放资源的代码放到这个类的方法中。以后直接调用方法即可。

编写JDBC工具类步骤
  1. 将固定字符串定义为常量
  2. 在静态代码块中注册驱动(只注册一次)
  3. 提供一个获取连接的方法static Connection getConneciton();
  4. 定义关闭资源的方法close(Connection conn, Statement stmt, ResultSet rs)
  5. 重载关闭方法close(Connection conn, Statement stmt)
案例代码

工具类JDBCUtils.java

public class JDBCUtils {
	// 1.将固定字符串定义为常量
	private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
	private static final String URL = "jdbc:mysql:///day24";
	private static final String USER = "root";
	private static final String PASSWORD = "root";
	
	// 2.在静态代码块中注册驱动(只注册一次)
	// 当这个类加载到内存的时候就走这个静态代码块,再去触发Driver类中的静态代码块,主动注册
	static {
		try {
			Class.forName(DRIVER_CLASS);
		} catch (ClassNotFoundException e) {}
	}
	
	// 3.提供一个获取连接的方法static Connection getConneciton();
	// 我们面向JDBC编程
	public static Connection getConnection() throws SQLException {
		InputStream is = JDBCUtils.class.getResourceAsStream("/jdbc.properties");
		Properties pp = new Properties();
		pp.load(is);

		Connection conn = DriverManager.getConnection(URL, pp);
		return conn;
	}
	
	// 5.重载关闭方法close(Connection conn, Statement stmt)
	public static void close(Connection conn, Statement stmt) {
		close(conn, stmt, null);
	}
	
	// 4.定义关闭资源的方法close(Connection conn, Statement stmt, ResultSet rs)
	public static void close(Connection conn, Statement stmt, ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {}
		}
		
		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {}
		}
		
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {}
		}
	}
}

调用工具类Demo06.java

public class Demo06 {
	public static void main(String[] args) throws Exception {
		createTable();
//		addEmployee();
//		updateEmployee();
//		deleteEmployee();
	}
	
	// 删除员工
	public static void deleteEmployee() throws Exception {
		Connection conn = JDBCUtils.getConnection();
		Statement stmt = conn.createStatement();
		
		// 删除id为3的员工
		String sql = "DELETE FROM employee WHERE id=3;";
		
		int i = stmt.executeUpdate(sql);
		System.out.println("影响的行数: " + i);
		
//		stmt.close();
//		conn.close();
//		JDBCUtils.close(conn, stmt, null);
		JDBCUtils.close(conn, stmt);
	}
	
	// 修改员工
	public static void updateEmployee() throws Exception {
		Connection conn = JDBCUtils.getConnection();
		Statement stmt = conn.createStatement();
		
		// 将id为3的员工姓名改成田七,地址改成天津
		String sql = "UPDATE employee SET address='天津', name='田七' WHERE id=3;";
		
		int i = stmt.executeUpdate(sql);
		System.out.println("影响的行数: " + i);
		
//		stmt.close();
//		conn.close();
//		JDBCUtils.close(conn, stmt, null);
		JDBCUtils.close(conn, stmt);
	}
	
	// 定义添加员工
	public static void addEmployee() throws Exception {
		Connection conn = JDBCUtils.getConnection();
		Statement stmt = conn.createStatement();
		
		// 添加4个员工
		String sql = "INSERT INTO employee VALUES (NULL, '张三4', 20, '北京'),"
				+ " (NULL, '李四4', 21, '南京'),"
				+ " (NULL, '王五4', 18, '东京'),"
				+ " (NULL, '赵六4', 17, '西安');";
		
		int i = stmt.executeUpdate(sql);
		System.out.println("影响的行数: " + i);
		
//		stmt.close();
//		conn.close();
//		JDBCUtils.close(conn, stmt, null);
		JDBCUtils.close(conn, stmt);
	}

	// 创建表
	public static void createTable() throws Exception {
		Connection conn = JDBCUtils.getConnection();
		Statement stmt = conn.createStatement();
		
		String sql = "CREATE TABLE IF NOT EXISTS employee ("
				+ " id INT PRIMARY KEY AUTO_INCREMENT,"
				+ " name VARCHAR(20) UNIQUE NOT NULL,"
				+ " age INT,"
				+ " address VARCHAR(50)"
				+ ");";
		
		int i = stmt.executeUpdate(sql);
		System.out.println("ok");
		
//		stmt.close();
//		conn.close();
//		JDBCUtils.close(conn, stmt, null);
		JDBCUtils.close(conn, stmt);
	}
}

效果如下:

在这里插入图片描述

JDBC实现登录案例

目标

模拟用户输入账号和密码登录网站

  1. 输入正确的账号,密码,显示登录成功
    在这里插入图片描述
  2. 输入错误的账号,密码,显示登录失败
    在这里插入图片描述
案例分析
  1. 使用数据库保存用户的账号和密码
  2. 让用户输入账号和密码
  3. 使用SQL根据用户的账号和密码去数据库查询数据
  4. 如果查询到数据,说明登录成功
  5. 如果查询不到数据,说明登录失败
实现步骤
  1. 创建一个用户表保存用户的账号和密码,并添加一些数据,SQL语句如下:

    CREATE TABLE USER (
      id INT AUTO_INCREMENT PRIMARY KEY,
      NAME VARCHAR(50),
      PASSWORD VARCHAR(50)
    );
    INSERT INTO USER (NAME, PASSWORD) VALUES('admin', '123'), ('test', '123'), ('gm', '123');
    
  2. 编写代码让用户输入账号和密码

    public class Demo07 {
       public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       System.out.println("请输入账号: ");
       String name = sc.nextLine();
       System.out.println("请输入密码: ");
       String password = sc.nextLine();
    }
    
  3. 使用SQL根据用户的账号和密码去数据库查询数据

    public class Demo07 {
       public static void main(String[] args) throws Exception {
       // 让用户输入账号和密码
       Scanner sc = new Scanner(System.in);
       System.out.println("请输入账号: ");
       String name = sc.nextLine();
       System.out.println("请输入密码: ");
       String password = sc.nextLine();
       
       // 使用SQL根据用户的账号和密码去数据库查询数据
       Connection conn = JDBCUtils.getConnection();
       Statement stmt = conn.createStatement();
       String sql = "SELECT * FROM user WHERE name='" + name + "' AND password='" + password + "';";
       }
    }
    
  4. 如果查询到数据,说明登录成功,如果查询不到数据,说明登录失败

    public class Demo07 {
    public static void main(String[] args) throws Exception {
       // 让用户输入账号和密码
       Scanner sc = new Scanner(System.in);
       System.out.println("请输入账号: ");
       String name = sc.nextLine();
       System.out.println("请输入密码: ");
       String password = sc.nextLine();
       
       // 使用SQL根据用户的账号和密码去数据库查询数据
       Connection conn = JDBCUtils.getConnection();
       Statement stmt = conn.createStatement();
       String sql = "SELECT * FROM user WHERE name='" + name + "' AND password='" + password + "';";
       
       // 如果查询到数据,说明登录成功,如果查询不到数据,说明登录失败
       ResultSet rs = stmt.executeQuery(sql);
    
       if (rs.next()) {
          //能进来查询到了数据.
          String name2 = rs.getString("name");
          System.out.println("欢迎您," + name2);
       } else {
          //查询不到数据,说明登录失败
          System.out.println("账号或密码错误...");
       }
    
       JDBCUtils.close(conn, stmt, rs);
       }
    }
    
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值