这里我们来做一个登陆练习,现在没有学习web开发,所以我们把网页的登录框,用一个类来表示,运行这个类的main方法,在控制台打印告诉用户输入用户名和密码。第二个类是执行登录的功能,这个类调用前面我们封装的DBUtils下得到连接和关闭全部资源的方法,然后根据用户名和密码去执行sql语句查询,如果查询的结果能返回是一个student对象,那么就打印这个学习的名字。如果查询没有结果,我们给出提示“用户名或者密码有误”。
1.相关代码和文件
2.类Login.java的代码
package com.anthony.login;
import java.util.Scanner;
public class Login {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入用户名:");
String user = scan.nextLine();
System.out.println("请输入密码:");
String pwd = scan.nextLine();
//调用DoLogin类的findUser方法
DoLogin dl = new DoLogin();
Student s = dl.findUser(user, pwd);
//判断是否登录成功
if(s != null) {
System.out.println("欢迎回来," + s.getName());
}else {
System.out.println("用户名或密码错误!");
}
}
}
3.DoLogin.java的代码
package com.anthony.login;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.anthony.utils.DBUtils;
public class DoLogin {
public Student findUser(String username, String password) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
Student s = null;
try {
conn = DBUtils.getConnection();
stmt = conn.createStatement();
String sql = "SELECT * FROM student WHERE Name='"+ username +"' AND pwd='"+ password +"'";
rs = stmt.executeQuery(sql);
if(rs.next()) {
s = new Student();
s.setName(rs.getString("Name"));
s.setAge(rs.getInt("Age"));
s.setGender(rs.getString("Gender"));
s.setId(rs.getInt("ID"));
s.setPassword(rs.getString("pwd"));
}
} catch (Exception e) {
e.printStackTrace();
}
return s;
}
}
4.DBUtils.java代码
package com.anthony.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;
public class DBUtils {
private static String classDriver;
private static String url;
private static String user;
private static String password;
static {
// 用于加载properties文件
ResourceBundle rb = ResourceBundle.getBundle("dbinfo"); //注意这里不需要文件扩展名.properties
classDriver = rb.getString("classDriver");
url = rb.getString("url");
user = rb.getString("user");
password = rb.getString("password");
try {
Class.forName(classDriver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//得到连接的方法
public static Connection getConnection() throws Exception{
return DriverManager.getConnection(url, user, password);
}
//关闭资源方法
public static void close(Connection conn, Statement stmt, ResultSet rs) {
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null; //赶紧垃圾回收
}
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;
}
}
}
5.Student.java代码
package com.anthony.login;
public class Student {
private int Id;
private String Name;
private String Gender;
private int Age;
private String password;
public Student() {}
public int getId() {
return Id;
}
public void setId(int id) {
Id = id;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getGender() {
return Gender;
}
public void setGender(String gender) {
Gender = gender;
}
public int getAge() {
return Age;
}
public void setAge(int age) {
Age = age;
}
@Override
public String toString() {
return "Student [Id=" + Id + ", Name=" + Name + ", Gender=" + Gender + ", Age=" + Age + ", password=" + password
+ "]";
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
测试结果,下来一个正确用户名和密码登录
请输入用户名:
Anthony
请输入密码:
123456
欢迎回来,Anthony
再来一个错误密码登录
请输入用户名:
Anthony
请输入密码:
123
用户名或密码错误!
这个例子,作为一个测试工程师,可能更加需要去知道,大概登录的设计思路或者原理。有时候面试官为了考察你的测试思路清晰和考虑问题严谨。他可能会拿这个登录的例子去让你去写测试用例。如果你知道这段代码,然后结合你测试基本功,你先去思考一下,然后去回答,效果可能更好。