Java學習筆記:防注入,預處理的實現(xiàn)步驟,字節(jié)流,獲取,讀取配置文件【詩書畫唱】

SQL_PreparedStatement:
什么是防注入?
直接輸入字符串,拼接后,用戶再輸入一個or 1=1的時候,那么這個條件是肯定成立的,所以用戶輸入不輸入用戶名都沒有多大的關系了,會把數(shù)據(jù)都打印出來等等。為了解決這個問題,就要使用preparedstatement解決,它默認將sql語句編譯成函數(shù),每次只要傳入相應的參數(shù)就可以了,就可以防止用戶sql注入。
預處理:我們每次對于數(shù)據(jù)庫操作數(shù)據(jù)庫都要將sql語句編譯成函數(shù),
如果我們使用預處理的時候,數(shù)據(jù)庫就默認生成了一個函數(shù),以后再
傳入相同的內(nèi)容的時候,只需要調用這個函數(shù)就可以了,這個就可以提升sql執(zhí)行的效率
預處理的實現(xiàn)步驟:
//1.導入數(shù)據(jù)包
//2.加載數(shù)據(jù)包
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//3.創(chuàng)建連接數(shù)據(jù)庫的對象(Connection)
Connection con=DriverManager.getConnection("jdbc:sqlserver://localhost;databaseName=fuxi","qqq","11111");
//4.創(chuàng)建執(zhí)行sql語句的對象,是用statement,防注入,預處理是用preparedStatement
String sql="select * from denglu where uid=? and uname=?";//1
PreparedStatement ps=con.prepareStatement(sql);//編譯sql語句
ps.setObject(1, 1);
ps.setObject(2, "qwe");
//5.寫并且執(zhí)行sql語句,ResultSet的對象
ResultSet res=ps.executeQuery();//使用這個方法去執(zhí)行sql語句
//6.遍歷這個對象
while(res.next()){
System.out.println(res.getObject(1)+"? "+res.getObject(2));
}
為什么要讀取配置文件:
//將一些常用的配置信息保存在配置文件里,
//java類一旦編譯,雖然我們不能直接修改編譯后的文件,但是我們
//可以修改配置文件,寫的代碼對于配置都是去配置文件里讀的,萬一
//數(shù)據(jù)庫用戶名或者密碼修改之后,我直接修改配置文件即可。
//讀取配置文件:
//1.建立一個文件,src目錄下,文件名稱可以隨便,但是后綴名必須為.properties
//2..properties中添加幾個內(nèi)容
//3.在main中添加一下代碼
將這個配置文件轉化為字節(jié)流
//使用類加載器轉化文件
InputStream is=qqq.class.getResourceAsStream ("../zz.properties");
Properties p=new Properties();
p.load(is);
System.out.println(p);
//獲取指定的單個內(nèi)容
System.out.println(p.getProperty("qq"));
配置文件就是XXX.properties格式的文件

之后點“New”“Other”“File”,之后就命名XXX.properties格式。
每次寫好Java文件,點擊執(zhí)行的時候,都會自動編譯生成和Java文件相同名字的class文件,之后發(fā)給別的公司class文件和配置文件,別的公司把這個文件從桌面等處拖到Java等的編譯器中時,可以運行,并且用配置文件更改處理class中的數(shù)據(jù)庫名,用戶名,用戶密碼等。但看到的都是”0101“之類的二進制,但可以通過“反編譯”生成源碼等。