1、jdbc介紹java
2、一個簡單的jdbc程序的實現步驟(分別給出三種數據庫操做例子)mysql
第一步:引入須要的包;sql
如java.sql.*,javax.sql.*;數據庫
第二步:加載驅動;安全
Class.forName(String className);oracle
注:另外一種方法是:DriverManager.registerDriver(new 驅動類名()(如OracleDriver()));在實際開發中不推薦這種方法,這種方法會致使驅動程序加載兩次,效率不高sqlserver
第三步:獲得與數據庫的鏈接;this
Connection conn=DriverManager.getConnection(String url,String user,String password);url
注:根據url獲取數據庫的鏈接,user是登錄數據庫的用戶名,password是登錄密碼spa
數據庫url詳解:url的寫法爲: localhost能夠用指向本地機的回送地址127.0.0.1代替
經常使用數據庫url地址的寫法:
Oracle——jdbc:oracle:thin:@localhost:1521:sid
SqlServer——jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid
MySQL——jdbc:mysql://localhost:3306/sid
第四步:建立發送sql語句的對象;
Statement statement=conn.createStatement();
注:
有三種類可用:
①Statement:這個類是最原始最普通的,能夠實現crud操做,但在查詢操做中可能會出現注入漏洞;
②PrepareStatement:能夠對sql語句進行預處理,能夠使用其提供的set方法防止注入漏洞,安全性和可靠性比較高;
③CallableStatement:用於調用存儲過程;
第五步:經過statement向數據庫發送sql語句;
statement.executeUpdate(String sql); //executeUpdate()用於執行INSERT、UPDATE、DELETE語句或DDL語句,會返回一個結果表明該sql語句影響的行數
statement.executeQuery(String sql); //executeQuery()用於執行SELECT語句,會返回一個結果集ResultSet,須要對結構進行處理
第六步:斷開與數據庫的鏈接,並釋放相關資源( 注:整個數據庫處理語句會拋異常因此用try catch塊包起來,關閉鏈接的語句寫在塊後面的finally塊中
下面給出幾段簡單的程序例子:
1 /** 2 * 演示如何使用jdbc和Oracle數據庫進行鏈接 3 */ 4 package com.oracle.demos; 5 import java.sql.*; 6 7 import javax.sql.rowset.JdbcRowSet; 8 public class Demo1 { 9 10 public static void main(String[] args) { 11 12 Connection conn=null; 13 Statement statement=null; 14 try { 15 Class.forName("oracle.jdbc.driver.OracleDriver"); 16 conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); 17 statement=conn.createStatement(); 18 String sql=""; 19 int n=statement.executeUpdate(sql); 20 21 } catch (Exception e) { 22 e.printStackTrace(); 23 // TODO: handle exception 24 }finally{ 25 try { 26 if(statement!=null){ 27 statement.close(); 28 } 29 if(conn!=null){ 30 conn.close(); 31 } 32 } catch (Exception e2) { 33 e2.printStackTrace(); 34 // TODO: handle exception 35 } 36 } 37 }
3、重要知識點
其引用對象用於表明數據庫的鏈接,客戶端與數據庫全部交互都是經過connection對象完成的,這個對象的經常使用方法有:
①createStatement();建立向數據庫發送sql語句的statement對象;
②prepareStatement(String sql);建立向數據庫發送預編譯sql語句的PrepareStatement對象;
③prepareCall(String sql);建立執行存儲過程的callableStatement對象;
④setAutoCommit(boolean autoCommit);設置事務是否自動提交,默認爲true;
⑤commit();在此鏈接上提交事務;
⑥rollback();在此鏈接上回滾事務;
注:當有多個dml操做同時執行,將這些操做看作一個總體進行提交,這個時候就須要將setAutoCommit設置爲false,在執行commit()語句時進行統一提交,這樣若是出了錯誤能夠總體回滾;
具體實現代碼:
1 package com.oracle.demos; 2 import java.sql.*; 3 4 import javax.sql.rowset.JdbcRowSet; 5 public class Demo1 { 6 7 public static void main(String[] args) { 8 9 Connection conn=null; 10 Statement statement=null; 11 try { 12 Class.forName("oracle.jdbc.driver.OracleDriver"); 13 conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); 14 //把事務設爲不自動提交 15 conn.setAutoCommit(false); 16 statement=conn.createStatement(); 17 String sql1=""; 18 String sql2=""; 19 statement.executeUpdate(sql1); 20 statement.executeUpdate(sql2); 21 //提交全部事務 22 conn.commit(); 23 } catch (Exception e) { 24 e.printStackTrace(); 25 try { 26 //任何sql語句出錯,能夠總體回滾 27 conn.rollback(); 28 } catch (SQLException e1) { 29 e1.printStackTrace(); 30 } 31 }finally{ 32 try { 33 if(statement!=null){ 34 statement.close(); 35 } 36 if(conn!=null){ 37 conn.close(); 38 } 39 } catch (Exception e2) { 40 e2.printStackTrace(); 41 } 42 } 43 } 44 45 }
System.out.println(接口引用的某個類實例);將輸出類的全名,該方法用於查看某個接口引用指向的真正對象實例的類型是什麼。如上面的程序中執行System.out.println(conn)則輸出對象數據庫公司(Oracle)提供的實現Connection這個接口的類的類名。
用於表明sql語句的執行結果集的數據表,一般經過執行查詢語句生成,ResultSet封裝執行結果時,採用的相似於表格的方式。ResultSet對象維護了一個指向表格數據行的遊標,初始的時候,遊標在第一行以前,調用ResultSet接口的next()方法能夠移動遊標循環取出全部數據。
ResultSet經常使用方法有:
①next();移動到下一行
②previous();移動到前一行
③absolute(int row);移動到指定行[row從1開始計算]
④beforeFirst();移動到resultSet的最前面
⑤afterLast();移動到resultSet的最後面
next()方法:將光標從當前位置向前移一行。ResultSet光標最初位於第一行以前;第一次調用next()方法使第一行成爲當前行,第二次調用使第二行成爲當前行,一次類推若是新的當前行有效,則返回true,若是不存在下一行,則返回false。
獲取數據的get方法:①獲取任意類型的數據,getObject(int index)或getObject(String columnName)
②獲取指定類型的數據(如String類型),getString(int index)或getString(String columnName)
其中index爲字段(列)的標號從1開始,columnName爲字段名字
ResultSet類型:默認只能向前讀取;TYPE_SCROLL_INSENSITIVE表示可回滾,但當數據庫數據更新時取到的ResultSet不進行相應的實時更新 ;TYPE_SCROLL_SENSITIVE則表示ResultSet受數據庫數據變更的影響;
經常使用數據庫數據類型與java數據類型轉換表:
Oracle
Sql Server
MySql