上篇博客中,简单介绍了JDBC的基本概念及简单练习(1),下面做第二个简单练习——登录案例。
1. 案例要求及分析
数据库中存放用户的用户名和密码,只有输入正确的用户名和密码才能登录成功,否则提示失败。
-
思路:写一个登录方法,输入为用户名和密码,输出为true或者false,分别代表登录成功或者失败
-
输入判断的注意事项:
- 当用户名和密码有一处为空时提醒失败;
- 当用户名和密码不匹配时,即约束查询语句执行失败时提醒登录失败。约束查询语句执行失败的表现为stmt.executeQuery(sql).next()的值为false。
示例代码
首先创建了一个新的数据库db4,在里面创建了users表格用来存储用户名和密码,命令为:
CREATE DATABASE db4;
USE db4;
CREATE TABLE users(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20),
PASSWORD VARCHAR(20)
);
INSERT INTO users VALUES(NULL,'zhangsan','123');
INSERT INTO users VALUES(NULL,'lisi','234');
由于使用的数据库发生改变,所以需要修改配置文件,修改为:
url=jdbc:mysql:///db4
user=root
password=root
driver=com.mysql.jdbc.Driver
可以发现要修改的内容非常少,这也是为什么要采用配置文件的原因。下面是主要代码。JDBCUtils见上篇博客。
import Utils.JDBCUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class LoginDemo {
public static void main(String[] args) {
//1.键盘录入用户名和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
//2.调用方法
boolean flag = new LoginDemo().login(username, password);
if(flag){
System.out.println("登录成功");
}else {
System.out.println("用户名或者密码错误!");
}
}
/**
* 登录方法
* @param username
* @param password
* @return
*/
public boolean login(String username ,String password){
Connection conn = null;
Statement stmt = null;
ResultSet res = null;
if (username ==null ||password==null){
return false;
}
//连接数据库,判断是否登录成功
try {
//1.获取连接
conn = JDBCUtils.getConnection();
//2.定义sql
String sql = "select * from users where username='"
+username+"' and password='"+password+"'";
//3.获取执行sql的对象
stmt = conn.createStatement();
//4.执行查询
res = stmt.executeQuery(sql);
//5.判断
return res.next();
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
JDBCUtils.close(conn,stmt,res);
}
return false;
}
}
这里我开始一直不明白sql语句为什么要写成这样
String sql = "select * from users where username='"
+username+"' and password='"+password+"'";
后来想了想,因为在cmd或者SQLyog中的执行语句应该是
select * from users where username=‘username’ and password=‘password’。而在java语句中这整句都是一个String类型,所以正确是sql应该为"select * from users where username=‘username’ and password=‘password’",所以应该写成上面那样。