天天看點

防止SQL注入prepareStatement:

prepareStatement:

       SQL注入: 

              查詢時,通過修改where後面的條件,将條件改為真,檢視全表

       防止SQL注入:

               預執行SQL語句,提前判斷該SQL語句的語義和文法是否正确

        當我們要查詢的資訊比較敏感,對安全性要求高,我們就使用prepareStatement,來進行查詢

   java_SQL速配

public class java_SQL速配 {
   //驅動
	public static final String DRIVER = "com.mysql.cj.jdbc.Driver";
   //使用者
	public static final String USER = "root";
   //密碼
	public static final String PWD = "12345678";
  //資料庫服務IP
	public static final String IP = "127.0.0.1";
   //端口号
	public static final String PORT = "3306";
	//url
	public static String url(String dbName) {
	   return "jdbc:mysql://" + IP + ":" + PORT + "/" + dbName + "?useUnicode=true&characterEncoding=UTF8&useSSL=false";	
	}	
}
           

    java_防止SQL注入

public class java_防止sql注入 {

	public static void main(String[] args) {
	  try {
		Class.forName("com.mysql.cj.jdbc.Driver");
		Connection connection =DriverManager.getConnection(java_SQL速配.url("jdbc"), java_SQL速配.USER, java_SQL速配.PWD);
	
	//方法的參數是預執行的SQL語句,需要給值的地方用?占位後續再用真實值替換
		PreparedStatement ps = connection.prepareStatement("select * from student where name=?");
	   //1.為?指派:預執行SQL語句
		/*
		 * 第一個參數:?的位置   第二個參數:要賦的值    位置是從1開始
		 */
		    ps.setString(1, "'田博' or 1=1");
	  //2.執行SQL語句
		    //有傳回結果集的執行
		   ResultSet rs = ps.executeQuery();
		     rs.beforeFirst();
		     while(rs.next()) {
		    	     System.out.println(rs.getObject(1));
		    	     System.out.println(rs.getObject(2));
		    	     System.out.println(rs.getObject(3));
		     }
		    
		    //無傳回結果集的執行
//		    ps.executeUpdate();
	  } catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	  }
	}
}