代码:
JDBC工具类链接:☞点此查看
public class Login {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = in.nextLine();
System.out.println("请输入密码:");
String password = in.nextLine();
boolean flag = new Login().login2(username, password);
if (flag) {
//登陆成功
System.out.println("登陆成功!");
} else {
//登陆失败
System.out.println("请检查用户名或密码!");
}
}
/**
* 登陆的方法
* 将用户名和密码作为参数传入本方法,再利用jdbc连接数据库查询是否有对应的数据
* 注意本方法使用了sql拼接,可能会产生sql注入问题,login2使用PreparedStatement解决
*
* @param username 用户名
* @param password 密码
* @return true或false
*/
public boolean login1(String username, String password) {
//判断参数是否为null
if (username == null || password == null) {
//为空返回false
return false;
}
//使用了这种拼接的方式的sql语句可能会出现sql注入问题
String sql = "select * from user where username='" + username + "' and password='" + password + "'";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//创建连接
conn = JDBCUtils.getConnection();
//获取执行sql的对象
stmt = conn.createStatement();
//执行sql语句
rs = stmt.executeQuery(sql);
//判断结果,如果有下一行就返回true,没有返回false
return rs.next();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//释放资源
JDBCUtils.close(rs, stmt, conn);
}
return false;
}
/**
* 登陆的方法
* 将用户名和密码作为参数传入本方法,再利用jdbc连接数据库查询是否有对应的数据
* 使用PreparedStatement预编译解决sql注入问题,且使用PreparedStatement的效率也会提升
*
* @param username 用户名
* @param password 密码
* @return true或false
*/
public boolean login2(String username, String password) {
//判断参数是否为null
if (username == null || password == null) {
//为空返回false
return false;
}
//把需要拼接的字符串变量用占位符'?'替代
String sql = "select * from user where username= ? and password= ?";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//创建连接
conn = JDBCUtils.getConnection();
//获取执行sql的对象 PreparedStatement
pstmt = conn.prepareStatement(sql);
//给占位符'?'赋值 按照占位符的顺序赋值,参数1是'?'的编号从1开始,参数2是'?'的值
pstmt.setString(1, username);
pstmt.setString(2, password);
//执行sql语句,使用PreparedStatement特有的不需要传参的executeQuery的方法
rs = pstmt.executeQuery();
//判断结果,如果有下一行就返回true,没有返回false
return rs.next();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//释放资源
JDBCUtils.close(rs, pstmt, conn);
}
return false;
}
}