jdbc: java database connection,也就是java的數據庫連接。
作用: 完成數據庫數據和內存數據的交互。
為了屏蔽不同數據庫的差異,在內存和各種數據庫之間建立了一個接口標准。每個廠商按照接口的標准來實現接口類。
jdbc 是java連接數據庫的一套標准。該標准中定義了一系列的接口,由數據庫廠商根據自身數據庫的特點提供實現類,由開發者調用。開發者根據接口調用方法,可以屏蔽不同數據庫廠商的差異。這樣,無論連接什么數據庫都是一套API。
jdbc 操作步驟: 流操作步驟:
① 加載驅動,建立連接 1、建立流
② 執行SQL語句 2、操作流
③ 關閉連接 3、關閉
SQL注入: 在執行sql語句時,由於sql語句的值是由用戶輸入的,所以是以變量接收的,如果以拼接字符串方式來執行SQL語句,一旦數據中有非法字符或者有關鍵字時,會導致語法錯誤,或者執行結果不正確的情況,這稱為SQL注入。
Statement和PreparedStatement的區別:
Statement是PreparedStatement 的父接口。在執行SQL語句時,只能以拼接字符串方式,拼接值。會引起SQL注入。而且效率低。
PreparedStatement,是預編譯SQL語句執行對象,支持占位符方式,無論數據是什么值,都當字符串處理,不會引起SQL注入。而且效率高。
java和數據庫的連接語法:
1 @Override 2 public void add(ManBean bean) { 3 4 //連接對象 5 Connection con=null; 6 //SQL語句執行對象 7 PreparedStatement ps=null; 8 // 加載驅動 9 try { 10 Class.forName("org.gjt.mm.mysql.Driver"); 11 //建立連接,localhost為主機IP地址(本機),3306為mysql的端口號, 12 //testdb為數據庫的庫名,characterEncoding=utf-8為字節編碼集 13 //root為mysql的登錄名,123456為mysql的登錄密碼 14 con=DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb?characterEncoding=utf-8", 15 "root","123456"); 16 System.out.println(con); 17 18 //執行SQL語句,?為占位符 19 ps=con.prepareStatement("insert into t_man(manName,birthday,money) values(?,?,?)"); 20 //填充占位符 21 ps.setString(1, bean.getName()); 22 ps.setDate(2, bean.getBirthday()); 23 ps.setInt(3, bean.getMoney()); 24 //更新數據庫 25 ps.executeUpdate(); 26 } catch (Exception e) { 27 e.printStackTrace(); 28 } 29 finally{//關閉連接 30 try { 31 ps.close(); 32 con.close(); 33 } catch (Exception e) { 34 // TODO Auto-generated catch block 35 e.printStackTrace(); 36 } 37 } 38 }