JDBC实现修改和删除操作

工具: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("删除成功!");
					}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();
		}
	}
}
 

 

 

 

 

 

 

 

 

你可能感兴趣的:(JDBC)