最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java的JDBC編程使用之連接Mysql數(shù)據(jù)庫(kù)

 更新時(shí)間:2023年12月13日 11:34:49   作者:爆漿曲奇餅~  
這篇文章主要給大家介紹了關(guān)于Java的JDBC編程使用之連接Mysql數(shù)據(jù)庫(kù)的相關(guān)資料,JDBC是一種用于執(zhí)行SQL語(yǔ)句的Java?API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪(fǎng)問(wèn),需要的朋友可以參考下

一、Java的數(shù)據(jù)庫(kù)編程:JDBC

     JDBC,即Java Database Connectivity,java數(shù)據(jù)庫(kù)連接。是一種用于執(zhí)行SQL語(yǔ)句的Java API,它是 Java中的數(shù)據(jù)庫(kù)連接規(guī)范。這個(gè)API由 java.sql.*,javax.sql.* 包中的一些類(lèi)和接口組成,它為Java 開(kāi)發(fā)人員操作數(shù)據(jù)庫(kù)提供了一個(gè)標(biāo)準(zhǔn)的API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪(fǎng)問(wèn)。    

二、JDBC工作原理

JDBC 為多種關(guān)系數(shù)據(jù)庫(kù)提供了統(tǒng)一訪(fǎng)問(wèn)方式,作為特定廠(chǎng)商數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)API的一種高級(jí)抽象,它主要包 含一些通用的接口類(lèi)。

JDBC訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)層次結(jié)構(gòu): 

JDBC優(yōu)勢(shì):

  • Java語(yǔ)言訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)操作完全面向抽象接口編程
  • 開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用不用限定在特定數(shù)據(jù)庫(kù)廠(chǎng)商的API
  • 程序的可移植性大大增強(qiáng)

三、JDBC使用

  • 準(zhǔn)備數(shù)據(jù)庫(kù)驅(qū)動(dòng)包,并添加到項(xiàng)目的依賴(lài)中:

       在項(xiàng)目中創(chuàng)建文件夾lib,并將依賴(lài)包mysql-connector-java-5.1.47.jar復(fù)制到lib中。再配置該jar 包到本項(xiàng)目的依賴(lài)中:右鍵點(diǎn)擊項(xiàng)目Open Module Settings,在Modules中,點(diǎn)擊項(xiàng)目,配置 Dependencies,點(diǎn)擊+,JARS or Directories,將該lib文件夾配置進(jìn)依賴(lài)中,表示該文件夾下的 jar包都引入作為依賴(lài)。

  •  建立數(shù)據(jù)庫(kù)連接

    MySQL數(shù)據(jù)連接的URL參數(shù)格式如下:
jdbc:mysql://服務(wù)器地址:端口/數(shù)據(jù)庫(kù)名?參數(shù)名=參數(shù)值

// 加載JDBC驅(qū)動(dòng)程序:反射,這樣調(diào)用初始化com.mysql.jdbc.Driver類(lèi),即將該類(lèi)加載到JVM方法
區(qū),并執(zhí)行該類(lèi)的靜態(tài)方法塊、靜態(tài)屬性。
Class.forName("com.mysql.jdbc.Driver");

// 創(chuàng)建數(shù)據(jù)庫(kù)連接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?
user=root&password=root&useUnicode=true&characterEncoding=UTF-8");
  • 創(chuàng)建操作命令(Statement)
//3.構(gòu)造一個(gè)Sql
 String sql =" insert into stu(id,name,age) values(1,zhang,3)";

//需要把 Sql語(yǔ)句轉(zhuǎn)化為對(duì)象
 PreparedStatement statement = connection.prepareStatement(sql);
  • 使用操作命令來(lái)執(zhí)行SQL
// 查詢(xún)操作
preparedStatement.executeQuery();

// 新增、修改、刪除操作
preparedStatement.executeUpdate();
  • 處理結(jié)果集ResultSet.
    //接受結(jié)果集合         
     ResultSet resultSet = statement.executeQuery();
        //結(jié)果集遍歷
        while (resultSet.next()){
            //移動(dòng)光標(biāo)
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            int age = resultSet.getInt("age");
            System.out.println(id+" "+name+" "+age+" ");
        }
  • 釋放資源
try {
    if(resultSet != null){
        resultSet.close();
   }
    if(preparedStatement != null){
        preparedStatement.close();
   }
    if(connection != null){
        connection.close();
   }
} catch (SQLException e) {
    e.printStackTrace();
    throw new RuntimeException("數(shù)據(jù)庫(kù)錯(cuò)誤");
}

四、JDBC使用步驟總結(jié)

1. 創(chuàng)建數(shù)據(jù)庫(kù)連接Connection

2. 創(chuàng)建操作命令Statement

3. 使用操作命令來(lái)執(zhí)行SQL

4. 處理結(jié)果集ResultSet

5. 釋放資源

五、JDBC常用接口和類(lèi)

5.1 JDBC API

在Java JDBC編程中對(duì)數(shù)據(jù)庫(kù)的操作均使用JDK自帶的API統(tǒng)一處理,通常與特定數(shù)據(jù)庫(kù)的驅(qū)動(dòng)類(lèi)是完全 解耦的。所以掌握J(rèn)ava JDBC API (位于 java.sql 包下) 即可掌握J(rèn)ava數(shù)據(jù)庫(kù)編程。

5.2 數(shù)據(jù)庫(kù)連接Connection

Connection接口實(shí)現(xiàn)類(lèi)由數(shù)據(jù)庫(kù)提供,獲取Connection對(duì)象通常有兩種方式:

  • 一種是通過(guò)DriverManager(驅(qū)動(dòng)管理類(lèi))的靜態(tài)方法獲?。?/li>
    // 加載JDBC驅(qū)動(dòng)程序
Class.forName("com.mysql.jdbc.Driver");
// 創(chuàng)建數(shù)據(jù)庫(kù)連接
Connection connection = DriverManager.getConnection(url);
  • 一種是通過(guò)DataSource(數(shù)據(jù)源)對(duì)象獲取。實(shí)際應(yīng)用中會(huì)使用DataSource對(duì)象
 DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://localhost:3306/db1?serverTimezone=UTC");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

以上兩種方式的區(qū)別是:

   1. DriverManager類(lèi)來(lái)獲取的Connection連接,是無(wú)法重復(fù)利用的,每次使用完以后釋放資源 時(shí),通過(guò)connection.close()都是關(guān)閉物理連接。

   2. DataSource提供連接池的支持。連接池在初始化時(shí)將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫(kù)連接,這些連接 是可以復(fù)用的,每次使用完數(shù)據(jù)庫(kù)連接,釋放資源調(diào)用connection.close()都是將 Conncetion連接對(duì)象回收。

5.3 Statement對(duì)象

Statement對(duì)象主要是將SQL語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)中。JDBC API中主要提供了三種Statement對(duì)象

主要掌握兩種執(zhí)行SQL的方法:

  • executeQuery() 方法執(zhí)行后返回單個(gè)結(jié)果集的,通常用于select語(yǔ)句
  • executeUpdate()方法返回值是一個(gè)整數(shù),指示受影響的行數(shù),通常用于update、insert、delete 語(yǔ)句

5.4 ResultSet對(duì)象

ResultSet對(duì)象它被稱(chēng)為結(jié)果集,它代表符合SQL語(yǔ)句條件的所有行,并且它通過(guò)一套getXXX方法提供 了對(duì)這些行中數(shù)據(jù)的訪(fǎng)問(wèn)。

ResultSet里的數(shù)據(jù)一行一行排列,每行有多個(gè)字段,并且有一個(gè)記錄指針,指針?biāo)傅臄?shù)據(jù)行叫做當(dāng) 前數(shù)據(jù)行,我們只能來(lái)操作當(dāng)前的數(shù)據(jù)行。我們?nèi)绻胍〉媚骋粭l記錄,就要使用ResultSet的next() 方法 ,如果我們想要得到ResultSet里的所有記錄,就應(yīng)該使用while循環(huán)。

六、示例代碼 

import com.mysql.cj.jdbc.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class TestJDBC {
    public static void main(String[] args) throws SQLException {
        // MysqlDataSource dataSource = new MysqlDataSource();
        //dataSource.setUrl();
        //1. 創(chuàng)建數(shù)據(jù)源,即獲取數(shù)據(jù)庫(kù)的位置
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://localhost:3306/db1?serverTimezone=UTC");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        // 2 .和數(shù)據(jù)庫(kù)服務(wù)器建立連接
        Connection connection = dataSource.getConnection();

        //3.構(gòu)造一個(gè)Sql
        String sql =" insert into stu(id,name,age) values(?,?,?)";
      //  String sql =" insert into stu(id,name,age) values(1,zhang,3)";
        //需要把 Sql語(yǔ)句轉(zhuǎn)化為對(duì)象
        PreparedStatement statement = connection.prepareStatement(sql);

        statement.setInt(1,66);
        statement.setString(2,"a");
        statement.setInt(3,7);
        //4.構(gòu)造好的sql 發(fā)送給服務(wù)器;
       int n = statement.executeUpdate();
        System.out.println("n:"+ n);

        //5.最后一步 釋放資源
        statement.close();
        connection.close();
    }
}

總結(jié)

到此這篇關(guān)于Java的JDBC編程使用之連接Mysql數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān) JDBC連接Mysql數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring中@Lazy注解的使用示例教程

    Spring中@Lazy注解的使用示例教程

    Spring在應(yīng)用程序上下文啟動(dòng)時(shí)去創(chuàng)建所有的單例bean對(duì)象, 而@Lazy注解可以延遲加載bean對(duì)象,即在使用時(shí)才去初始化,這篇文章主要介紹了Spring中@Lazy注解的使用,需要的朋友可以參考下
    2023-06-06
  • Mybatis中SqlMapper配置的擴(kuò)展與應(yīng)用詳細(xì)介紹(1)

    Mybatis中SqlMapper配置的擴(kuò)展與應(yīng)用詳細(xì)介紹(1)

    這篇文章主要介紹了Mybatis中SqlMapper配置的擴(kuò)展與應(yīng)用(1)的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • Mybatis的一級(jí)緩存和二級(jí)緩存原理分析與使用

    Mybatis的一級(jí)緩存和二級(jí)緩存原理分析與使用

    mybatis-plus 是一個(gè) Mybatis 的增強(qiáng)工具,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生,這篇文章帶你了解Mybatis的一級(jí)和二級(jí)緩存
    2021-11-11
  • Java源碼解析之平衡二叉樹(shù)

    Java源碼解析之平衡二叉樹(shù)

    在上一章的文章中,我們講到了二叉排序樹(shù),它很好的平衡了插入與查找的效率,但二叉排序樹(shù)如果不平衡,那么查找效率就會(huì)大大降低,今天要講的這個(gè)平衡二叉樹(shù)就是一種解決這個(gè)問(wèn)題的方法.需要的朋友可以參考下
    2021-05-05
  • IDEA初次拉取GitLab項(xiàng)目過(guò)程

    IDEA初次拉取GitLab項(xiàng)目過(guò)程

    本文介紹了如何在計(jì)算機(jī)上安裝Git工具,并如何使用GitLab獲取訪(fǎng)問(wèn)令牌,同時(shí),還提供了如何添加GitLab服務(wù)、第一次代碼準(zhǔn)備以及遇到的一些常見(jiàn)問(wèn)題及其解決方案
    2026-01-01
  • 解決maven update project 后項(xiàng)目jdk變成1.5的問(wèn)題

    解決maven update project 后項(xiàng)目jdk變成1.5的問(wèn)題

    下面小編就為大家?guī)?lái)一篇解決maven update project 后項(xiàng)目jdk變成1.5的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起 小編過(guò)來(lái)看看吧
    2016-11-11
  • SpringCloud可視化鏈路追蹤系統(tǒng)Zipkin部署過(guò)程

    SpringCloud可視化鏈路追蹤系統(tǒng)Zipkin部署過(guò)程

    這篇文章主要介紹了SpringCloud可視化鏈路追蹤系統(tǒng)Zipkin部署過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 最長(zhǎng)重復(fù)子數(shù)組 findLength示例詳解

    最長(zhǎng)重復(fù)子數(shù)組 findLength示例詳解

    今天給大家分享一道比較常問(wèn)的算法面試題,最長(zhǎng)重復(fù)子數(shù)組 findLength,文中給大家分享解題思路,結(jié)合示例代碼介紹的非常詳細(xì),需要的朋友參考下吧
    2023-08-08
  • Java?Object類(lèi)equals方法

    Java?Object類(lèi)equals方法

    這篇文章主要介紹了Java?Object類(lèi)equals方法,Object類(lèi)位于java.lang包中,java.lang包包含著Java最基礎(chǔ)和核心的類(lèi),在編譯時(shí)會(huì)自動(dòng)導(dǎo)入,下文更多相關(guān)介紹,需要的小伙伴可以參考一下
    2022-04-04
  • Springboot如何使用OSHI獲取和操作系統(tǒng)和硬件信息

    Springboot如何使用OSHI獲取和操作系統(tǒng)和硬件信息

    這篇文章主要介紹了Springboot如何使用OSHI獲取和操作系統(tǒng)和硬件信息問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評(píng)論

鹤壁市| 南岸区| 威海市| 佳木斯市| 桑植县| 梁平县| 青铜峡市| 龙游县| 保山市| 克山县| 确山县| 合川市| 淳化县| 昆山市| 睢宁县| 克什克腾旗| 普兰县| 武安市| 秦皇岛市| 龙游县| 乌拉特后旗| 广南县| 两当县| 平利县| 高要市| 宁都县| 姜堰市| 武强县| 赤城县| 台北县| 隆昌县| 石狮市| 曲松县| 灌云县| 九龙县| 重庆市| 武川县| 永兴县| 永济市| 兴国县| 韶关市|