国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
問題內(nèi)容
解決方法
資料來源
首頁 Java 將 Java 連接到 MySQL 資料庫

將 Java 連接到 MySQL 資料庫

Feb 22, 2024 pm 12:58 PM
java應(yīng)用程式 overflow

php小編香蕉為您帶來關(guān)於將Java連接到MySQL資料庫的專題問答。本文將為您解答如何在Java應(yīng)用程式中實現(xiàn)與MySQL資料庫的連接,讓您輕鬆掌握相關(guān)知識,並提升程式設(shè)計技能。無論您是初學(xué)者還是有經(jīng)驗的開發(fā)者,都能從本文中找到適合自己的解決方案,讓資料庫操作變得更有效率、更方便。讓我們一起深入探討吧!

問題內(nèi)容

如何用 java 連線到 mysql 資料庫?

當我嘗試時,我得到

java.sql.sqlexception: no suitable driver found for jdbc:mysql://database/table
    at java.sql.drivermanager.getconnection(drivermanager.java:689)
    at java.sql.drivermanager.getconnection(drivermanager.java:247)

java.lang.classnotfoundexception: com.mysql.jdbc.driver

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver

解決方法

資料來源

drivermanager 是一種相當古老的做事方式。更好的方法是取得 DataSource 物件。可以使用 JNDI 來尋找已為您設(shè)定的應(yīng)用程式伺服器容器:

context context = new initialcontext();
datasource datasource = (datasource) context.lookup("java:comp/env/jdbc/mydb");

…或直接從資料庫驅(qū)動程式實例化和配置一個,例如 com.mysql.cj.jdbc.mysqldatasource (see documentation):

mysqldatasource datasource = new mysqldatasource();
datasource.setuser("scott");
datasource.setpassword("tiger");
datasource.setservername("mydbhost.example.org");

…然後從中取得連接,同上:

connection conn = datasource.getconnection();
statement stmt = conn.createstatement();
resultset rs = stmt.executequery("select id from users");
…
rs.close();
stmt.close();
conn.close();

在現(xiàn)代 java 中,使用 try-with-resources 語法自動關(guān)閉 jdbc 資源(現(xiàn)在為 AutoCloseable)。

try (
    connection conn = datasource.getconnection();
    statement stmt = conn.createstatement();
    resultset rs = stmt.executequery("select id from users");
) {
    …
}

以下是如何安裝 mysql 和 jdbc 以及如何使用它的逐步說明:

  1. Download並安裝mysql伺服器。按照通常的方式做就可以了。每當您更改連接埠號碼時,請記住它。預(yù)設(shè)為 3306。

  2. Download jdbc 驅(qū)動程式並放入類別路徑,解壓縮 zip 檔案並將包含的 jar 檔案放入類別路徑中。特定於供應(yīng)商的 jdbc 驅(qū)動程式是 JDBC API (tutorial here) 的具體實作。

    如果您使用的是eclipse 或netbeans 等ide,則可以透過將jar 檔案作為程式庫新增至專案中的建置路徑,將其新增至類別路徑中屬性。

    如果您在命令控制臺中以「普通」方式執(zhí)行此操作,則需要在執(zhí)行java 應(yīng)用程式時在-cp-classpath 參數(shù)中指定jar 檔案的路徑。

    java -cp .;/path/to/mysql-connector.jar com.example.yourclass

    . 只是將當前目錄新增到類別路徑中,以便它可以找到com.example.yourclass; 是類別路徑分隔符,因為它在視窗。在 unix 和克隆中,應(yīng)使用 :。

    如果您正在開發(fā)基於servlet 的war 應(yīng)用程序,並希望手動管理連接(實際上,這種做法很糟糕),那麼您需要確保jar 最終位於構(gòu)建的/web-inf/lib 中。另請參閱 How to add JAR libraries to WAR project without facing java.lang.ClassNotFoundException? Classpath vs Build Path vs /WEB-INF/lib。更好的做法是在伺服器本身中安裝實體 jdbc 驅(qū)動程式 jar 文件,並配置伺服器以建立 jdbc 連接池。以下是 tomcat 的範例:How should I connect to JDBC database / datasource in a servlet based application?

  3. #在 mysql 中建立 database。讓我們建立一個資料庫javabase。您當然想要統(tǒng)治世界,所以我們也使用 utf-8。

    create database javabase default character set utf8 collate utf8_unicode_ci;
  4. java 存取 Create a user,它存取 grant。只是因為使用 root 是一種不好的做法。

    create user 'java'@'localhost' identified by 'password';
     grant all on javabase.* to 'java'@'localhost' identified by 'password';

    是的,這裡 java 是使用者名,password 是密碼。

  5. Determine jdbc url。要使用 java 連接 mysql 資料庫,您需要採用以下語法的 jdbc url:

    jdbc:mysql://hostname:port/databasename
    • hostname:安裝 mysql 服務(wù)器的主機名。如果它安裝在運行 java 代碼的同一臺機器上,那么您可以只使用 localhost。它也可以是 ip 地址,例如 127.0.0.1。如果您遇到連接問題,并且使用 127.0.0.1 而不是 localhost 解決了該問題,那么您的網(wǎng)絡(luò)/dns/主機配置有問題。

    • port:mysql 服務(wù)器監(jiān)聽的 tcp/ip 端口。默認情況下為 3306。

    • databasename:您要連接的數(shù)據(jù)庫的名稱。那是 javabase。

    所以最終的 url 應(yīng)如下所示:

    jdbc:mysql://localhost:3306/javabase
  6. Test the connection 使用 java 到 mysql。使用 main() 方法創(chuàng)建一個簡單的 java 類來測試連接。

     string url = "jdbc:mysql://localhost:3306/javabase";
     string username = "java";
     string password = "password";
    
     system.out.println("connecting database ...");
    
     try (connection connection = drivermanager.getconnection(url, username, password)) {
         system.out.println("database connected!");
     } catch (sqlexception e) {
         throw new illegalstateexception("cannot connect the database!", e);
     }
    

    如果您收到 sqlexception: no合適的驅(qū)動程序,則意味著 jdbc 驅(qū)動程序根本沒有自動加載,或者 jdbc url 錯誤(即,任何加載的驅(qū)動程序都無法識別它)。另請參見 The infamous java.sql.SQLException: No suitable driver found。通常,當您將 jdbc 4.0 驅(qū)動程序放入運行時類路徑中時,應(yīng)該會自動加載它。要排除其中一個或另一個,您可以隨時手動加載它,如下所示:

     System.out.println("Loading driver ...");
    
     try {
         Class.forName("com.mysql.cj.jdbc.Driver"); // Use com.mysql.jdbc.Driver if you're not on MySQL 8+ yet.
         System.out.println("Driver loaded!");
     } catch (ClassNotFoundException e) {
         throw new IllegalStateException("Cannot find the driver in the classpath!", e);
     }
    

    請注意,此處不需要調(diào)用 newinstance() 。對于mysql,只是為了修復(fù)舊的且有缺陷的org.gjt.mm.mysql.driver。 Explanation here。如果此行拋出 classnotfoundexception,則說明包含 jdbc 驅(qū)動程序類的 jar 文件根本沒有放置在類路徑中。另請注意,拋出異常非常重要,以便立即阻止代碼執(zhí)行,而不是僅僅打印堆棧跟蹤然后繼續(xù)執(zhí)行其余代碼來抑制它。

    另請注意,您不需要每次在連接之前加載驅(qū)動程序。只需在應(yīng)用程序啟動期間一次就足夠了。

    如果您收到 sqlexception: 連接被拒絕 connection timed out 或 mysql 特定的 communicationsexception: 通信鏈路故障 ,則意味著數(shù)據(jù)庫根本無法訪問。這可能由以下一個或多個原因造成:

    1. jdbc url 中的 ip 地址或主機名錯誤。
    2. 本地 dns 服務(wù)器無法識別 jdbc url 中的主機名。
    3. jdbc url 中的端口號缺失或錯誤。
    4. 數(shù)據(jù)庫服務(wù)器已關(guān)閉。
    5. 數(shù)據(jù)庫服務(wù)器不接受 tcp/ip 連接。
    6. 數(shù)據(jù)庫服務(wù)器已耗盡連接。
    7. java 和 db 之間的某些東西正在阻塞連接,例如防火墻或代理。

    要解決其中一個問題,請遵循以下建議:

    1. 使用 ping 驗證并測試它們。
    2. 刷新 dns 或在 jdbc url 中使用 ip 地址。
    3. 根據(jù)mysql db的my.cnf進行驗證。
    4. 啟動數(shù)據(jù)庫。
    5. 驗證 mysqld 是否在沒有 --skip-networking 選項 的情況下啟動。
    6. 重新啟動數(shù)據(jù)庫并相應(yīng)地修復(fù)代碼,使其關(guān)閉 finally 中的連接。
    7. 禁用防火墻和/或配置防火墻/代理以允許/轉(zhuǎn)發(fā)端口。

    請注意,關(guān)閉 connection 極其非常重要。如果您不關(guān)閉連接并在短時間內(nèi)不斷獲取大量連接,那么數(shù)據(jù)庫可能會耗盡連接,并且您的應(yīng)用程序可能會崩潰。始終獲取 try-with-resources statement 中的 connection。這也適用于 statementpreparedstatementresultset。另見How often should Connection, Statement and ResultSet be closed in JDBC?

    這就是連接問題。您可以在 here 找到更高級的教程,了解如何借助基本 dao 類在數(shù)據(jù)庫中加載和存儲完整的 java 模型對象。

    對數(shù)據(jù)庫 connection 使用單例模式和/或 static 變量是一種不好的做法。參見其他 Is it safe to use a static java.sql.Connection instance in a multithreaded system? 這是第一個初學(xué)者錯誤。確保您不會落入這個陷阱。

    以上是將 Java 連接到 MySQL 資料庫的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
H5頁面製作是前端開發(fā)嗎 H5頁面製作是前端開發(fā)嗎 Apr 05, 2025 pm 11:42 PM

是的,H5頁面製作是前端開發(fā)的重要實現(xiàn)方式,涉及HTML、CSS和JavaScript等核心技術(shù)。開發(fā)者通過巧妙結(jié)合這些技術(shù),例如使用<canvas>標籤繪製圖形或使用JavaScript控制交互行為,構(gòu)建出動態(tài)且功能強大的H5頁面。

如何通過JavaScript或CSS控制瀏覽器打印設(shè)置中的頁首和頁尾? 如何通過JavaScript或CSS控制瀏覽器打印設(shè)置中的頁首和頁尾? Apr 05, 2025 pm 10:39 PM

如何使用JavaScript或CSS控制瀏覽器打印設(shè)置中的頁首和頁尾在瀏覽器的打印設(shè)置中,有一個選項可以控制是否顯?...

在移動端如何兼容多行溢出省略? 在移動端如何兼容多行溢出省略? Apr 05, 2025 pm 10:36 PM

移動端多行溢出省略在不同設(shè)備上的兼容問題在使用Vue2.0開發(fā)移動端應(yīng)用時,常常會遇到需要對文本進行多行溢...

為什麼inline-block元素會出現(xiàn)錯位現(xiàn)象?如何解決這個問題? 為什麼inline-block元素會出現(xiàn)錯位現(xiàn)象?如何解決這個問題? Apr 04, 2025 pm 10:39 PM

關(guān)於inline-block元素錯位顯示的原因及解決方案在編寫網(wǎng)頁佈局時,我們常常會遇到一些看似奇怪的顯示問題。比...

如何通過CSS自定義resize符號並使其與背景色統(tǒng)一? 如何通過CSS自定義resize符號並使其與背景色統(tǒng)一? Apr 05, 2025 pm 02:30 PM

CSS自定義resize符號的方法與背景色統(tǒng)一在日常開發(fā)中,我們經(jīng)常會遇到需要自定義用戶界面細節(jié)的情況,比如調(diào)...

centos安裝mysql centos安裝mysql Apr 14, 2025 pm 08:09 PM

在 CentOS 上安裝 MySQL 涉及以下步驟:添加合適的 MySQL yum 源。執(zhí)行 yum install mysql-server 命令以安裝 MySQL 服務(wù)器。使用 mysql_secure_installation 命令進行安全設(shè)置,例如設(shè)置 root 用戶密碼。根據(jù)需要自定義 MySQL 配置文件。調(diào)整 MySQL 參數(shù)和優(yōu)化數(shù)據(jù)庫以提升性能。

如何使用CSS的clip-path屬性實現(xiàn)分段器的45度曲線效果? 如何使用CSS的clip-path屬性實現(xiàn)分段器的45度曲線效果? Apr 04, 2025 pm 11:45 PM

如何實現(xiàn)分段器的45度曲線效果?在實現(xiàn)分段器的過程中,如何讓點擊左側(cè)按鈕時右側(cè)邊框變成45度曲線,而點?...