JDBC簡介

數據庫驅動

SUN公司爲了簡化、統一對數據庫的操作,定義了一套Java操作數據庫的規範,稱之爲JDBC

JDBC全稱爲:Java Data Base Connectivityjava數據庫連接),它主要由接口組成。

組成JDBC的2個包:

 java.sql

 javax.sql

開發JDBC應用需要以上2個包的支持外,還需要導入相應JDBC的數據庫實現(即數據庫驅動)

程序詳解—DriverManager:

Jdbc程序中的DriverManager用於加載驅動,並創建與數據庫的鏈接,這個API的常用方法:

DriverManager.registerDriver(new Driver())

DriverManager.getConnection(url, user, password)

注意:在實際開發中並不推薦採用registerDriver方法註冊驅動。原因有二:

一、查看Driver的源代碼可以看到,如果採用此種方式,會導致驅動程序註冊兩次,也就是在內存中會有兩個Driver對象。

二、程序依賴mysqlapi,脫離mysqljar包,程序將無法編譯,將來程序切換底層數據庫將會非常麻煩。

推薦方式:Class.forName(com.mysql.jdbc.Driver);

採用此種方式不會導致驅動對象在內存中重複出現,並且採用此種方式,程序僅僅只需要一個字符串,不需要依賴具體的驅動,使程序的靈活性更高。

同樣,在開發中也不建議採用具體的驅動類型指向getConnection方法返回的connection對象。

數據庫URL:

URL用於標識數據庫的位置,程序員通過URL地址告訴JDBC程序連接哪個數據庫,URL的寫法爲:

   jdbc:mysql:[]//localhost:3306/test ?參數名:參數值

常用數據庫URL地址的寫法:

Oracle寫法:jdbc:oracle:thin:@localhost:1521:sid

SqlServerjdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid

MySqljdbc:mysql://localhost:3306/sid

Mysqlurl地址的簡寫形式: jdbc:mysql:///sid

常用屬性:useUnicode=true&characterEncoding=UTF-8

程序詳解—Connection:

Jdbc程序中的Connection,它用於代表數據庫的鏈接,Collection是數據庫編程中最重要的一個對象,客戶端與數據庫所有交互都是通過connection對象完成的,這個對象的常用方法:

createStatement():創建向數據庫發送sqlstatement對象。

prepareStatement(sql) :創建向數據庫發送預編譯sqlPrepareSatement對象。

prepareCall(sql):創建執行存儲過程的callableStatement對象。 

setAutoCommit(boolean autoCommit):設置事務是否自動提交。 

commit() :在鏈接上提交事務。

rollback() :在此鏈接上回滾事務。

程序詳解—Statement:

Jdbc程序中的Statement對象用於向數據庫發送SQL語句, Statement對象常用方法:

executeQuery(String sql) :用於向數據發送查詢語句。

executeUpdate(String sql):用於向數據庫發送insertupdatedelete語句

execute(String sql):用於向數據庫發送任意sql語句

addBatch(String sql) :把多條sql語句放到一個批處理中。

executeBatch():向數據庫發送一批sql語句執行。 

程序詳解—ResultSet:

Jdbc程序中的ResultSet用於代表Sql語句的執行結果。Resultset封裝執行結果時,採用的類似於表格的方式。ResultSet 對象維護了一個指向表格數據行的遊標,初始的時候,遊標在第一行之前,調用ResultSet.next() 方法,可以使遊標指向具體的數據行,進行調用方法獲取該行的數據。

ResultSet既然用於封裝執行結果的,所以該對象提供的都是用於獲取數據的get方法:

獲取任意類型的數據

getObject(int index)

getObject(string columnName)

獲取指定類型的數據,例如:

getString(int index)

getString(String columnName)

提問:數據庫中列的類型是varchar,獲取該列的數據調用什麼方法?Int類型呢?bigInt類型呢?Boolean類型?

程序詳解—ResultSet:

ResultSet還提供了對結果集進行滾動的方法:

next():移動到下一行

Previous():移動到前一行

absolute(int row):移動到指定行

beforeFirst():移動resultSet的最前面。

afterLast() :移動到resultSet的最後面。

程序詳解—釋放資源:

Jdbc程序運行完後,切記要釋放程序在運行過程中,創建的那些與數據庫進行交互的對象,這些對象通常是ResultSet, StatementConnection對象。

特別是Connection對象,它是非常稀有的資源,用完後必須馬上釋放,如果Connection不能及時、正確的關閉,極易導致系統宕機。Connection的使用原則是儘量晚創建,儘量早的釋放。

爲確保資源釋放代碼能運行,資源釋放代碼也一定要放在finally語句中。

使用JDBC對數據庫進行CRUD:

Jdbc中的statement對象用於向數據庫發送SQL語句,想完成對數據庫的增刪改查,只需要通過這個對象向數據庫發送增刪改查語句即可。

Statement對象的executeUpdate方法,用於向數據庫發送增、刪、改的sql語句,executeUpdate執行完後,將會返回一個整數(即增刪改語句導致了數據庫幾行數據發生了變化)

Statement.executeQuery方法用於向數據庫發送查詢語句,executeQuery方法返回代表查詢結果的ResultSet對象。

練習:編寫程序對User表進行增刪改查操作。

練習:編寫工具類簡化CRUD操作。(異常暫不處理)

CRUD操作-create:

使用executeUpdate(String sql)方法完成數據添加操作,示例操作:

Statement st = conn.createStatement();

 String sql = "insert into user(….) values(…..) ";

 int num = st.executeUpdate(sql);

 if(num>0){
  System.out.println("插入成功!!!");
 }

 

CRUD操作-updata:

使用executeUpdate(String sql)方法完成數據修改操作,示例操作:

Statement st = conn.createStatement();

 String sql = “update user set name=‘’ where name=‘’";

 int num = st.executeUpdate(sql);

 if(num>0){
  System.out.println(“修改成功!!!");
 }

 

CRUD操作-delete:

使用executeUpdate(String sql)方法完成數據刪除操作,示例操作:

Statement st = conn.createStatement();

 String sql = “delete from user where id=1;

 int num = st.executeUpdate(sql);

 if(num>0){
  System.out.println(“刪除成功!!!");
 }

 

CRUD操作-read:

使用executeQuery(String sql)方法完成數據查詢操作,示例操作:

Statement st = conn.createStatement();

 String sql = “select * from user where id=1;

 ResultSet rs = st.executeUpdate(sql);

 while(rs.next()){
  //根據獲取列的數據類型,分別調用rs的相應方法
  //映射到java對象中
 }

 

PreparedStatement:

PreperedStatementStatement的孩子,它的實例對象可以通過調用Connection.preparedStatement()方法獲得,相對於Statement對象而言:

PreperedStatement可以避免SQL注入的問題。

Statement會使數據庫頻繁編譯SQL,可能造成數據庫緩衝區溢出。PreparedStatement 可對SQL進行預編譯,從而提高數據庫的執行效率。

並且PreperedStatement對於sql中的參數,允許使用佔位符的形式進行替換,簡化sql語句的編寫。

數據庫分頁:

MySQL分頁的實現:

Select * from table limit M,N 

M:記錄開始索引位置

N:取多少條記錄。

完成WEB頁面的分頁顯示

先獲得需分頁顯示的記錄總數,然後在web頁面中顯示頁碼。

根據頁碼,從數據庫中查詢相應的記錄顯示在web頁面中。

Oracle分頁語句:

select * from (
   select rownum r_, row_.*  from (
     select * from student order by id
   ) row_ where rownum <=5
         ) where r_>=1

1位置:起始索引位置。
5位置:結束索引位置。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章