JDBC
1.簡介
JDBC : Java DateBase Connectivity
(1) Java程式用于連接配接資料庫的一組接口規範
(2) 接口的具體實作由各個資料庫廠商提供,簡化了程式員在連接配接
不同資料庫時所需要的編碼。
(3) jdbc驅動:各個資料庫廠商提供的具體實作類,用于取得與資料庫的連接配接(mysql:connector.jar)
2.JDBC核心類
(1) DriverManager:用于擷取連接配接資料庫的Connection對象
(2) Connection:資料庫連接配接對象,如果能成功擷取,說明連接配接資料庫成功
(3) Statement:用于執行sql語句,操作資料庫,可以從Connection對象擷取
(4) ResultSet:用于存儲查詢的結果集,提供了一系列擷取查詢結果的方法,通過Statement擷取該對象
注意:隻有執行查詢語句才有結果集
增删改操作傳回int狀态值
3.核心步驟(mysql)
(1).導入jar包 : mysql-connector-java-5.1.13-bin.jar(connectorJ)(可以從mysql官網下載下傳)
(2).擷取Connection對象
四大參數:
[1] String driverClassName = "com.mysql.jdbc.Driver" --> 資料庫連接配接驅動
[2] String url = "jdbc:mysql://localhost:3306/databaseName" --> 資料庫所在的位置
注: jdbc:mysql是協定, localhost代表本地IP,3306代表端口号
(在url中可以追加資料庫使用者名和密碼:?username:root&password:xxx)
[3] String username="xxxx"; 連接配接資料庫的使用者名
[4] String password="xxxx"; 使用者密碼
Class.forName(driverClassName) : 反射方式加載驅動類
Connection conn = DriverManager.getConnection(url,username,password) : 擷取連接配接對象
(3).得到Statement對象
> Statement stmt = con.createStatement();
(4).執行sql語句
[1] 發送更新sql語句:int row = stmt.executeUpdate(String sql); --> 若執行增删改則到此結束
[2] 發送查詢sql語句:ResultSet rs = stmt.executeQuery(String sql); --> 執行查詢請參照(5)
(5).操作ResultSet擷取資料:
注:
ResultSet内部原理簡介:ResultSet在内部持有一個行指針(遊标),預設指向第一行之前
是以在取出資料時要注意調用next()方法移動該指針使其指向下一行
while(rs.next()){
rs.getXxx(int colIndex); // 根據列标取得資料
rs.getXxx(String colName); // 根據列名取得資料(較為友善)
}
以下四種擷取列元素的方法可供選擇,根據實際需求靈活使用:
[1] int getInt(int i):擷取第i列的資料,轉換成int類型傳回
[2] int getInt(String colName):rs.getString("ename"),擷取目前行,名為ename的列資料
[3] String getString(int i):擷取第i列的資料,轉換成String類型傳回
[4] Object getObject(int i):擷取第i列的資料,轉換成Object類型傳回
(6).關閉資源
rs.close(); // 關閉結果集資源
stmt.close(); // 關閉Statement資源
conn.close(); // 斷開連接配接
4.代碼示例
/* JDBCUtils: 擷取連接配接,關閉資源的工具類 */
package com.itheima.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtils {
// 定義四個擷取連接配接的必要參數,可以從配置檔案擷取,也可以自己給出
private static String driverClassName = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/dbtest1";
private static String username = "root";
private static String password = "zhoubowen";
// 靜态代碼塊用于加載連接配接驅動
static{
try {
Class.forName(driverClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 擷取資料庫連接配接
public static Connection getConnection() throws SQLException{
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
// 關閉資源
public static void closeAll(Connection conn, Statement stmt, ResultSet rs){
if (rs != null) {
rs.close();
} catch (SQLException e) {
if (stmt != null) {
stmt.close();
if (conn != null) {
conn.close();
/* 測試Demo */
public class Demo {
public static void main(String[] args) throws SQLException {
// 擷取連接配接: 關鍵
Connection conn = JDBCUtils.getConnection();
// 擷取執行語句的Statement對象
Statement stmt = conn.createStatement();
// 擷取查詢結果集對象
ResultSet rs = stmt.executeQuery("select * from test");
// 擷取資料
while(rs.next()){
String t_name = rs.getString("t_name");
String t_sex = rs.getString("t_sex");
System.out.println(t_name + ":" + t_sex);
JDBCUtils.closeAll(conn, stmt, rs);
}若轉載請注明出處!若有疑問,請回複交流!