jdbc是java语言编写的类和接口_JDBC——Java语言连接数据库的标准
JDBC概述
API
JDBC(Java DataBase Connectivity,java數據庫連接)是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。
要想徹底了解JDBC首先就必須要搞清楚JDBC的API到底有什么。
JDBC的API主要都被存放在java.sql和javax.sql中,前者是Java核心包而后者是擴展包,java類庫是Java發布之初就確定了的基礎庫,而javax類庫則是在上面增加的一層東西,就是為了保持版本兼容要保存原來的,但有些東西有了更好的解決方案,典型的就是awt(Abstract Windowing ToolKit) 和swing。
一般而言,我們在程序設計中使用較多的是java.sql而非javax.sql。java.sql類庫中包含的是一些接口和方法
java.sql常用API
DriverManager 類
建立與驅動程序的連接
Driver 接口
提供用來注冊和連接基于 JDBC 技術(“JDBC驅動程序”)的驅動程序的 API,通常僅由 DriverManager 類使用
Connection 接口
提供創建語句以及管理連接及其屬性的方法
Statement
用于發送基本 SQL 語句
PreparedStatement
PreparedStatement:用于發送準備好的語句或基本 SQL 語句(派生自 Statement)
CallableStatement
用于調用數據庫存儲過程(派生自 PreparedStatement)
ResultSet 接口
獲取和更新查詢的結果
Date 類
SQL DATE 的映射關系
SQLData 接口
指定 UDT 到此類的一個實例的映射關系
形象記憶
你可以將客戶端和服務器想象成一條河的兩岸,那么為了使兩岸之間有聯系,我們就需要根據河的寬度來架橋,而與這條河相對應架起的這座橋我們稱之為DriverManager;而要通過橋進行兩岸的貿易往來就必須要進行聘請搬運工來搬運雙方交易的貨物,這樣的搬運工我們稱他們為Connection;這種搬運工假設有高度的自主能動性,能夠根據兩岸的具體需求來搬運相應的貨物,而這種行為的發生是由于它們有一個叫Statement的大腦神經元,這個神經元可以自由地控制搬運工的行為發生;為了存儲搬運工辛苦成果,兩岸必須各自建立一個存儲貨物的倉庫,我們叫它ResultSet。
它們之間的關系大概就是這樣的:
連接數據庫
基本步驟
1.加載數據庫連接相應的驅動類
2.調用數據庫接口,建立數據庫連接
3.創建數據庫具體的操作對象
4.設計要運行的SQL語句
5.收集處理結果集
6.關閉JDBC對象及其相關的類
重點說明
NO1.注冊驅動程序的三種方法:
一、Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
通過Class把類先裝載到java的虛擬機中,并沒有創建Driver類的實例。
二、DriverManager.registerDriver(new?com.microsoft.sqlserver.jdbc.SQLServerDriver());
jdbc是使用橋的模式進行連接的,即橋連接。DriverManager就是管理數據庫驅動的一個類,java.sql.Driver就是一個提供注冊數據庫驅動的接口,而com.microsoft.sqlserver.jdbc.SQLServerDriver()是 java.sql.Driver接口的一個具體實現。
三、System.setProperty("jdbc.drivers",?"com.microsoft.sqlserver.jdbc.SQLServerDriver");
多個驅動使用冒號分隔開,在連接時JDBC會按順序搜索,直到找到第一個能成功連接指定URL的驅動程序。
推薦使用第一種方法,理由有兩點:
1.第一種方法的好處在于能夠在編譯時不依賴于特定的JDBC Driver庫,也就是減少了項目代碼的依賴性,而且也很容易改造成從配置文件讀取JDBC配置,從而可以在運行時動態更換數據庫連接驅動,而第二種方法則不可以這樣做,它一定要有JDBC的驅動才可以通過編譯,這樣對我們的程序就有很多的壞處,尤其是為以后換數據庫帶來麻煩。
2.我們通過Driver類的源碼可以了解到,Driver類中就有一個靜態的代碼塊,只要我們執行了Driver類中的靜態代碼塊,并把驅動的實例放入到Drivers的一個數組列表中,我們再調用方法registerDriver就相當于又向Drivers列表中放了一次Driver驅動,雖然這并不影響我們程序,但是這樣做實在是沒有必要,反而會影響程序的運行。事實上第二種和第三種方法都要創建Driver類實例。
NO2.調用接口,建立連接:
Connection conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=Pet", "sa", "123456");
jdbc:sqlserver類似于網絡協議,讓Java知道要干什么;localhost:1433是主機地址及端口,讓java知道目標在哪兒;后面的就是數據庫的表名,用戶名,密碼,沒有這些,數據庫就會不理睬Java的請求。
NO3.創建一個Statement對象:
Statement state=conn.createStatement();
PreparedStatement pst=conn.prepareStatement(sql);
上面提供了兩種方法用來創建Statement對象,凡是要向數據庫發送SQL語句時,都需要創建Statement接口或者PreparedStatement接口。PreparedStatement:預編譯的Statement接口,具體操作步驟如下
第一步:通過連接獲得PreparedStatement接口對象,用帶占位符(?)的sql語句構造。
PreparedStatement ps=con.praperedStatement("select * from Pet where id=?");
第二步:設置參數
ps.setString(1,"3");
第三步:執行sql語句
rs= ps.executeQuery();
PreparedStatement(預編譯)的優點:
a.執行SQL語句使用預編譯的方式。Statement直接將SQL語句發送到數據庫。PreparedStatement安全性要更高一些。
b.使用占位符的方式拼接SQL中的參數,SQL更加的簡潔。
除此之外,如果執行多條只有參數值不同SQL語句時,預編譯的PreparedStatement執行效率會明顯比非預編譯的Statement高許多。
所以在實際操作中應當盡可能地使用預編譯。
NO4.導入SQL語句到對象中并返回結果:
String sql="select*from msg";
ResultSet rs=state.executeQuery(sql);//返回一個查詢到的結果集
ResultSet rs2=state.executeUpdate(sql);//返回值為 int 型,表示影響記錄的條數
NO5.收集返回的結果集:
executeQuery(sql)用于執行DQL數據查詢語言,通過使用select語句返回一個結果集ResultSet,而后再遍歷得到查詢結果?;
ResultSet.next()會根據下標來獲取數據,與數組不同的是數據庫中第一條記錄的下標是1而非0;
executeUpdate(sql)則用于執行DML數據操作語言(增加,刪除,修改,返回int,表示語句影響行數);
NO6.解除與數據庫的連接:
尤其要注意close()的順序!
要按先 ResultSet ,再Statement,最后Connetction的順序關閉資源。因為ResultSet和Statement在連接的情況下才能使用,所以在連接使用結束后可能還有其他的Statement還在連接,所以不能先關閉Connection。
再借用之前舉的例子,你想啊,如果橋上的搬運工還沒搬完貨物就先把橋撤了會怎么樣。
實戰演練
JDBCDemo01連接數據庫
那些被注釋掉的代碼可以試著解除注釋運行一下,會發現新的大陸。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 數據庫連接步驟
* @author Administrator
*
*/
public class JDBCDemo01 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//加載數據庫連接的驅動類
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//數據庫的接口
Connection conn=
DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=Pet",
"sa", "123456");
//SQL語句(數據)處理的接口
// DQL數據查詢語言(查詢,返回結果集)
// DML數據操作語言(增加,刪除,修改,返回int,表示語句影響行數)
//創建具體操作對象
Statement state=conn.createStatement();
String sql="select*from msg";
//執行SQL語句,返回結果集
ResultSet rs=state.executeQuery(sql);
//使用循環遍歷結果集中的數據
while(rs.next()){
//根據下標獲取數據,下標是從1開始(列數)
//System.out.println(rs.getString(1)+
//" "+rs.getString(2));
//根據列名取數據
System.out.println(rs.getString("id")+" "+
rs.getString("info"));
}
//關閉JDBC對象及其相關類
rs.close();
state.close();
conn.close();
//System.out.println(conn);
}
}
感謝您的閱讀
總結
以上是生活随笔為你收集整理的jdbc是java语言编写的类和接口_JDBC——Java语言连接数据库的标准的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: orm和mysql_orm与mysql
- 下一篇: java ajax传输图片_Java使用