JavaWeb學習(六) : JDBC 訪問數據庫 (MySql,Oracle,SQLserver)

#JDBC 是什麼? Java DateBase Connection(看這個英文八九不離十是起到一個鏈接的做用) 看下面這張圖,JDBC 處於 Java 程序和 數據庫中間,咱們須要經過JDBC做爲一個橋樑,使得二者之間存在聯繫。 怎麼使得二者之間創建聯繫呢? 咱們能夠經過 Java 的一些 API 進行創建鏈接。
什麼是 API 呢? 簡單來講就是 Java 中的一些 接口、方法、類。 經過這些來創建與數據庫之間的關係。 #JDBC 操做數據庫的各個環節: 一、JDBC API: 提供各類操做訪問接口 Connection、Statement、PreparedStatement、ResultSet 二、JDBC DriverManager: 管理不一樣的數據庫驅動,統一管理訪問更加方便。 三、各類數據庫驅動: 相應的數據庫廠商提供的(第三方公司提供) 鏈接(直接操做數據庫) #JDBC訪問數據庫的具體步驟(基本上是模板): a、導入驅動,加載具體的驅動類 b、與數據庫創建鏈接 c、發送Sql,執行 d、處理結果集 #API 的功能及操做: ##API 的主要功能: a、與數據庫創建鏈接 b、發送Sql語句1 c、返回處理結果
##API的主要操做: a、DriverManager: 管理JDBC驅動 b、Connection : 鏈接 c、Statement : 運行 Sql 語句(增刪改查) d、CallableStatement : 調用數據庫中的存儲過程 / 存儲函數 e、Result : 返回結果集 #各個數據庫所用到的鏈接字符串(數據庫的一些信息): 不一樣的數據庫對應的鏈接字符串不一樣,(形式不一樣,內容相似-------哪一種類型的數據庫、IP地址、端口號、數據庫名) Oracle : jdbc:oracle:thin:@localhost:1521:數據庫實例名 (你建立的數據庫的名字) MySql : jdbc:mysql://localhost:3306/數據庫實例名 SQLServer : jdbc:microsoft:sqlserver:localhost:1433;databasename = 數據庫實例名 #數據庫對應的 jar 包 及 對應的 導入驅動: 驅動在每一個數據庫各自對應的 jar包中,因此須要先把各個數據庫對應的包進行導入java

驅 動jar:(能夠在這個連接中進行查找:https://mvnrepository.com/)
Oracle:ojdbc-x.jar
MySql:mysql-connector-java-x.jar
SqlServer:sqljdbc-x.jar   
                
導入驅動(不一樣的數據庫對應的驅動不一樣)
Oracle : oracle.jdbc.OracleDriver
MySql  : com.mysql.jdbc.Driver
SqlServer : com.mircrosoft.sqlserver.jdbc.SQLServerDriver

#實現對 MySQL 數據庫的增、刪、改操做: 增、刪、改 都屬於對數據庫的更新操做,處理結果會返回一個數表示 幾行受影響。mysql

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBPMySqlDemo {
    private static final String URL = "jdbc:mysql://localhost:3306/sqltest";
    private static final String USER = "root";
    private static final String PWD = "root";

    public static void update() { // 靜態方法要求其內部用到的變量也應該是靜態的(因此上述變量也應該設置爲靜態變量)
        // 由於要進行兩次異常處理,因此須要將變量設置成相對於 try..catch..語句的外部變量
        Statement stam = null;         // 會拋出SQLException異常
        Connection connection = null;  // 會拋出ClassNotFoundException異常
        try {
            
            // 導入驅動(加載具體的驅動類,若是本地沒有就須要從官網進行下載,而後複製到該項目中,以後 Build Path)
            Class.forName("com.mysql.jdbc.Driver");
            // 鏈接(經過DriverManager.getConnection(鏈接字符串,用戶名,密碼))方法進行鏈接
            connection = DriverManager.getConnection(URL, USER, PWD);
            // 運行SQL語句(想要運行SQL語句要先建立一個Statement對象,用這個實例對象進行操做)
            stam = connection.createStatement();
            
            // 將sql語句做爲字符串進行執行
//          String sql = "delete from student where stuno = 2";
            String sql = "insert into S values('1001','zs',23)";
            // 經過stam的方法進行執行SQL語句進行更新數據庫(返回值是影響的行數 (int) )
            int count = stam.executeUpdate(sql);
            if (count > 0) {
                System.out.println("操做成功!");
            }
        } catch (ClassNotFoundException e) {   // 出現異常時最好一個一個處理(更加安全)
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {     // 不管操做成功與否,咱們都要進行關閉操做(放在Finally一定對執行)
            try {
                // 若是尚未執行到給 stam 變量賦值就已經異常處理了,那麼stam仍是 null,就會null.close(),從而出現空指針的問題
                if(stam != null) stam.close();   // 避免出現空指針
                if(connection != null)connection.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    public static void main(String[] args) {
        // 將update() 設置爲靜態方法,便於調用
        update();
    }

}

#效果展現: ##未插入數據以前: sql

##插入數據以後,刷新數據庫: 數據庫

#實現對數據庫的 查詢操做: ##代碼:安全

// 查詢操做返回的是結果集 :ResultSet(須要遍歷進行操做)
package controlSql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SqlQuery {
	private static final String URL = "jdbc:mysql://localhost:3306/sqltest";
	private static final String User = "root";
	private static final String Pwd = "root";

	public static void query() {
		Connection connection = null;
		Statement stamt = null;
		ResultSet rs = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");

			connection = DriverManager.getConnection(URL, User, Pwd);
			stamt = connection.createStatement();
			String sql = "select sno,sname from s";
			// 查詢操做 : 返回結果集
			rs = stamt.executeQuery(sql);
			// 指針不爲空一直向下走(也能夠向上走 -- rs.previous())
			while (rs.next()) {
				// 經過  getXxx 方法得到 數據庫中每一個字段的信息 
				String sno = rs.getString("sno");
				String sname = rs.getString("sname");
				System.out.println(sno +"--" + sname);
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				// 用完後記得關閉,最後開的先關閉,最早開的最後關閉
				rs.close();
				stamt.close();
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		query();
	}
}

##效果: ####數據庫內容: oracle

####查詢結果以下: 函數

#後記: 其餘數據庫都是相似的操做,只須要加載不一樣的驅動便可。sqlserver

相關文章
相關標籤/搜索