我們最近開始使用 Maven 構建專案。早些時候,所有的 JAR 都被添加到 libs 檔案夾中并添加到類路徑中。在遷移到 Maven 構建時,我錯過了向“sqlite-jdbc”添加依賴項。從本地 .db3 檔案讀取資料需要此庫。
由于通過呼叫代碼加載了'org.sqlite.JBDC'類Class.forName("org.sqlite.JDBC"),沒有編譯錯誤,我部署了WAR檔案,servlet在服務器中失敗。我正在考慮一種在編譯時發現問題的方法,以避免將來出現任何此類錯誤。我可以簡單地呼叫 JDBC.PREFIX 來加載 JDBC,這樣,如果我忘記將依賴項添加到 pom.xml 檔案中,我可以在編譯時找到問題本身嗎?
Class.forName("org.sqlite.JDBC")vsJDBC.PREFIX加載 JDBC 類之間有區別嗎?
uj5u.com熱心網友回復:
不需要Class.forName
一般不需要呼叫Class.forName。
早年就使用了這樣的呼叫。現代 Java 進行了更改,以便 JDBC 驅動程式通過 Java服務提供者介面 (SPI)工具自動加載并注冊到 JVM。
如果您正在使用建議的書籍或教程Class.forName,您可能希望獲得更多最新的學習材料。
DataSource
此外,在 Servlet 作業中,您通常不應該顯式訪問 JDBC 驅動程式。
設定資料庫服務器地址、用戶名和密碼需要硬編碼文本。當部署系統管理員更改 IP 地址或輪換密碼時,您的代碼會中斷。然后,您將不得不修改源代碼、重新編譯和重新部署。
相反,您應該將此類配置細節外部化。
對于 SQLite,請參閱Using DataSource to connect to SQLite with (Xerial) sqlite-jdbc driver。
JNDI
您可以使用該DataSource界面將資料庫配置外部化。在運行時獲取DataSource物件后,通過呼叫其getConnection方法建立資料庫連接。該DataSource物件包含資料庫服務器地址、用戶名、密碼以及與資料庫建立連接所需的所有其他設定。
DataSource使用JNDI在運行時獲取物件。DataSource如果您的系統管理員如此配置,您的 Servlet 容器可以充當命名/目錄服務器來提供物件。或者DataSource可以通過 JNDI 從外部服務器(例如LDAP服務器)獲取。
同樣,使用DataSourceJNDI 的美妙之處在于,當部署細節發生變化時,您作為 Servlet 程式員不需要參與,甚至不需要通知。
JDBC 驅動程式位置
對于 Servlet 作業,您通常不會將 JDBC 驅動程式與您的應用程式捆綁在一起。
相反,JDBC 驅動程式進入由 Servlet 容器管理的檔案夾。研究特定 Servlet 容器的檔案。對于Apache Tomcat,請參閱此答案。
在開發中,您的IDE可能需要訪問 JDBC 驅動程式才能編譯。如果是這樣,在您的 Maven POM 中,使用<scope>provided</scope>元素標記依賴項。這個標簽告訴 Maven 從最終構建中省略該依賴項,因為該依賴項在運行時已經存在(提供)。
如果您堅持將 JDBC 驅動程式捆綁在 Web 應用程式的 WAR 檔案中,請參閱Mark Rotteveel 的重要評論。
This topic has been addressed many times on Stack Overflow. Search to learn more.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/434086.html
下一篇:在第一組INSERTS之后,使用SQLINSERT激活的記錄迭代停止,但使用PRINT進行測驗會遍歷每條記錄(根據需要)
