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

將 Java 連接到 MySQL 資料庫

Feb 22, 2024 pm 12:58 PM
java應用程式 overflow

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

問題內容

如何用 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 來尋找已為您設定的應用程式伺服器容器:

context context = new initialcontext();
datasource datasource = (datasource) context.lookup("java:comp/env/jdbc/mydb");
登入後複製

…或直接從資料庫驅動程式實例化和配置一個,例如 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();
登入後複製

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

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

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

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

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

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

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

    java -cp .;/path/to/mysql-connector.jar com.example.yourclass
    登入後複製

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

    如果您正在開發基於servlet 的war 應用程序,並希望手動管理連接(實際上,這種做法很糟糕),那麼您需要確保jar 最終位於構建的/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 驅動程式 jar 文件,並配置伺服器以建立 jdbc 連接池。以下是 tomcat 的範例:How should I connect to JDBC database / datasource in a servlet based application?

  3. #在 mysql 中建立 database。讓我們建立一個資料庫javabase。您當然想要統治世界,所以我們也使用 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 服务器的主机名。如果它安装在运行 java 代码的同一台机器上,那么您可以只使用 localhost。它也可以是 ip 地址,例如 127.0.0.1。如果您遇到连接问题,并且使用 127.0.0.1 而不是 localhost 解决了该问题,那么您的网络/dns/主机配置有问题。

    • port:mysql 服务器监听的 tcp/ip 端口。默认情况下为 3306

    • databasename:您要连接的数据库的名称。那是 javabase

    所以最终的 url 应如下所示:

    jdbc:mysql://localhost:3306/javabase
    登入後複製
  6. Test the connection 使用 java 到 mysql。使用 main() 方法创建一个简单的 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合适的驱动程序,则意味着 jdbc 驱动程序根本没有自动加载,或者 jdbc url 错误(即,任何加载的驱动程序都无法识别它)。另请参见 The infamous java.sql.SQLException: No suitable driver found。通常,当您将 jdbc 4.0 驱动程序放入运行时类路径中时,应该会自动加载它。要排除其中一个或另一个,您可以随时手动加载它,如下所示:

     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);
     }
    
    登入後複製

    请注意,此处不需要调用 newinstance() 。对于mysql,只是为了修复旧的且有缺陷的org.gjt.mm.mysql.driverExplanation here。如果此行抛出 classnotfoundexception,则说明包含 jdbc 驱动程序类的 jar 文件根本没有放置在类路径中。另请注意,抛出异常非常重要,以便立即阻止代码执行,而不是仅仅打印堆栈跟踪然后继续执行其余代码来抑制它。

    另请注意,您不需要每次在连接之前加载驱动程序。只需在应用程序启动期间一次就足够了。

    如果您收到 sqlexception: 连接被拒绝 connection timed out 或 mysql 特定的 communicationsexception: 通信链路故障 ,则意味着数据库根本无法访问。这可能由以下一个或多个原因造成:

    1. jdbc url 中的 ip 地址或主机名错误。
    2. 本地 dns 服务器无法识别 jdbc url 中的主机名。
    3. jdbc url 中的端口号缺失或错误。
    4. 数据库服务器已关闭。
    5. 数据库服务器不接受 tcp/ip 连接。
    6. 数据库服务器已耗尽连接。
    7. java 和 db 之间的某些东西正在阻塞连接,例如防火墙或代理。

    要解决其中一个问题,请遵循以下建议:

    1. 使用 ping 验证并测试它们。
    2. 刷新 dns 或在 jdbc url 中使用 ip 地址。
    3. 根据mysql db的my.cnf进行验证。
    4. 启动数据库。
    5. 验证 mysqld 是否在没有 --skip-networking 选项 的情况下启动。
    6. 重新启动数据库并相应地修复代码,使其关闭 finally 中的连接。
    7. 禁用防火墙和/或配置防火墙/代理以允许/转发端口。

    请注意,关闭 connection 极其非常重要。如果您不关闭连接并在短时间内不断获取大量连接,那么数据库可能会耗尽连接,并且您的应用程序可能会崩溃。始终获取 try-with-resources statement 中的 connection。这也适用于 statementpreparedstatementresultset。另见How often should Connection, Statement and ResultSet be closed in JDBC?

    这就是连接问题。您可以在 here 找到更高级的教程,了解如何借助基本 dao 类在数据库中加载和存储完整的 java 模型对象。

    对数据库 connection 使用单例模式和/或 static 变量是一种不好的做法。参见其他 Is it safe to use a static java.sql.Connection instance in a multithreaded system? 这是第一个初学者错误。确保您不会落入这个陷阱。

    以上是將 Java 連接到 MySQL 資料庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

2018-2024年比特幣最新價格美元大全 2018-2024年比特幣最新價格美元大全 Feb 15, 2025 pm 07:12 PM

實時比特幣美元價格 影響比特幣價格的因素 預測比特幣未來價格的指標 以下是 2018-2024 年比特幣價格的一些關鍵信息:

H5頁面製作是前端開發嗎 H5頁面製作是前端開發嗎 Apr 05, 2025 pm 11:42 PM

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

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

CSS自定義resize符號的方法與背景色統一在日常開發中,我們經常會遇到需要自定義用戶界面細節的情況,比如調...

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

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

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

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

Flex佈局下文字超出省略卻撐開容器?如何解決? Flex佈局下文字超出省略卻撐開容器?如何解決? Apr 05, 2025 pm 11:00 PM

Flex佈局下文字超出省略導致容器撐開的問題及解決方法在使用Flex...

如何實現帶有45度曲線邊框的分段器效果? 如何實現帶有45度曲線邊框的分段器效果? Apr 04, 2025 pm 11:48 PM

實現分段器效果的技巧在用戶界面設計中,分段器是一種常見的導航元素,尤其是在移動應用和響應式網頁中。 ...

ChatGPT時代,技術問答社區思否如何應對挑戰? ChatGPT時代,技術問答社區思否如何應對挑戰? Apr 01, 2025 pm 11:51 PM

ChatGPT時代的技術問答社區:思否(SegmentFault)的應對策略StackOverflow...