1. 程式人生 > >JDBC實現修改和刪除操作

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();
		}
	}
}