JDBC的通用查詢的方法
PreparedStatement
1.Why
1):使用Statement需要進行拼寫SQL語句,很辛苦,而且容易出錯。
2):使用Statement可以發生SQL注入。
SQl注入:
SQL注入是利用某些系統對用戶輸入的數據進行充分的檢查
而在用戶輸入數據中注入非法的SQL語句段或命令,從而充分利用系統的SQL引擎完成惡意行為的做法
對於Java而言,要防範SQL注入,只要用PrepareStatement取代Statement就可以了
String username = a"OR PASSWORD= ;
String password = OR "1"="1;
String sql=SELECT * FROM users WHERE username = "
username. "AND
password=" passwoed ";
System.out.println(sql);
SELECT * FROM users WHERE username="a" OR PASSWORD="AND password = "OR "1"="1"
"
2.What
1):是Statement的子介面。
2):可以傳入帶佔位符的SQL語句,並且提供了補充佔位符變數的方法
3.How
1):創建PreparedStatement
String SQL=INSERT INTO examstudent VALUES(?,?,?,?,?,?,?);
PrepareStatement ps=conn.prepareStatement(sql);
2):調用PreparedStatement 的 setXxx(int index,Object val)設置佔位符的值,index,值從1開始
3):執行SQL語句 executeUpdate() 或 executeQuery()
ResultSetMetaData
1.Why:如果只有一個結果集,但不知道該結果集中有多少列,列的名字都是什麼
1):編寫通用的查詢方法是需要使用。
publicTget(Classclazz,String sql.Object ...args)
2.What:用於描述ResultSet的對象
3.How
1):得到ResultSetMetaData對象,調用ResultSet的getMetaData()方法
ResultSetMetaData rsmd=resultSet.getMetaData();
2):ResultSetMetaData有哪些好用的方法;
int getColumnCount();結果集中的列數
String getColumnLabel(int column);獲取指定的列的列名,其中索引從1開始
while(resultSet.next()){
for(int i=0;irsmd.getcolumncount();i ){ p=
String columnLable=rsmd.getColumnLabel(i 1);
}
}
TAG:千鋒JAVA開發學院 |