JDBC+MySQL入門增刪改查案例

      網(wǎng)友投稿 792 2022-05-29

      目錄

      前言

      案例分析

      核心思路拆解

      案例涉及知識點

      第一關(guān) 創(chuàng)建數(shù)據(jù)庫和項目

      創(chuàng)建數(shù)據(jù)庫

      創(chuàng)建項目

      第二關(guān) JDBC插入和查詢

      預(yù)備工作

      單個插入

      批量插入

      查詢數(shù)據(jù)

      JDBC修改和刪除

      修改數(shù)據(jù)

      刪除數(shù)據(jù)

      總結(jié)與拓展

      總結(jié)

      拓展

      前言

      hello我是bigsai,今天咱們進行JDBC+Mysql實戰(zhàn),非常適合初入門的小伙伴打開新的世界。實現(xiàn)一個增刪改查(curd)的例子。有用的話先再觀看、帥哥靚女養(yǎng)成好習(xí)慣!沒用再把小贊贊回收也不遲嘿嘿

      在這個案例進行之前,你要確保自己電腦上擁有MySQL和IDEA編譯器,另外還要安裝MySQL數(shù)據(jù)庫連接管理工具Navicat。方能進行以下的操作。

      如果以前沒見過或者使用過也不要緊,本課程提供傻瓜式教學(xué)你只需跟著我的要求來包成功包會。

      通過本翩你可以掌握以下內(nèi)容:

      MySQL數(shù)據(jù)庫的創(chuàng)建

      JDBC+MySQL項目的創(chuàng)建

      JDBC成功對MySQL增刪改查

      案例分析

      本次案例到底是個什么結(jié)果呢?本案例實現(xiàn)一個學(xué)生信息的管理,即學(xué)生個人信息的增刪改查。

      核心思路拆解

      我們該如何設(shè)計這個項目呢?

      別急別急,聽我慢慢說道。對于本案例的實戰(zhàn),旨在實現(xiàn)用Java語言(JDBC)操作MySQL,核心的主軸是MySQL的數(shù)據(jù),所以我們從MySQL為起始點入手,整個案例實現(xiàn)的流程大致可以分為:

      分析設(shè)計需求、創(chuàng)建MySQL數(shù)據(jù)庫和表

      創(chuàng)建Java項目,添加JDBC以及Junit單元測試的依賴

      編寫項目代碼,實現(xiàn)JDBC增刪改查案例

      單元測試

      而對于JDBC編程來說,它需要與MySQL進行連接交互,它也有一定流程順序需要遵守,通常為以下6個流程:

      1:注冊驅(qū)動 (僅僅做一次)

      2:建立連接(Connection)

      3:創(chuàng)建運行SQL的語句(Statement)

      4:運行語句

      5:處理運行結(jié)果(ResultSet)

      6:釋放資源

      案例涉及知識點

      本案例主要涉及的知識點為MySQL和JDBC。而這兩個知識點是Java Web開發(fā)非常常用的技術(shù),下面我就給你介紹一番。

      MySQL :

      MySQL是當前非常流行的數(shù)據(jù)庫之一,且免費開源,數(shù)據(jù)庫是用來儲存數(shù)據(jù)的,就數(shù)據(jù)格式而言,有關(guān)系型數(shù)據(jù)和非關(guān)系型數(shù)據(jù),MySQL是一種關(guān)系型數(shù)據(jù)庫。就web方面,MySQL是最好的RDBMS**(關(guān)系數(shù)據(jù)庫管理系統(tǒng):Relational Database Management System)**之一:MySQL的sql語句是常用關(guān)系數(shù)據(jù)庫的標準之一,具有速度快、體積小、成本低等優(yōu)勢,是中小企業(yè)以及學(xué)習(xí)使用的最好方式之一。

      在Java中利用JDBC可以快速在應(yīng)用中使用MySQL。除了DDL**(數(shù)據(jù)庫模式定義語言:Data Definition Language)和DML(數(shù)據(jù)操縱語言:Data Manipulation Language)**等傳統(tǒng)操作外,你可以通過JDBC使用MySQL的大部分功能。并且MySQL提供索引優(yōu)化查詢速度,利用B+樹或哈希方式的索引滿足不同場景查詢性能的要求。還提供視圖、函數(shù)、約束、觸發(fā)器等功能能夠使得數(shù)據(jù)庫滿足更多的場景使用。而MySQL提供的事務(wù)、回滾等機制能夠使得數(shù)據(jù)在安全性一致性方面有更大的保證。

      JDBC

      Java數(shù)據(jù)庫連接,(Java Database Connectivity,簡稱JDBC)是Java語言中用來規(guī)范客戶端程序如何來訪問數(shù)據(jù)庫的應(yīng)用程序接口(位于jdk的java.sql中)。我們通常說的JDBC是面向關(guān)系型數(shù)據(jù)庫的,提供了諸如查詢、更新、刪除、增加數(shù)據(jù)庫中數(shù)據(jù)的方法。在使用時候需要導(dǎo)入具體的jar包,不同數(shù)據(jù)庫需要導(dǎo)入的jar包不同。

      而JDBC主要有以下API:

      DriverManager:負責加載不同驅(qū)動程序(Driver),并根據(jù)不同的請求,向調(diào)用者返回相應(yīng)的數(shù)據(jù)庫連接(Connection)。

      Driver:驅(qū)動程序,會將自身加載到DriverManager中去,并處理相應(yīng)的請求并返回相應(yīng)的數(shù)據(jù)庫連接(Connection)。

      Connection:數(shù)據(jù)庫連接,負責與數(shù)據(jù)庫進行通訊,SQL執(zhí)行以及事務(wù)處理都是在某個特定Connection環(huán)境中進行的。可以產(chǎn)生用以執(zhí)行SQL的Statement、PreparedStatement等。

      **Statement:**用以執(zhí)行SQL查詢和更新(針對靜態(tài)SQL語句和單次執(zhí)行)。

      PreparedStatement:用以執(zhí)行包含動態(tài)參數(shù)的SQL查詢和更新(在服務(wù)器端編譯,允許重復(fù)執(zhí)行以提高效率)繼承Statement,本案例使用PreparedStatement。

      **CallableStatement:**用以調(diào)用數(shù)據(jù)庫中的存儲過程。

      **SQLException:**代表在數(shù)據(jù)庫連接的建立和關(guān)閉和SQL語句的執(zhí)行過程中發(fā)生了例外情況(即錯誤)。

      我想現(xiàn)在你對MySQL和JDBC有了更清楚的認識吧,MySQL它就是一個數(shù)據(jù)庫供我們使用,而JDBC就是Java使用MySQL的一個工具和橋梁,結(jié)合上面知識,下面我們就開始實戰(zhàn)吧!

      JDBC+MySQL入門增刪改查案例

      第一關(guān) 創(chuàng)建數(shù)據(jù)庫和項目

      在實戰(zhàn)之前,需要把數(shù)據(jù)庫和項目創(chuàng)建好才能進行JDBC的增刪改查。

      創(chuàng)建數(shù)據(jù)庫

      我們使用Navicat創(chuàng)建數(shù)據(jù)庫,你可能好奇Navicat到底是個什么樣的工具,有何作用?

      其實Navicat是一個數(shù)據(jù)庫管理工具,它并不能直接修改MySQL的數(shù)據(jù)和結(jié)構(gòu),而是經(jīng)過你的可視化界面操作它幫你執(zhí)行sql代碼,因為考慮到如果直接讓你用sql操作數(shù)據(jù)庫,可能不太直觀并且上手難度挺大的,通過Navicat管理數(shù)據(jù)庫可以清晰看到數(shù)據(jù)庫結(jié)構(gòu)、數(shù)據(jù)、設(shè)置情況也能夠很容易的進行更改,大大提升開發(fā)效率一定程度減少錯誤??梢詤⒖枷聢D:

      打開Navicat連接數(shù)據(jù)庫,連接成功的數(shù)據(jù)庫右擊創(chuàng)建數(shù)據(jù)庫,數(shù)據(jù)庫名稱為:boxuegu,字符集和排序規(guī)則使用其默認即可。

      然后打開boxuegu數(shù)據(jù)庫,在表的欄目右擊新建表,設(shè)置id,name,age,high四個字段,其中id設(shè)為主鍵且自增。

      保存時候把這張表命名為student,代指學(xué)生表。這樣,學(xué)生表就添加完成了。其中id為自增主鍵,插入的時候不插入id會自動遞增插入,name就是學(xué)生的姓名,age表示學(xué)生年齡。high表示學(xué)生身高,我們用這幾個字段表示一個學(xué)生信息情況。

      當然,如果你不喜歡使用數(shù)據(jù)庫管理工具進行這樣操作,更喜歡控制臺或者命令行創(chuàng)建數(shù)據(jù)庫以及表格,當然也是可以的:

      SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for students -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `students` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) NOT NULL, `high` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      這樣我們數(shù)據(jù)庫以及表就創(chuàng)建完成啦,我們下面就要用JDBC對MySQL的這張表進行增刪改查實戰(zhàn)。讓你動手操作數(shù)據(jù)。

      創(chuàng)建項目

      我們創(chuàng)建java項目要引入JDBC的依賴,這里我為了更簡單不讓你去自己找JDBC的jar包,使用Maven的方式引入jar包,所以我們使用IDEA創(chuàng)建Maven項目。

      首先打開IDEA,創(chuàng)建Maven項目,點擊next。

      接著填寫GroupId和ArtifactId可以自行填寫,本案例填寫com和JDBCTest,點擊next。

      緊接著選擇磁盤中一個文件夾作為項目的路徑,點擊finish項目即創(chuàng)建成功。接著我們需要添加MySQL的JDBC依賴以及Junit單元測試依賴,在項目pom.xml文件中添加以下內(nèi)容:

      mysql mysql-connector-java 5.1.49 junit junit 4.12 test

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      然后項目就成功創(chuàng)建啦,緊接著創(chuàng)建以下類:

      main的java目錄下:sqlmanage類,用于編寫sql相關(guān)語句

      main的java目錄下:student類,表示student實體與MySQL的student

      test的java目錄下:test類,用于編寫單元測試。

      有了JDBC的環(huán)境只需編寫正確的代碼即可運行!對于項目最終的目錄是這樣的:

      第二關(guān) JDBC插入和查詢

      我們上面有講過進行JDBC操作的6個步驟,但有些步驟不需要重復(fù)進行,比如加載驅(qū)動、建立連接、關(guān)閉等可以復(fù)用。此外,我們在項目中將MySQL中的數(shù)據(jù)和Java中的對象進行映射(即MySQL表中每一條記錄可以生成一個Java對象),項目中函數(shù)的設(shè)計基于Java對象而非MySQL中數(shù)據(jù)字段,降低項目中各模塊的耦合性。

      預(yù)備工作

      首先在student 類中編寫以下內(nèi)容,該類與MySQL數(shù)據(jù)庫的student表對應(yīng)。

      public class student { private int id;//與student表得id對應(yīng) private String name;//與student表得name對應(yīng) private int age;//年齡與student表得age對應(yīng) private int high;//身高與student表high對應(yīng) //帶id構(gòu)造方法(查詢時使用) public student(int id, String name, int age, int high) { this.id = id; this.name = name; this.age = age; this.high = high; } //不帶id得構(gòu)造方法(插入時候使用) public student(String name, int age, int high) { this.name = name; this.age = age; this.high = high; } //toString()方法,控制臺打印測試使用 @Override public String toString() { return "student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", high=" + high + "}\n"; } //get set 方法,設(shè)置值,取值使用 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getHigh() { return high; } public void setHigh(int high) { this.high = high; } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      緊接著處理sqlmanage類,我們將JDBC的一些操作封裝到這里面。在初始化函數(shù)中進行注冊驅(qū)動、建立連接的操作。在sqlmanage中編寫以下內(nèi)容:

      import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class sqlmanage { private Connection con=null;//數(shù)據(jù)庫連接,從DriverManager的方法獲得,用以產(chǎn)生執(zhí)行sql的PreparedStatement public sqlmanage() throws SQLException, ClassNotFoundException { //step1 加載數(shù)據(jù)庫驅(qū)動 Class.forName("com.mysql.jdbc.Driver"); System.out.println("數(shù)據(jù)庫驅(qū)動加載成功"); //step2 連接數(shù)據(jù)庫 this.con = DriverManager.getConnection("jdbc:mysql://localhost:3306/boxuegu?useSSL=false","root","bigsai66"); System.out.println("數(shù)據(jù)庫連接成功"); } public void close() throws SQLException { this.con.close();; } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      其中通過Connection建立連接,Connection是一個接口類。其功能是與數(shù)據(jù)庫進行連接(會話)。建立Connection接口類對象:

      Connection conn =DriverManager.getConnection(url, user, password);

      其中url的格式要求為:

      jdbc:mysql://:/?property1=value1&property2=value2…

      host為主機地址或者域名,本地可以用localhost或127.0.0.1.

      database_name為MySQL中創(chuàng)建數(shù)據(jù)庫名,本案例中數(shù)據(jù)庫名為boxuegu。

      property用來配置一些例如編碼、時區(qū)等屬性。

      其中user為MySQL登錄用戶名,password為MySQL登錄密碼。

      單個插入

      MySQL插入的sql語句很簡單:

      insert into 表名 ( 字段1, 字段2,...字段n) value ( 值1, 值2,...值n );

      1

      2

      3

      4

      我們JDBC中進行插入操作使用的sql滿足上述規(guī)范,在sqlmanage中編寫**insertStudent(student student)**函數(shù)用來插入單個學(xué)生記錄,具體函數(shù)如下:

      public void insertStudent(student student) throws SQLException { //創(chuàng)建sql語句 String sql="insert into student(name,age,high)value(?,?,?)"; //PreparedStatement能夠?qū)QL語句進行預(yù)編譯,這樣防止了 SQL注入 提高了安全性。 PreparedStatement ps = con.prepareStatement(sql); ps.setString(1,student.getName()); ps.setInt(2,student.getAge()); ps.setInt(3,student.getHigh()); //執(zhí)行 sql 因為這里插入操作就不對結(jié)處理 ps.executeUpdate(); ps.close(); }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      在test類中的編寫**insertTest()**函數(shù),用來測試插入三條學(xué)生的記錄:

      @Test public void insertTest() throws SQLException, ClassNotFoundException { sqlmanage sqlmanage=new sqlmanage(); sqlmanage.insertStudent(new student("bigsai",22,180)); sqlmanage.insertStudent(new student("bigpian",21,165)); sqlmanage.insertStudent(new student("doudou",20,160)); }

      1

      2

      3

      4

      5

      6

      7

      執(zhí)行完畢刷新navicat中student表你會發(fā)現(xiàn)數(shù)據(jù)被成功插入了:

      批量插入

      如果同時有100組數(shù)據(jù)或者更多若干組數(shù)據(jù)讓你插入你會怎么操作?

      循環(huán)一個一個的插入

      批處理一次插入多個

      批量處理相比循環(huán)的單個單個處理起來省了很多時間,提高了系統(tǒng)效率。所以當遇到較多數(shù)據(jù)時可以選擇多個插入。

      批量插入實現(xiàn)也很容易,在sqlmanage中編寫**insertStudents(student students[])**函數(shù)用來批量插入學(xué)生記錄:

      public void insertStudents(student students[]) throws SQLException { this.con.setAutoCommit(false);//不自動提交 String sql="insert into student(name,age,high)value(?,?,?)"; PreparedStatement ps =con.prepareStatement(sql); for(int i=0;i

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      其中:

      con.setAutoCommit(false)意為不自動提交,因為我們在批量處理的時候一般手動提交提高效率。

      主要通過PreparedStatement對象的addBatch()進行多組插入而未提交。

      如果為設(shè)置不自動提交當執(zhí)行executeBatch()時就會提交,但為了減小提交次數(shù)已經(jīng)設(shè)置不自動提交。當且僅當con.commit()執(zhí)行才會真的提交到MySQL中。

      接著在test單元測試中編寫insertStudentsTest()函數(shù)進行測試批量插入:

      @Test public void insertStudentsTest() throws SQLException, ClassNotFoundException { sqlmanage sqlmanage=new sqlmanage(); student students[]=new student[5]; for(int i=0;i

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      執(zhí)行完畢后你可以看到數(shù)據(jù)被成功插入MySQL中:

      查詢數(shù)據(jù)

      查詢的使用頻率要遠比其他的操作多,雖然有些復(fù)雜表的查詢可能會讓人比較頭疼,但基礎(chǔ)的sql查詢還是比較簡單,其語法格式為:

      select 字段1,字段2,…… from 表名 [where 條件] //方式1 select * from 表名 [where 條件] //方式2

      1

      2

      其中如果沒有where條件那么就默認查詢整張表的內(nèi)容,我們在這里根據(jù)此條件查詢所有記錄:查詢返回年齡小于21歲的所有學(xué)生。

      首先在sqlmanage中編寫**getallstudent()**函數(shù),用來查詢student表中所有age小于21的記錄,并把查詢的數(shù)據(jù)最終以List類型返回:

      public List getallstudent() throws SQLException { Listlist=new ArrayList();//返回的結(jié)果 String sql = "select * from student where age < 21"; PreparedStatement ps = con.prepareStatement(sql); ResultSet resultSet=ps.executeQuery();//結(jié)果集 while(resultSet.next())//遍歷 { int id=resultSet.getInt(1); String name=resultSet.getString(2); int age=resultSet.getInt(3); int high=resultSet.getInt(4); list.add(new student(id,name,age,high)); } ps.close(); return list; }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      在前面講的插入的過程返回值其實不需要特別處理,因為返回是插入成功與否的消息,而在查詢的步驟就要嚴格的跟著JDBC的6個步驟來—因為需要對返回的數(shù)據(jù)進行處理。我們主要通過ResultSet處理返回的數(shù)據(jù)。

      在對ResultSet進行迭代遍歷取值的過程中,通過getXXX(int index)的方法取值并自動轉(zhuǎn)換為java對應(yīng)的數(shù)據(jù)類型。而index為MySQL數(shù)據(jù)庫表格列的編號,也是數(shù)據(jù)在ResultSet中的對應(yīng)序列號。

      通過上面的函數(shù)在test單元測試中編寫selectTest() 測試函數(shù)在控制臺打印從數(shù)據(jù)庫中查詢所有age小于21的記錄:

      @Test public void selectTest() throws SQLException, ClassNotFoundException { sqlmanage sqlmanage=new sqlmanage(); Listlist=sqlmanage.getallstudent(); System.out.println(list.toString()); }

      1

      2

      3

      4

      5

      6

      7

      可以看到數(shù)據(jù)被成功查詢:

      JDBC修改和刪除

      修改數(shù)據(jù)

      對某個確定的記錄修改,我們一般根據(jù)這條信息的主鍵作為條件進行修改。而修改一般都需要條件語句where,否則修改整個表的內(nèi)容。修改的MySQL語句為:

      update 表名 set 字段 = 值 [where條件]; -- 建議都有where: 不然的話會修改每一條數(shù)據(jù)

      1

      這里我們假設(shè)將上述student表中所有age為12的記錄的name設(shè)置為xiaoming。在sqlmanage中編寫**update()**函數(shù)用來進行修改:

      public void update() throws SQLException { String sql = "update student set name='xiaoming' where age=12"; PreparedStatement ps = con.prepareStatement(sql); ps.executeUpdate(); ps.close(); }

      1

      2

      3

      4

      5

      6

      在tes單元測試中編寫**updateTest()**函數(shù)調(diào)用sqlmanage類的update()方法,將student表中所有age為12的記錄的name設(shè)為xiaoming。

      @Test public void updateTest() throws SQLException, ClassNotFoundException { sqlmanage sqlmanage=new sqlmanage(); sqlmanage.update(); }

      1

      2

      3

      4

      5

      刷新Navicat 你會發(fā)現(xiàn)數(shù)據(jù)被成功更新了:

      刪除數(shù)據(jù)

      JDBC刪除也是常用的一種操作,但刪除的操作一定要謹慎,謹防誤刪、多刪等操作。刪除的語句一般都有where條件,否則會刪除所有記錄。刪除的sql語句為:

      delete from 表名 [where條件];

      1

      我們編寫一個按照id刪除記錄的函數(shù),在sqlmanage中編寫deletebyid(int id),該函數(shù)意為根據(jù)id刪除student表中對應(yīng)id的一條記錄:

      public void deletebyid(int id) throws SQLException { String sql = "delete from student where id = ?"; PreparedStatement ps = con.prepareStatement(sql); ps.setInt(1,id); ps.executeUpdate(); ps.close(); }

      1

      2

      3

      4

      5

      6

      7

      這么一個根據(jù)id刪除的函數(shù)就寫好了,我們在test單元測試中編寫**deleteTest()**測試函數(shù)刪除student表中id為1的那條記錄。:

      @Test public void deleteTest() throws SQLException, ClassNotFoundException { sqlmanage sqlmanage=new sqlmanage(); sqlmanage.deletebyid(1); }

      1

      2

      3

      4

      5

      執(zhí)行完成查看數(shù)據(jù)庫發(fā)現(xiàn)id為1的記錄(name為bigsai的記錄)被成功刪除:

      總結(jié)與拓展

      總結(jié)

      好了,本次JDBC+MySQL的增刪改查的案例就到這里了?;仡櫛菊n程你是不是覺得一切好像沒那么難,只需要按部就班就可以完成整個案例。我們回顧一下整個流程:

      創(chuàng)建數(shù)據(jù)庫和表

      創(chuàng)建項目添加JDBC和Junit單元測試依賴

      編寫項目代碼(JDBC 6個步驟)

      單元測試

      每個流程代表一個知識點,其中最重要的就是要熟練掌握JDBC編程的流程了,掌握其方法,如果有所遺忘還得多多回顧。

      拓展

      MySQL本案例只使用了四種基本操作對應(yīng)的sql語句:insert(插入),select(查詢),update(修改),delete(刪除)。如果需要深入學(xué)習(xí)MySQL的話很多方面需要深入挖掘,從sql語句上你還需要去學(xué)習(xí)MySQL復(fù)雜查詢例如關(guān)聯(lián)查詢、分組、排序等。從性能上要關(guān)注MySQL索引類型以及了解其底層數(shù)據(jù)結(jié)構(gòu)與優(yōu)勢。從安全性和數(shù)據(jù)一致性你要去了解學(xué)習(xí)MySQL臟讀、幻讀等以及各種鎖的使用……

      而JDBC算是在Java中一種很原生處理MySQL的方式了,而到后面隨著學(xué)習(xí)的深入你會接觸兩個ORM框架—Mybatis和Hibernate,當然在國內(nèi)Mybatis要更流行一些。這兩個框架是對JDBC的封裝,讓開發(fā)者能夠更容易的在應(yīng)用中使用MySQL等關(guān)系數(shù)據(jù)庫,在Web項目有著廣泛的應(yīng)用,無論是以前的SSH(Spring,Strus2,Hibernate)和現(xiàn)在流行的SSM(Spring,SpringMVC,Mybatis),其作為持久層的框架都是基于對JDBC的封裝處理。所以日后在學(xué)習(xí)新框架同時要記得回顧JDBC的內(nèi)容,多掌握JDBC底層原理!

      好啦,下課!咱們后會有期!

      JDBC MySQL 數(shù)據(jù)庫

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Python學(xué)習(xí)筆記(二十一) Python3集合
      下一篇:華為云媒體質(zhì)量管理最新實踐——“視鏡”
      相關(guān)文章
      久久亚洲精品成人| 亚洲综合在线观看视频| 亚洲AV成人噜噜无码网站| 久久精品国产亚洲av影院| 久久精品国产亚洲av麻豆| 亚洲午夜福利AV一区二区无码| 亚洲伊人久久综合影院| 亚洲精品456播放| 久久亚洲av无码精品浪潮| 亚洲欧洲久久av| 在线亚洲精品福利网址导航| 国产AV无码专区亚洲AV漫画| 久久亚洲色一区二区三区| 亚洲中文字幕久久精品无码喷水| 亚洲欧洲日产国码无码网站| 国产亚洲精品无码成人| 亚洲精品亚洲人成人网| 久久久亚洲精品国产| 亚洲国产二区三区久久| 91精品国产亚洲爽啪在线影院| 亚洲美女自拍视频| 亚洲国产成人精品无码区在线秒播| 亚洲人成黄网在线观看| 亚洲国产成人综合| 亚洲色大成网站www| 国产成人综合亚洲| 亚洲片国产一区一级在线观看| 亚洲色婷婷综合久久| 亚洲v高清理论电影| 亚洲自偷自拍另类图片二区| 亚洲一区二区三区播放在线| 亚洲真人无码永久在线观看| 无码一区二区三区亚洲人妻| 亚洲精品国产高清嫩草影院| 国产亚洲精品精华液| 亚洲视频在线观看免费视频| 亚洲AV色吊丝无码| 精品国产亚洲第一区二区三区| 亚洲日本在线观看视频| 亚洲动漫精品无码av天堂| 久久精品国产亚洲AV电影|