工具:Myeclipse(Eclipse):
知识点:如何防止SQL注入攻击和JDBC中的修改/删除操作
jar包:
commons-collections4-4.0.jar
commons-dbcp-1.4.jar
commons-pool-1.6.jar
Oracle 11g 11.2.0.1.0 JDBC_ojdbc6.jar
代码都是基于自己写的连接池技术,,已经分享过了
url:http://blog.youkuaiyun.com/coder_hello_world/article/details/78515974
修改操作:
好比现实生活中的一些修改密码操作
是让用户输入用户民和密码验证正确之后
就开始修改用户输入的修改信息
按照业务代码的思想,用户名是不能更改,一般作为表的主键唯一且不重复
删除操作:
用户输入的信息正确之后,就开始实现用户的删除操作
为何使用PreparedStatement对象防止注入工具?
1.保护用户的账号信息安全
是如何进行防止的?
PrepareStatement是采用的预编译.
在我们写好SQL语句的时候,数据库就已经产生了执行计划
PrepareStatement是直接对匿名的值进行复制,外界看不到输入什么
输入的东西都会作为字符串处理..不会进行拼接
main函数{
test1(i,j*5);//这里用户输入的时候可以进行值的修改.对数据产生危害
test2(?,?);//不知道输入什么..无法对数据进行修改...
}
public static void test1(int i ,int j){
}
public static void test2(?,?){
}
而传统的Statement并不是没有作用,如果不进行动态增删改查数据数,就可以使用Statement对象
比如查询一张表中所有的数据,,就可以使用Statement对象
package com.csdn.jdbcdemo.date2017_11_16;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Scanner;
import com.csdn.jdbcdemo.date2017_11_12.BasicDataSourceDemo;
/**
*
*实现修改...删除... --->操作
*
* @author 89155
*
*/
public class User_SELECT_UPDATE_DELETE_TRANSFER {
public static void main(String[] args) {
System.out.println("1.修改 2.删除 3.退出");
System.out.println("请输入选项");
Scanner scanner
= new Scanner(System.in);
String options
= scanner.next();
if(options.matches("[1-5]{1}".toLowerCase())){
int options2 = Integer.parseInt(options);
switch(options2){
case 1:
//修改
Updata(scanner);
break;
case 2:
//删除
delete(scanner);
break;
default :
System.out.println("结果操作.退出程序!");
System.exit(-1);
}
}else{
System.out.println("输入有误!请重新输入!");
}
}
//删除操作
private static void delete(Scanner scanner) {
System.out.println("输入你的用户名:");
String username = scanner.next();
System.out.println("输入你的密码:");
String password = scanner.next();
try{
//连接
Connection connection
= BasicDataSourceDemo.getConnection();
String selectSql = "SELECT * FROM USER_INFODEMO"
+ " WHERE"
+ " LOWER(USERNAME) = LOWER(?)"
+ " AND"
+ " LOWER(PASSWORD) = LOWER(?)";
//使用PreparedStatement对象
PreparedStatement pstate
= connection.prepareStatement(selectSql);
pstate.setString(1, username);
pstate.setString(2, password);
//查看输入的信息是否正确
if(pstate.executeQuery().next()){
//确定是否删除
System.out.println("确定删除此用户 (N/Y)");
String next = scanner.next();
if(next.equalsIgnoreCase("y")){
//删除用户操作
String deleteSql = "DELETE FROM USER_INFODEMO"
+ " WHERE "
+ "LOWER(USERNAME) = LOWER(?)";
PreparedStatement pstate2
= connection.prepareStatement(deleteSql);
pstate2.setString(1, username);
if(pstate2.executeUpdate()>0){
System.out.println("删除成功!");
}else{
System.out.println("删除失败!");
}
}else{
pstate.close();
System.out.println("取消用户的删除操作!");
System.exit(-1);
}
}else{
System.out.println("输入的用户名和密码不正确!"
+ "无法进行删除操作.");
}
pstate.close();
}catch(Exception e){
e.printStackTrace();
}finally{
BasicDataSourceDemo.closeConnection();
}
}
//修改
private static void Updata(Scanner scanner) {
System.out.println("输入你的用户名:");
String username = scanner.next();
System.out.println("输入你的密码:");
String password = scanner.next();
System.out.println("输入你要修改的密码:");
String updatePassword = scanner.next();
try{
//连接
Connection connection
= BasicDataSourceDemo.getConnection();
String selectSql = "SELECT * FROM USER_INFODEMO"
+ " WHERE"
+ " LOWER(USERNAME) = LOWER(?)"
+ " AND"
+ " LOWER(PASSWORD) = LOWER(?)";
//使用preparedStatement对象防止SQL注入式攻击
PreparedStatement pstate
= connection.prepareStatement(selectSql);
pstate.setString(1, username);
pstate.setString(2, password);
if(pstate.executeQuery().next()){
String updateSql = "UPDATE USER_INFODEMO"
+ " SET"
+ " PASSWORD = ?"
+ " WHERE"
+ " LOWER(USERNAME) = LOWER(?)";
PreparedStatement pstate2
= connection.prepareStatement(updateSql);
pstate2.setString(1, updatePassword);
pstate2.setString(2, username);
if(pstate2.executeUpdate()>0){
System.out.println("修改成功!");
}else{
System.out.println("修改失败!");
}
}else{
System.out.println("账号或者密码输入有误!");
}
pstate.close();
}catch(Exception e){
e.printStackTrace();
}finally{
BasicDataSourceDemo.closeConnection();
}
}
}