天天看點

JDBC小結

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);

}若轉載請注明出處!若有疑問,請回複交流!