JDBC1(JDBC相關類與接口 ?連接mysql數據庫? 測試 不同數據庫廠商實現-MySQL和Oracle)

目錄

一、JDBC

1. JDBC相關類與接口

1.1?DriverManager

1.2 Connection

1.3 Statement

4.ResultSet

2. JDBC工作原理

二、連接mysql數據庫

1. 導入jar包

2. 使用DriverManager加載驅動類

3. Connection接口

4.?Statement接口

5. ResultSet接口?

?編輯

6. 關閉并釋放資源?

三、測試

1. 連接測試

2. 添加測試

3. 修改測試

4.?查詢測試

四、不同數據庫廠商實現-MySQL和Oracle?

MySQL實現

Oracle實現


一、JDBC

  • Java Database Connectivity:Java訪問數據庫的解決方案
  • JDBC定義了一套標準接口,即訪問數據庫的通用API, 不同的數據庫廠商根據各自數據庫的特點去實現這些接口。
  • JDBC希望用相同的方式訪問不同的數據庫,讓具體的數據庫操作與數據庫廠商實現無關,從而在不同數據庫之間輕易的進行切換?

1. JDBC相關類與接口

  • Driver 接口:加載驅動程序。
  • DriverManager 類:裝人所需的 JDBC 驅動程序,編程時調用它的方法來創建連接。
  • Connection 接口:編程時使用該類對象創建 Statement 對象。
  • Statement 接口:編程時使用該類對象得到 ResultSet 對象。
  • ResultSet 類:負責保存 Statement 執行后所產生的查詢結果。

1.1?DriverManager

  • DriverManager:驅動管理對象
  • 注冊驅動(告訴程序該使用哪一個數據庫驅動)
    • 在com.mysql.jdbc.Driver類中存在靜態代碼塊(通過查看源碼發現)
      //這是com.mysql.jdbc.Driver的靜態代碼塊,只要使用這個類,就會執行這段代碼
      //而Class.forName("com.mysql.jdbc.Driver")就正好使用到了這個類
      static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}
      }
      

    • 注意:我們不需要通過DriverManager調用靜態方法registerDriver(),因為只要Driver類被使用,則會執行其靜態代碼塊完成注冊驅動

    • 所以后邊我們其實可以省略注冊驅動的步驟(可以注釋掉上個案例的注冊驅動的步驟,也可以查詢到數據)
    • mysql5之后可以省略注冊驅動的步驟。在jar包中,存在一個java.sql.Driver配置文件,文件中指定了com.mysql.jdbc.Driver
  • 獲取數據庫連接(獲取到數據庫的連接并返回連接對象)

    • static Connection getConnection(String url, String user, String password);
      • 返回值:Connection數據庫連接對象
      • 參數
        • url:指定連接的路徑。語法:jdbc:mysql://ip地址(域名):端口號/數據庫名稱
        • user:用戶名
        • password:密碼

1.2 Connection

  • Connection:數據庫連接對象
    • 獲取執行者對象
      • 獲取普通執行者對象:Statement createStatement();
      • 獲取預編譯執行者對象:PreparedStatement prepareStatement(String sql);
    • 管理事務
      • 開啟事務:setAutoCommit(boolean autoCommit); 參數為false,則開啟事務。
      • 提交事務:commit();
      • 回滾事務:rollback();
    • 釋放資源
      • 立即將數據庫連接對象釋放:void close();

1.3 Statement

  • Statement:執行sql語句的對象
    • 執行DML語句:int executeUpdate(String sql);
      • 返回值int:返回影響的行數
      • 參數sql:可以執行insert、update、delete語句。
    • 執行DQL語句:ResultSet executeQuery(String sql);
      • 返回值ResultSet:封裝查詢的結果
      • 參數sql:可以執行select語句。
    • 釋放資源
      • 立即將執行者對象釋放:void close();

4.ResultSet

  • ResultSet:結果集對象
    • 判斷結果集中是否還有數據:boolean next();
      • 有數據返回true,并將索引向下移動一行
      • 沒有數據返回false
    • 獲取結果集中的數據:XXX getXxx(“列名”);
      • XXX代表數據類型(要獲取某列數據,這一列的數據類型)
      • 例如:String getString(“name”); int getInt(“age”);
    • 釋放資源
      • 立即將結果集對象釋放:void close();

2. JDBC工作原理

二、連接mysql數據庫

1. 導入jar包

  1. 創建一個 lib 目錄
  2. ?將mysql-connector-java-8.0.15驅動復制進去
  3. ?右鍵添加路徑?Eclipse: Build Path

2. 使用DriverManager加載驅動類

  • 加載驅動類
  • 通過Class.forName( )方法(反射) 完成驅動類的注冊

找到驅動類 右鍵復制全路徑

3. Connection接口

根據URL連接參數找到與之匹配的Driver對象, 調用其方法獲取連接

注:Connection只是接口!真正的實現是數據庫廠商提供的驅動包完成的。

jdbc:mysql://localhost:3306/myhomework03?serverTimezone=GMT

4.?Statement接口

Statement用于執行SQL語句

注:不同的SQL語句,要調用不同的方法來執行。

Statementstmt = conn.createstatement();int count= stmt.executeUpdate(sql);
ResultSet rs=stmt.executeQuery(sql);

Statement用于執行DML

int count = stmt.executeUpdate(sq1);

Statement用于執行DQL

ResultSet rs =stmt.executeQuery(sql);

5. ResultSet接口?

Statement用于執行DQL

ResultSet rs =stmt.executeQuery(sql);

執行查詢SQL語句后返回的結果集,由 ResultSet接口接收。

常用處理方式:遍歷/判斷是否有結果

String sql="select *from emp";
ResultSet rsstmt.executeQuery(sql);

查詢結果存放在ResultSet對象的一系列行中

  • ResultSet對象的最初位置在行首
  • ResultSet.next()方法用來在行間移動
  • ResultSet.getXXX()方法用來取得字段的內容

遍歷ResultSet

while(rs.next()){
int empno = rs.getInt("empno");
String ename = rs.getstring("ename")System.out.println(empno+","+ename);
}

6. 關閉并釋放資源?

數據庫操作執行完畢以后要釋放相關資源

  • Connection?
  • Statement
  • ResultSet
rs.close();
stmt.close();
Conn.close();

三、測試

1. 連接測試

public class TestConn {public static void main(String[] args) throws ClassNotFoundException, SQLException {// 1. 加載驅動 com.mysql.cj.jdbc.Driver.classClass.forName("com.mysql.cj.jdbc.Driver");// 2. 獲取連接對象 urlString url = "jdbc:mysql://localhost:3306/myhomework03?serverTimezone=GMT";String user = "root";String pwd = "123456";Connection conn = DriverManager.getConnection(url, user, pwd);// 測試System.out.println(conn);// 3. 釋放資源conn.close();}

測試成功

2. 添加測試

public class TestAdd {public static void main(String[] args) throws SQLException, ClassNotFoundException {// 1. 加載驅動Class.forName("com.mysql.cj.jdbc.Driver");// 2. 獲取連接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myhomework03?serverTimezone=GMT","root", "123456");// 3. 創建一條sql語句String sql = "insert into student(sname,birthday,ssex,classid) values('凹凸曼','1999-4-4','男',1)";// 3.1 創建執行sql語句的對象Statement statement = conn.createStatement();// 3.2 執行sql語句int ret = statement.executeUpdate(sql);// 邏輯if (ret > 0) {System.out.println("添加成功");} else {System.out.println("添加失敗");}// 4. 釋放資源 JDBC資源都是先獲取的后釋放statement.close();conn.close();}

?測試成功

3. 修改測試

public class TestUpdate {public static void main(String[] args) throws ClassNotFoundException, SQLException {Scanner input = new Scanner(System.in);// 1. 加載驅動Class.forName("com.mysql.cj.jdbc.Driver");// 2. 獲取連接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myhomework03?serverTimezone=GMT","root", "123456");// 3. sql語句System.out.println("要修改哪個學生,請寫出編號:");int sid = input.nextInt();System.out.println("修改學生姓名:");String sname = input.next();System.out.println("修改學生生日(yyyy-MM-dd):");String bir = input.next();System.out.println("修改學生性別:");String sex = input.next();System.out.println("修改學生班級編號:");int classid = input.nextInt();String sql = "update student set sname='" + sname + "',birthday='" + bir + "'," + "ssex='" + sex + "',classid="+ classid + " where sid =" + sid;Statement statement = conn.createStatement();int ret = statement.executeUpdate(sql);if (ret > 0) {System.out.println("修改成功");} else {System.out.println("修改失敗");}// 釋放資源statement.close();conn.close();}

?測試成功

4.?查詢測試

public static void main(String[] args) throws ClassNotFoundException, SQLException {// 1. 加載驅動Class.forName("com.mysql.cj.jdbc.Driver");// 2. 獲取連接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myhomework03?serverTimezone=GMT", "root","123456");// 3. sqlString sql = "select birthday,sid,classid,sname,ssex from student";Statement statement = conn.createStatement();ResultSet rs = statement.executeQuery(sql);// 解析結果集while (rs.next()) {
//					int sid = rs.getInt(1); // jdbc相關索引都是從1開始
//					String sname = rs.getString(2);
//					Date bir = rs.getDate(3);
//					String sex = rs.getString(4);
//					int classid = rs.getInt(5);// 推薦int sid = rs.getInt("sid");Date bir = rs.getDate("birthday");String sname = rs.getString("sname");String sex = rs.getString("ssex");int classid = rs.getInt("classid");System.out.println(sid + sname + bir + sex + classid);}// 4.釋放資源rs.close();statement.close();conn.close();}

四、不同數據庫廠商實現-MySQL和Oracle?

MySQL實現

  1. 下載對應的數據庫驅動jar包 mysql-connector-java-5.0.4-bin.jar
  2. 將驅動jar包加載到項目中 Eclipse:BuildPath
  3. 加載驅動類 Class.forName(“com.mysql.jdbc.Driver”)

Oracle實現

  1. 下載對應的數據庫驅動jar包 ojdbc6.jar/ojdbc14.jar
  2. 將驅動jar包加載到項目中 Eclipse:BuildPath
  3. 加載驅動類 Class.forName(“oracle.jdbc.OracleDriver”)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38930.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38930.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38930.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

顯卡簡介

顯卡是計算機系統中一個重要的組成部分,它負責處理圖形和視頻輸出。顯卡的性能直接影響到計算機的圖形處理能力,因此在游戲、視頻編輯、3D渲染等需要高性能圖形處理的應用中,顯卡的選擇至關重要。本文將從顯卡的基本概念、性能指標、市場現狀…

【Node.JS】入門

文章目錄 Node.js的入門涉及對其基本概念、特點、安裝、以及基本使用方法的了解。以下是對Node.js入門的詳細介紹: 一、Node.js基本概念和特點 定義:Node.js是一個基于Chrome V8引擎的JavaScript運行環境,它使得JavaScript能夠運行在服務器…

【鴻蒙學習筆記】基礎組件Progress:進度條組件

官方文檔:Progress 目錄標題 作用最全屬性迭代追加進度賦值風格樣式 作用 進度條組件 最全屬性迭代追加 Progress({ value: 20, total: 100, type: ProgressType.Linear }).color(Color.Green)// 顏色.width(200)// 大小.height(50)// 高度.value(50)// 進度可更…

視頻轉音頻:怎樣提取視頻中的音頻?6個提取音頻的小技巧(建議收藏)

怎樣提取視頻中的音頻?當我們想從視頻中提取出聲音時,通常會遇到很多問題。無論是想單獨提取出視頻里的音頻,還是把它轉成方便儲存或者分享的音頻格式,這都會涉及到視頻轉音頻的一個需求。因此,在這篇指南里&#xff0…

Spring Cloud - 項目搭建

1、新建maven項目 新建maven項目,該項目為主項目 1、新建maven項目 2、設置項目類型 3、選擇項目原型 4、設置參數 5、等著完成 2、設置項目信息 1、右鍵,項目屬性 2、設置jdk版本 3、選擇jdk17 4、修改編譯版本 5、右鍵項目,選擇maven->u…

【吊打面試官系列-MyBatis面試題】模糊查詢 like 語句該怎么寫?

大家好&#xff0c;我是鋒哥。今天分享關于 【模糊查詢 like 語句該怎么寫?】面試題&#xff0c;希望對大家有幫助&#xff1b; 模糊查詢 like 語句該怎么寫? 第 1 種&#xff1a;在 Java 代碼中添加 sql 通配符。 string wildcardname “%smi%”; list<name> names …

CDH安裝和配置流程

這份文件是一份關于CDH&#xff08;Clouderas Distribution Including Apache Hadoop&#xff09;安裝的詳細手冊&#xff0c;主要內容包括以下幾個部分&#xff1a; 1. **前言**&#xff1a; - CDH是基于Apache Hadoop的發行版&#xff0c;由Cloudera公司開發。 - 相比…

技術派全局異常處理

前言 全局的異常處理是Java后端不可或缺的一部分&#xff0c;可以提高代碼的健壯性和可維護性。 在我們的開發中&#xff0c;總是難免會碰到一些未經處理的異常&#xff0c;假如沒有做全局異常處理&#xff0c;那么我們返回給用戶的信息應該是不友好的&#xff0c;很抽象的&am…

【一篇文章帶你搞懂--拉鏈表!!!拉鏈表的原理是什么!】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是書生?&#xff0c;今天主要和大家分享一下拉鏈表的原理以及使用,希望對大家有所幫助。 大家可以關注我下方的鏈接更多優質文章供學習參考。 &#x1f49e;&#x1f49e;代碼是你的畫筆&#xff0c;創新是你…

深入解析:WebKit的JavaScript引擎與V8引擎的比較研究

在現代Web開發中&#xff0c;JavaScript引擎是瀏覽器的核心組件之一&#xff0c;它們負責解析和執行JavaScript代碼。WebKit和V8是兩個非常著名的JavaScript引擎&#xff0c;分別被用于不同的瀏覽器和環境中。WebKit的JavaScript引擎最初是Nitro&#xff0c;后來被JavaScriptCo…

【超簡單-Java設計模式1】設計模式的定義、分類及七大設計原則

引言 Java設計模式從入門到精通-設計模式的定義、設計模式分類及七大設計原則 設計模式簡介 在軟件開發中&#xff0c;設計模式是解決常見設計問題的最佳實踐。它們為開發者提供了一種通用的解決方案&#xff0c;使得代碼更加靈活、可復用和可維護。在Java編程語言中&#x…

Flink 運行時架構

Flink 運行時的組件 作業管理器&#xff08;JobManager&#xff09;資源管理器&#xff08;ResourceManager&#xff09;任務管理器&#xff08;TaskManager&#xff09;分發器&#xff08;Dispatch&#xff09; JobManager 控制一個應用程序執行的主進程&#xff0c;也就是說…

LiveNVR監控流媒體Onvif/RTSP用戶手冊-概覽:CPU使用、存儲使用、帶寬使用、負載、內存使用、通道統計

LiveNVR監控流媒體Onvif/RTSP用戶手冊-概覽:CPU使用、存儲使用、帶寬使用、負載、內存使用、通道統計 1、概覽1.1、通道統計1.2、負載1.3、CPU使用1.4、存儲使用1.5、帶寬使用1.6、內存使用 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒體服務 1、概覽 1.1、通道統計 顯示可用通道&…

構建Kylin Cube的藝術:最佳實踐指南

構建Kylin Cube的藝術&#xff1a;最佳實踐指南 Apache Kylin是一個開源的大數據分析引擎&#xff0c;專為大規模數據集提供快速的查詢能力。Kylin的核心是Cube&#xff0c;它是一種多維數據模型&#xff0c;能夠顯著提高查詢性能。然而&#xff0c;設計一個高效的Cube需要考慮…

Lipschitz 連續,絕對連續

1. Lipschitz 連續 經常聽到這個名詞&#xff0c; Lipschitz 連續比普通連續更強&#xff0c;不僅要求函數連續&#xff0c;還要求函數的梯度小于一個正實數。 在單變量實數函數上的定義可以是&#xff1a; 對于定義域內任意兩個 x 1 x_1 x1? and x 2 x_2 x2?, 存在一個…

云計算與生成式AI的技術盛宴!亞馬遜云科技深圳 Community Day 社區活動流程搶先知道!

小李哥最近要給大家分享7月7日在深圳的即將舉辦的亞馬遜云科技生成式AI社區活動Community Day &#xff0c;干貨很多內容非常硬核&#xff0c;不僅有技術分享學習前沿AI技術&#xff0c;大家在現場還可以動手實踐沉浸式體驗大模型&#xff0c;另外參與現場活動還可以領取諸多精…

順序表(C語言詳細版)

1. 線性表 線性表(lina list)是n個具有相同特性的數據元素的有限序列。線性表是一種在實際中廣泛使用的數據結構&#xff0c;常見的線性表&#xff1a;順序表、鏈表、棧、隊列、字符串...... 線性表在邏輯上是線性結構&#xff0c;也就是說連續的一條直線。但是在物理結構上并…

一文匯總全球熱門新聞API

新聞API通過提供快速、準確和全面的新聞內容&#xff0c;已經成為現代社會不可或缺的一部分&#xff0c;對人們的生活、工作環境和科技發展產生了深遠的影響。新聞API使人們能夠快速獲取來自世界各地的實時新聞和信息&#xff0c;提高了信息的可訪問性。通過新聞API&#xff0c…

C++算法學習心得八.動態規劃算法(6)

1.最長遞增子序列&#xff08;300題&#xff09; 題目描述&#xff1a; 給你一個整數數組 nums &#xff0c;找到其中最長嚴格遞增子序列的長度。 子序列是由數組派生而來的序列&#xff0c;刪除&#xff08;或不刪除&#xff09;數組中的元素而不改變其余元素的順序。例如&…

Redis分布式集群部署

目錄 一. 原理簡述 二. 集群配置??????? 2.1 環境準備 2.2 編譯安裝一個redis 2.3 創建集群 2.4 寫入數據測試 實驗一&#xff1a; 實驗二&#xff1a; 實驗三&#xff1a; 實驗四&#xff1a; 添加節點 自動分配槽位 提升節點為master&#xff1a; 實驗…