Java DB嵌入式模式
Java DB是基于Java編程語言和SQL的關(guān)系數(shù)據(jù)庫管理系統(tǒng)。 這是Apache軟件基金會的開源Derby項(xiàng)目的Oracle版本。 Java SE 7 SDK中包含Java DB。
Java DB有兩個(gè)部署選項(xiàng): Embedded和Network Server 。
這篇文章是關(guān)于嵌入式部署或模式的。
1.嵌入式
在嵌入式模式下:
- 該數(shù)據(jù)庫只能從一個(gè)應(yīng)用程序訪問。
- 應(yīng)用程序和數(shù)據(jù)庫之間沒有網(wǎng)絡(luò)連接。
- 應(yīng)用程序和數(shù)據(jù)庫在同一JVM(Java虛擬機(jī))中運(yùn)行。
使用JDBC(Java數(shù)據(jù)庫連接)從Java應(yīng)用程序訪問數(shù)據(jù)庫。 通常,數(shù)據(jù)庫由訪問數(shù)據(jù)庫的應(yīng)用程序啟動(dòng)和停止。 并且,不需要數(shù)據(jù)庫管理。
啟動(dòng)Java DB
從應(yīng)用程序啟動(dòng)Java DB。 首先,加載數(shù)據(jù)庫JDBC驅(qū)動(dòng)程序。 接下來,使用連接URL連接到數(shù)據(jù)庫。
- 該驅(qū)動(dòng)程序包含在Java DB中: org.apache.derby.jdbc.EmbeddedDriver
- 連接URL格式為: jdbc:derby:databaseName; URLAttributes;
- 一個(gè)示例連接URL是jdbc:derby:SampleDB; create = true; ,其中數(shù)據(jù)庫名稱為SampleDB ,“ create = true”為屬性名稱/值對。
以下是使用JDBC啟動(dòng)數(shù)據(jù)庫的示例Java方法:
/** The method creates a Connection object. Loads the embedded driver,* starts and connects to the database using the connection URL.*/ public static Connection createDatabaseConnection()throws SQLException, ClassNotFoundException {String driver = "org.apache.derby.jdbc.EmbeddedDriver";Class.forName(driver);String url = "jdbc:derby:sampleDB";Connection c = DriverManager.getConnection(url);return c; }通過上述方法創(chuàng)建的Connection對象用于使用SQL訪問數(shù)據(jù)庫對象和數(shù)據(jù)。 sampleDB是數(shù)據(jù)庫的名稱。
注意: derby.jar庫必須位于使用Java DB Embedded的應(yīng)用程序的類路徑中。 該庫包含驅(qū)動(dòng)程序。 它包含在Java DB中。
使用“ ij”以交互方式訪問Java DB數(shù)據(jù)庫
ij是Java DB附帶的命令行工具。 ij是一個(gè)JDBC工具,用于在Java DB數(shù)據(jù)庫上運(yùn)行交互式查詢。 這位于Java DB安裝的\ bin目錄中。
啟動(dòng)ij,創(chuàng)建數(shù)據(jù)庫并運(yùn)行SQL命令以創(chuàng)建和訪問數(shù)據(jù):
os prompt> ij ij> CONNECT 'jdbc:derby:testDB;create=true'; ij> Enter SQL commands here…這將在當(dāng)前目錄中創(chuàng)建一個(gè)名為testDB的數(shù)據(jù)庫并連接到該數(shù)據(jù)庫。 Java DB數(shù)據(jù)庫以與數(shù)據(jù)庫名稱相同的名稱存儲在目錄內(nèi)的文件中。
2.用法示例
一個(gè)示例用法是使用嵌入式數(shù)據(jù)庫的基于Java Swing的桌面應(yīng)用程序。 首次啟動(dòng)應(yīng)用程序時(shí),將創(chuàng)建數(shù)據(jù)庫及其對象。 隨后,應(yīng)用程序創(chuàng)建或訪問數(shù)據(jù)庫中的數(shù)據(jù)。 該應(yīng)用程序還具有在線備份數(shù)據(jù)庫功能(即在數(shù)據(jù)庫打開時(shí)進(jìn)行備份副本)和從備份數(shù)據(jù)庫副本功能進(jìn)行還原 。 數(shù)據(jù)庫隨應(yīng)用程序關(guān)閉。
3.從多個(gè)客戶端連接到嵌入式Java DB
可以從多個(gè)客戶端訪問嵌入式模式下的Java DB。 一個(gè)示例是部署在Web服務(wù)器上并連接到數(shù)據(jù)庫的Java Servlet應(yīng)用程序。 Java DB數(shù)據(jù)庫在Web服務(wù)器上配置為DataSource類型的資源。 Servlet應(yīng)用程序啟動(dòng)數(shù)據(jù)庫并創(chuàng)建Connection對象。 Connection對象是使用DataSource對象而不是DriverManager創(chuàng)建的。 多個(gè)Web客戶端通過應(yīng)用程序訪問數(shù)據(jù)庫數(shù)據(jù)。
一個(gè)例子
- 在Web服務(wù)器上配置數(shù)據(jù)源資源
- 從Servlet訪問數(shù)據(jù)庫(使用配置的數(shù)據(jù)源)
該配置適用于Apache Tomcat 6 Web服務(wù)器。 以下代碼示例使用Java Servlet(Java EE),JNDI(Java命名和目錄接口)和JDBC API。
3.1.1。 在Web服務(wù)器上配置數(shù)據(jù)源資源
這稱為上下文配置。 這將JDBC數(shù)據(jù)源的JNDI名稱定義為Web應(yīng)用程序中使用的Java DB數(shù)據(jù)庫的資源(用于JNDI查找)。 另外,指定資源參數(shù)。
以下條目已添加到文件“ /META-INF/context.xml”中。 META-INF目錄將位于Web應(yīng)用程序部署WAR文件的根目錄中。
<Context><Resourcename="jdbc/testDB"auth="Container"type="javax.sql.DataSource"username=""password=""driverClassName="org.apache.derby.jdbc.EmbeddedDriver"url="jdbc:derby:testDB"/> </Context>- name:是數(shù)據(jù)源資源的JNDI名稱。
- url:指定格式為jdbc:derby:databaseName; URLAttributes;的JDBC數(shù)據(jù)庫連接URL 。 并且, testDB是要連接的Java DB數(shù)據(jù)庫的名稱。
請注意,應(yīng)用程序從Derby系統(tǒng)目錄訪問嵌入式數(shù)據(jù)庫。 默認(rèn)情況下,當(dāng)前目錄(JVM系統(tǒng)屬性user.dir )是系統(tǒng)目錄。
對于Java DB,可以通過設(shè)置JVM系統(tǒng)屬性derby.system.home來指定Derby系統(tǒng)目錄(可選)。 在操作系統(tǒng)命令提示符下使用“ java”命令(例如, java -Dderby.system.home = D:\ mydatabases MyApplication )或在Java程序中(使用java.lang.System類的setProperty() )進(jìn)行設(shè)置。 。
注意:嵌入式數(shù)據(jù)庫驅(qū)動(dòng)程序(derby.jar)將放置在“ CATALINA_HOME \ lib”目錄中。 CATALINA_HOME是Tomcat安裝目錄。
3.1.2。 從Servlet訪問數(shù)據(jù)庫
以下Java代碼顯示了使用已配置的DataSource資源訪問Java DB數(shù)據(jù)庫的servlet類。 該代碼假定已經(jīng)創(chuàng)建了數(shù)據(jù)庫(使用另一個(gè)應(yīng)用程序或使用ij進(jìn)行交互)。
public class TestServlet extends HttpServlet { private Connection conn; /** Method executes when the servlet is created.* Accesses the DataSource object and creates the Connection object.*/ @Override public void init()throws ServletException {InitialContext cxt = null;DataSource ds = null;try {cxt = new InitialContext();ds = (DataSource)cxt.lookup("java:/comp/env/jdbc/testDB");}catch (NamingException ex) {throw new ServletException("naming context error", ex);}try {conn = ds.getConnection();}catch (SQLException ex) {throw new ServletException("connection error", ex);} } // init() /** Method to handle a Http Get request.* The Connection object created in init() is used to access the* database data using JDBC API. */@Overridepublic void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {...Statement stmnt = conn.createStatement();ResultSet rs = stmnt.executeQuery("SELECT * FROM test_table");...} } // TestServlet4.網(wǎng)絡(luò)服務(wù)器(又名服務(wù)器)
在這種模式下,可通過網(wǎng)絡(luò)(客戶端-服務(wù)器配置)從多個(gè)客戶端訪問Java DB。 數(shù)據(jù)庫和應(yīng)用程序在不同的JVM中運(yùn)行。 使用JDBC從Java應(yīng)用程序訪問服務(wù)器上的數(shù)據(jù)庫。
以下是服務(wù)器使用情況的示例。
啟動(dòng)服務(wù)器
使用提供的批處理程序(位于Java DB安裝的\ bin目錄中)從Windows命令提示符下啟動(dòng)和停止服務(wù)器: startNetworkServer.bat和stopNetworkServer.bat 。
從客戶端應(yīng)用程序訪問Java DB
加載驅(qū)動(dòng)程序并使用連接URL連接到數(shù)據(jù)庫。
- 驅(qū)動(dòng)程序是: org.apache.derby.jdbc.ClientDriver
- 連接URL格式為: jdbc:derby:// server:port / databaseName; URLAttributes;
- server是主機(jī)名(或ip地址), port是服務(wù)器正在偵聽客戶端請求的端口號(默認(rèn)為1527)。
以下是使用JDBC啟動(dòng)數(shù)據(jù)庫的示例Java方法:
/** The method creates a Connection object. Loads the client driver,* starts and connects to the database using the connection URL.*/ public static Connection createDatabaseConnection()throws SQLException, ClassNotFoundException {String driver = "org.apache.derby.jdbc.ClientDriver";Class.forName(driver);String url = "jdbc:derby://localhost:1527/sampleDB";Connection c = DriverManager.getConnection(url);return c; }通過上述方法創(chuàng)建的Connection對象用于使用SQL訪問數(shù)據(jù)庫對象和數(shù)據(jù)。 sampleDB是數(shù)據(jù)庫的名稱。
注意: derbyclient.jar庫必須位于客戶端應(yīng)用程序的類路徑中,才能啟動(dòng)和訪問Java DB數(shù)據(jù)庫。 該庫包含驅(qū)動(dòng)程序。 它包含在Java DB中。
5.參考
- Apache Derby>文檔(10.8手冊):http://db.apache.org/derby/manuals/index.html
- Oracle的Java DB:http://www.oracle.com/technetwork/java/javadb/overview/index.html
- 作者的Java DB備份和還原博客文章:http://www.javaquizplayer.com/blog.html
- 作者開發(fā)和部署(并使用Java DB Embedded)基于Java Swing的桌面應(yīng)用程序:http://www.scribonotes.com
翻譯自: https://www.javacodegeeks.com/2013/07/java-db-embedded-mode.html
總結(jié)
以上是生活随笔為你收集整理的Java DB嵌入式模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路由器与猫怎么连接如何连接猫到路由器
- 下一篇: 电脑长截图怎么截电脑如何局部截图