JDBC(Java DataBase Connectivity)
1、基礎知識
1)規範(標準):SUN制定的JAVA應用程序連接數據庫的規範(標準)。
2)類和接口的集合。
3)作用:連接到一個數據庫並對數據庫進行查詢、更新。
2、JDBC設計
1)JDBC結構:Java程序,JDBC管理器,驅動程序,數據庫四部分
使用JDBC/ODBC橋來利用ODBC的接口訪問數據庫
通過直接的JDBC驅動程序來實現數據庫的訪問
2)JDBC的典型用法:
基於傳統C/S模式的數據庫訪問
3)三層應用模式:
3、 Java中JDBC的使用
用於JDBC編程的類都包含在java.sql 包 中
- DriverManager驅動程序管理類:
用來裝載驅動程序,管理各種不同的數據庫驅動程序,並且爲創建新的數據庫聯接提供支持。
public static synchronize Connection getConnection(String url,String user,String password)
url形式爲:
jdbc:<subprotocol>:<subname>
數據庫的位置:數據庫所在的主機,所使用的端口
Oracle:1521;
MicroSoft SQL Server:1433;
MySQL:3306。
數據庫的信息:數據庫的名字。
jdbc:mysql://localhost:3306/bookstore
用於建立一個到達指定數據庫的連接,返回一個Connection對象。
- Connection類
代表應用程序到數據庫的一個連接,完成對某一指定數據庫的聯接。
statement creatStatement()
用於建立一個語句對象,以便執行沒有參數的SQL查詢和更新。
void close();
用於關閉當前的連接
- Statement類
用來執行查詢和更新操作
1)ResultSet executeQuery(String sql)
執行SQL語句,返回結果爲ResultSet對象
2)boolean execute(String sql)
執行sql語句,若結果爲ResultSet則返回true,否則返回false。可使用getResultSet方法或getUpdateCount方法運行結果
3)ResultSet getResultSet()
返回目前的ResultSet
4)int executeUpdate(String sql)
執行SQL語句Insert,Update,Delete,返回行數或0,另外它也可以執行DDL(Data Definition Lanbuage)語言。
5)void close()
釋放Statement所連接的數據庫和JDBC資源。
- ResultSet類
執行查詢後返回的結果集
1)xxx getxxx(int columnindex)
xxx getxxx(String columnName)
xxx表示一個類型:int、double、String、data
2)boolean next()
返回下一記錄,沒有時返回false
3)void close()
釋放ResultSet資源
4、主要過程實現
1) 建立JDBC-ODBC橋接器
調用Class類中的靜態方法forName()
如果無法找到指定的驅動程序類名,forName()方法會拋出
ClassNotFoundException的異常。
使用Class.forName(“驅動程序名字”)顯式加載驅動程序。
例如:
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
MySQL: com.mysql.jdbc.Driver
Oracle: oracle.jdbc.drive.OracleDriver
SQL Server: com.microsoft.jdbc.sqlserver.SQLServerDriver
2 )連接到數據庫
- 指定數據庫連接的url,數據源的位置
- 使用DriverManager.getConnection(url);
例如:
String url=“jdbc:odbc:datasource”;
Connection conn=DriverManager.getConnection(url);
或者:
Connection conn=DriverManager.getConnection(String url , String user , String password)
eg:
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstore","root","root");
3)向數據庫發送SQL語句
try{
Statement sql = con.createStatement();
}catch(SQLException e){
...
}
4)處理查詢結果
SQL語句對數據庫的查詢操作將返回一個ResultSet對象
ResultSet rs = sql.executeQuery("SQL語句")
ResultSet對象一次只能看到一個數據行,若想顯示所有的數據行,可用next()實現:
while(rs.next()){
}
5、通過JDBC訪問數據庫的基本流程
1)基本流程
- 建立ODBC數源(可選)
- 裝入JDBC驅動程序
- 建立連接
- 執行SQL語句
- 檢索結果
- 關閉連接
2)關閉相關對象
結果集對象、語句對象、連接對象
rs.close();
stmt.close();
con.close();
6、PreparedStatement類
- Statement對象在每次執行sql語句時都將語句傳給數據庫,在多次執行同一個語句時,效率比較低。而prepared語句在它被應用程序調用之前就被送到數據庫進行解釋。這種方法的好處在於當程序包含了相同的SQL語句時,可以提高程序的執行效率。
- 當需要在同一個數據庫表中完成一組記錄的更新時,可以使用PreparedStatement類,比如:如果需要一次更新多條顧客的購物金額記錄時。
- PreparedStatement對象的sql語句可以接受參數,每次執行時可以傳遞不同的參數.
- PreparedStatement提供了setXXX()方法
setString( )、setFloat( ) 、setInt( )
1)創建
String sql=“select * from customer where age=?”
PreparedStatement pstmt=conn.prepareStatement(sql);
2)執行
pstmt.setInt(1,30);
ResultSet=pstmt.executeQuery();
3)關閉
pstmt.close();