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