一、常用JDBC API
在java.sql包中包含體現JDBC基本功能的若干接口和類:
1.Driver 接口:代表驅動程序
2.DriverManager 類:驅動程序管理員
3.Connection 接口:代表數據庫連接
4.Statement 、PreparedStatement、CallableStatement 接口:代表數據庫操作對象
5.ResultSet 接口:代表結果集
6.DatabaseMetadata、ResultSetMetadata接口:代表元數據
7.Types 類:代表JDBC類型
===============================================================================
二、若干API的具體說明
Statement和PreparedStatement------SQL語句執行接口
Statement接口代表了一個數據庫的狀態,再向數據庫發送相應的SQL語句時,都需要創建Statement接口或者PreparedStatement接口。
Statement主要用於操作不帶參數的SQL語句,比如增、刪、改。
PreparedStatement:預編譯的Statement接口
第一步:通過連接獲得PreparedStatement接口對象,用帶佔位符(?)的sql語句構造。
PreparedStatement ps=con.praperedStatement("select * from test where id=?");
第二步:設置參數
ps.setString(1,"5");
第三步:執行sql語句
rs= ps.executeQuery();
Statement 發送完整的sql語句到數據庫不是直接執行,而是先編譯、後運行。
PreparedStatement 先發送帶參數的sql語句,在發送一組參數值。
如果是同構的sql語句,則PreparedStatement效率高。對於異構的sql語句,兩者效率差不多。
同構:兩個sql語句可編譯的部分是相同的,只有參數值不同。
異構:兩個sql語句的格式是不同的。
注意點:1.使用預編譯的Statement(即PreparedStatement)編譯多條sql語句一起執行。
2.可以跨數據庫使用,編寫通用程序。
3.能用預編譯時儘量用預編譯。
--------------------------------------------------------------------------------------------------------
ResultSet接口:
ResultSet接口是查詢結果集接口,它對返回的結果集進行處理。ResultSet是程序員進行JDBC操作的必須接口。
---------------------------------------------------------------------------------------------------------
ResultSetMetaData----元數據操作接口:
ResultSetMetaData是對元數據進行操作的接口,可以實現很多高級功能。Hibernate運行數據庫的操作,大多是通過此接口。可以認爲,此接口是SQL查詢語言的一種反射機制。ResultSetMetaData可以通過數據的形式,來遍歷數據庫各個字段的屬性。對於開發者來說,此機制意義重大。
JDBC通過元數據(MetaData)來獲取具體的表相關的信息,例如,可以查詢數據庫中有哪些表、標有哪些字段、字段的屬性等。MetaData 通過一系列的getXXX將這些信息返回給我們。
MetaData元數據包括 數據庫源數據DatabaseMetadata和 結果集元數據ResultSetMetaData。
數據庫源數據DatabaseMetadata:使用connection.getMetaData()獲得了關於數據庫整體的元數據信息。
結果集元數據ResultSetMetaData:resultSet.getDataMeta獲得的比較重要的是表的列名、列的屬性等信息。
結果集元數據對象:ResultSetMetaData meta = rs.getDataMeta();
字段個數:meta.getColumnCount();
字段名字:meta.getColumnName();
字段JDBC類型:meta.getColumnType();
字段數據庫類型:meta.getColumnTypeName();
數據庫元數據對象:DatabaseMetaData meta = con.getMetaData();
數據庫名:meta.getDatabaseProductName();
數據庫版本號:meta.getDatabaseProductVersion();
數據庫驅動名:meta.getDriverName();
數據庫驅動版本號:meta.getDriverVersion();
數據庫URL:meta.getURL();
該連接的數據庫登錄名:meta.getUserName();
-------------------------------------------------------------------------------------------------------------------------------------
三、JDBC應用程序的基本步驟:
1.註冊驅動
2.建立數據庫連接
3.創建數據庫操作對象
4.執行SQL
5.處理結果集
6.關閉JDBC對象
1.註冊一個驅動driver
註冊驅動程序的三種方式:
方式一:Class.forName("Oracle.jdbc.driver.OracleDriver");
方式二:Driver driver=new Oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver(driver);
方式三:編譯時在虛擬機中加載驅動
javac -D jdbc.drivers = oracle.jabc.driver.OracleDriver xxx.java
java -D jabc.drivers = 驅動全名 類名
使用系統屬性名,加載驅動 -D表示爲系統屬性賦值
附:mysql 的Driver全名:com.mysql.jdbc.Driver
sqlserver 的Driver全名:com.microsoft.jdbc.sqlserver.SQLServerDriver
2.建立連接
conn=DriverManager.getConnection
("jdbc:oracle.thin:@192.168.0.254:1521/test","username","password");
上面括號中放的是:oracle自協議+@+ip:port /數據庫實例名,數據庫用戶名,用戶密碼。
mysql url寫法:jdbc:mysql://192.168.254:3306/test
3.獲得一個Statement對象
sta = conn.createStatement();
4.通過Statement執行sql語句
sta.excuteQuery(sql);//返回一個查詢結果集
sta.executeUpdate(sql);//返回值爲 int 型,表示影響記錄的條數
將sql語句通過連接發送到數據庫中執行,以實現對數據庫的操作。
5.處理結果集
使用Connection對象獲得一個Stagement,Statement中的executeQuery(String sql)方法可以使用select語句查詢,並返回一個結果集 ResultSet 。通過遍歷這個結果集,可以獲得select語句的查詢結果。ResultSet的next()方法會操作一個遊標從第一條記錄開始讀取,直到最後一天記 錄。 executeUpdate(String sql)方法用於執行 DDL /DML 語句,比如update,delete等。
只有select語句纔有返回結果集。
例:Statement sta = con.createStatement(); //創建statement對象
String sql = " insert into test(id,name) values(1"+" " " "+"king"+" "" "+") ";
sta.executeUpdate(sql); //執行sql語句
String sql = "select * from test";
ReslutSet rs = sta.executeQuery(sql);//執行sql語句後有結果集
//遍歷處理結果集
while(rs.next()){
System.out.println(rs.getInt("id"));
System.out.println(rs.getString("name"));
}
6.關閉數據庫連接(釋放資源)
調用close()方法:
rs.close();
sta.close();
conn.close();
ResultSet 、Statement 和Connetction是依次依賴的。
注意:要按先 ResultSet ,再Statement,最後Connetction的順序關閉資源。因ResultSet和Statement在連接的情況下才能使用,所以在連使用束 後可能還有其他的statement還在連接,所以不能先關閉Connection。