JDBC实现修改和删除操作

来源:互联网 发布:达芬奇 知乎 编辑:程序博客网 时间:2024/06/05 10:11
工具: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.csdn.net/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("删除成功!");
pstate.close()
}else{System.out.println("删除失败!");
sptate.close();
}}else{System.out.println("取消用户的删除操作!");System.exit(-1);}}else{System.out.println("输入的用户名和密码不正确!"+ "无法进行删除操作.");}
sptate.close();
}catch(Exception e){e.printStackTrace();}}//修改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("修改成功!");
sptate.close();
}else{System.out.println("修改失败!");}}else{System.out.println("账号或者密码输入有误!");}
sptate.close();
}catch(Exception e){e.printStackTrace();}}}





原创粉丝点击