將 Java 連接到 MySQL 資料庫
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 以及如何使用它的逐步說明:
Download並安裝mysql伺服器。按照通常的方式做就可以了。每當您更改連接埠號碼時,請記住它。預設為
3306
。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?#在 mysql 中建立 database。讓我們建立一個資料庫
javabase
。您當然想要統治世界,所以我們也使用 utf-8。create database javabase default character set utf8 collate utf8_unicode_ci;
登入後複製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
是密碼。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
登入後複製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.driver
。 Explanation here。如果此行抛出classnotfoundexception
,则说明包含 jdbc 驱动程序类的 jar 文件根本没有放置在类路径中。另请注意,抛出异常非常重要,以便立即阻止代码执行,而不是仅仅打印堆栈跟踪然后继续执行其余代码来抑制它。另请注意,您不需要每次在连接之前加载驱动程序。只需在应用程序启动期间一次就足够了。
如果您收到
sqlexception: 连接被拒绝
或connection timed out
或 mysql 特定的communicationsexception: 通信链路故障
,则意味着数据库根本无法访问。这可能由以下一个或多个原因造成:- jdbc url 中的 ip 地址或主机名错误。
- 本地 dns 服务器无法识别 jdbc url 中的主机名。
- jdbc url 中的端口号缺失或错误。
- 数据库服务器已关闭。
- 数据库服务器不接受 tcp/ip 连接。
- 数据库服务器已耗尽连接。
- java 和 db 之间的某些东西正在阻塞连接,例如防火墙或代理。
要解决其中一个问题,请遵循以下建议:
- 使用
ping
验证并测试它们。 - 刷新 dns 或在 jdbc url 中使用 ip 地址。
- 根据mysql db的
my.cnf
进行验证。 - 启动数据库。
- 验证 mysqld 是否在没有
--skip-networking 选项
的情况下启动。 - 重新启动数据库并相应地修复代码,使其关闭
finally
中的连接。 - 禁用防火墙和/或配置防火墙/代理以允许/转发端口。
请注意,关闭
connection
极其非常重要。如果您不关闭连接并在短时间内不断获取大量连接,那么数据库可能会耗尽连接,并且您的应用程序可能会崩溃。始终获取try-with-resources
statement 中的connection
。这也适用于statement
、preparedstatement
和resultset
。另见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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

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

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

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

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

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

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