Java程序操作數據庫
(1)加載驅動類Class vs class
Class描述類的類
class關鍵字
Class.forName("類名").newInstance(); vs 類名 對象名 = new 類名();
1、兩者都是創建對象
2、第一種方式的優點在於括號裏面的類也許尚不存在,我們可以先用,編譯不會報錯,適用於團隊開發。第二種方式如果類不存在會編譯報錯。
3、第一種方式需要處理異常,第二種方式不需要。
(2)獲取連接對象
conn = DriverManager.getConnection(url,user,password);
url= jdbc:mysql://localhost:3306/student
url= 協議//--域名(ip地址加端口)--數據庫名
不同的數據庫協議有區別
(3)基本操作 (增刪查改)
String sql = "insert into studentinfo(name,password) values(?,?)";
Statement vs PreparedStatement
Statement stmt = conn.createStatement();
stmt.execute(sql);底層發生網絡交互,流的應用。
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,"a");
ps.setString(2,"b");
ps.execute();
Statement與PreparedStatement的區別與聯繫:
1、sql語句有區別,Statement需要拼接,PreparedStatement可以設置問號,簡單一些。 PreparedStatement接口繼承Statement, PreparedStatement 實例包含已編譯的 SQL 語句,所以其執行速度要快於Statement 對象。
2、作爲 Statement 的子類,PreparedStatement 繼承了 Statement 的所有功能。三種方法execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要參數。
3、PreparedStatement盡最大可能提高性能。語句在被DB的編譯器編譯後的執行代碼被緩存下來,那麼下次調用時只要是相同的預編譯語句就不需要編譯,只要將參數直接傳入編譯過的語句執行代碼中(相當於一個函數)就會得到執行.這並不是說只有一個Connection中多次執行的預編譯語句被緩存,而是對於整個DB中,只要預編譯的語句語法和緩存中匹配.那麼在任何時候就可以不需要再次編譯而可以直接執行.而statement的語句中,即使是相同操作,而由於每次操作的數據不同所以使整個語句相匹配的機會極小,幾乎不太可能匹配.當然並不是所有預編譯語句都一定會被緩存,數據庫本身會用一種策略,比如使用頻度等因素來決定什麼時候不再緩存已有的預編譯結果.以保存有更多的空間存儲新的預編譯語句。
4、從安全性角度考慮。PreparedStatement更好一些,避免注入攻擊。
5、JDBC驅動的最佳化是基於使用的是什麼功能. 選擇PreparedStatement還是Statement取決於你要怎麼使用它們。對於只執行一次的SQL語句選擇Statement是最好的. 相反, 如果SQL語句被多次執行選用PreparedStatement是最好的。