利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在web表单中输入(恶意的)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句
PreparedStatement接口是Statement的子接口,可以使用该接口来替换Statement接口
package day02.pojo;
/**
* @desc:User类
*/
public class User {
private int id;
private String userName;
private String userPass;
private int role;
public User(int id, String userName, String userPass, int role) {
this.id = id;
this.userName = userName;
this.userPass = userPass;
this.role = role;
}
public User() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
}
public int getRole() {
return role;
}
public void setRole(int role) {
this.role = role;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", userPass='" + userPass + '\'' +
", role=" + role +
'}';
}
}
package day02.IncreaseDeleteChangeQuery;
import day02.pojo.User;
import java.sql.*;
/**
* @desc:JDBC类、增删改查类
*/
public class UserDao {
Connection connection =null;
Statement statement =null;
PreparedStatement ps = null;
ResultSet resultSet =null;
/**
* 用户登录
* @param userName 用户名
* @param userPass 用户密码
* @return User
*/
public User toLogin(String userName,String userPass){
//1.获取连接对象
getConnection();
//2.编写SQL语句
String sql = "select ID,USERNAME,ROLE from user where userName = ? and userPass = ?";
System.out.println("要执行的SQL语句是:" + sql);
//3.创建statement对象
User user = null;
try {
// 创建PreparedStatement对象 发送SQL语句并预执行
ps = connection.prepareStatement(sql);
//3.1处理参数
ps.setString(1,userName);
ps.setString(2,userPass);
//4.执行并解析结果
resultSet = ps.executeQuery();
while (resultSet.next()){
user = new User();
user.setId(resultSet.getInt(1));
user.setUserName(resultSet.getString(2));
user.setRole(resultSet.getInt(3));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
closeResource();
}
return user;
}
/**
* 增删改查——查
*/
public User login(String userName,String userPass){
//1.获取连接对象
getConnection();
//2.编写SQL语句
String sql = "select ID,USERNAME,ROLE from user where userName = '"+userName+"' and userPass = '"+userPass+"'";
System.out.println("要执行的SQL语句是:" + sql);
//3.创建statement对象
User user = null;
try {
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);
//4.解析结果
while (resultSet.next()){
user = new User();
user.setId(resultSet.getInt(1));
user.setUserName(resultSet.getString(2));
user.setRole(resultSet.getInt(3));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
closeResource();
}
return user;
}
public User login2(String userName,String userPass){
//1.获取连接对象
getConnection();
//2.编写SQL语句
String sql = "select ID,USERNAME,USERPASS,ROLE from user where userName = '"+userName+"'";
System.out.println("要执行的SQL语句是:" + sql);
//3.创建statement对象
User user = null;
try {
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);
//4.解析结果
while (resultSet.next()){
user = new User();
user.setId(resultSet.getInt(1));
user.setUserName(resultSet.getString(2));
user.setUserPass(resultSet.getString(3));
user.setRole(resultSet.getInt(4));
}
if(userPass.equals(user.getUserPass())){
return user;
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
closeResource();
}
return null;
}
/**
* 增删改查——增
*/
public int saveUser(User user) {
int line = 0;
//1、获取连接对象
getConnection();
//2、编写SQL语句
String sql = "insert into user values(default,?,?,?)";
try {
ps = connection.prepareStatement(sql);
ps.setString(1, user.getUserName());
ps.setString(2,user.getUserPass());
ps.setInt(3,user.getRole());
//3、执行 增删改的执行方法是excuteUpdate()
//返回一个整数,表示受影响的行数
line = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeResource();
}
return line;
}
/**
* 增删改查——改
*/
public int updateUser(User user) {
int line = 0;
//1、获取连接对象
getConnection();
//2、编写SQL语句
String sql = "update user set USERNAME=?,USERPASS=?,ROLE=? where ID=?";
try {
ps = connection.prepareStatement(sql);
ps.setString(1, user.getUserName());
ps.setString(2,user.getUserPass());
ps.setInt(3,user.getRole());
ps.setInt(4,user.getId());
//3、执行 增删改的执行方法是excuteUpdate()
//返回一个整数,表示受影响的行数
line = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeResource();
}
return line;
}
/**
* 增删改查——删
*/
public int deleteUser(int id) {
int line = 0;
//1、获取连接对象
getConnection();
//2、编写SQL语句
String sql = "delete from user where id = ?";
try {
ps = connection.prepareStatement(sql);
ps.setInt(1,id);
//3、执行 增删改的执行方法是excuteUpdate()
//返回一个整数,表示受影响的行数
line = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeResource();
}
return line;
}
//↓↓↓以下两部分代码是固定的,不需要改动,所以封装起来
/**
* 加载驱动和建立连接
*/
public Connection getConnection(){
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.建立连接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool?useSSL=false","root","zkz2002513>");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
/**
* 关闭资源
*/
public void closeResource(){
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
package day02.IncreaseDeleteChangeQuery;
import day02.pojo.User;
/**
* @desc:增删改查操作——增加main方法
*/
public class IncreaseMain {
public static void main(String[] args) {
UserDao userDao = new UserDao();
User user = new User();
user.setUserName("诸葛亮");
user.setUserPass("9087666");
user.setRole(3);
int line = userDao.saveUser(user);
System.out.println(line > 0 ? "添加成功": "添加失败");
}
}
package day02.IncreaseDeleteChangeQuery;
/**
* @desc:增删改查操作——删除main方法
*/
public class DeleteMain {
public static void main(String[] args) {
UserDao userDao = new UserDao();
int line = userDao.deleteUser(11);
System.out.println(line > 0 ? "删除成功": "删除失败");
}
}
package day02.IncreaseDeleteChangeQuery;
import day02.pojo.User;
import java.util.Scanner;
/**
* @desc:增删改查操作——改main方法
*/
public class ChangeMain {
public static void main(String[] args) {
/* Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的用户id:");
int id = sc.nextInt();
System.out.println("请输入要修改的用户名:");
String username = sc.next();
System.out.println("请输入新的的密码:");
String password = sc.next();
System.out.println("请输入角色类型:");
int role = sc.nextInt();
User user = new User(id, username, password, role);
UserDao userDao = new UserDao();*/
UserDao userDao = new UserDao();
User user = new User(8,"赵云","24678",2);
int line = userDao.updateUser(user);
System.out.println(line > 0 ? "修改成功" : "修改失败");
}
}
package day02.IncreaseDeleteChangeQuery;
import day02.pojo.User;
import java.util.Scanner;
/**
* @desc:增删改查操作——查询main方法
*/
public class QueryMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
UserDao userDao = new UserDao();
System.out.println("****************************************");
System.out.println("\t\t\t\t\t用户管理系统");
System.out.println("****************************************");
System.out.print("请输入用户名:");
String userName = sc.next();
System.out.print("请输入密码:");
String userPass = sc.next();
User user = userDao.toLogin(userName,userPass);
if (user == null) {
System.out.println("登录失败,用户名或密码错误!");
} else {
System.out.println("登录成功,欢迎【" + user.getUserName() + "】!");
}
}
}