JavaDB,java db下載

本文目錄一覽:

java 6 中自帶的javaDB(derby)資料庫,是否不用啟動服務,直接可以和jdk進行交互呀?

新安裝了 JDK 6 的程序員們也許會發現,除了傳統的 bin、jre 等目錄,JDK 6 新增了一個名為 db 的目錄。這便是 Java 6 的新成員:Java DB。這是一個純 Java 實現、開源的資料庫管理系統(DBMS),源於 Apache 軟體基金會(ASF)名下的項目 Derby。它只有 2MB 大小,對比動輒上 G 的資料庫來說可謂袖珍。但這並不妨礙 Derby 功能齊備,支持幾乎大部分的資料庫應用所需要的特性。更難能可貴的是,依託於 ASF 強大的社區力量,Derby 得到了包括 IBM 和 Sun 等大公司以及全世界優秀程序員們的支持。這也難怪 Sun 公司會選擇其 10.2.2 版本納入到 JDK 6 中,作為內嵌的資料庫。這就好像為 JDK 注入了一股全新的活力:Java 程序員不再需要耗費大量精力安裝和配置資料庫,就能進行安全、易用、標準、並且免費的資料庫編程。在這一章中,我們將初窺 Java DB 的世界,來探究如何使用它編寫出功能豐富的程序。

Hello, Java DB:內嵌模式的 Derby

既然有了內嵌(embedded)的資料庫,就讓我們從一個簡單的範例開始,試著使用它吧。這個程序做了大多數資料庫應用都可能會做的操作:在 DBMS 中創建了一個名為 helloDB 的資料庫;創建了一張數據表,取名為 hellotable;向表內插入了兩條數據;然後,查詢數據並將結果列印在控制台上;最後,刪除表和資料庫,釋放資源。

public class HelloJavaDB {

public static void main(String[] args) {

try { // load the driver

Class.forName(“org.apache.derby.jdbc.EmbeddedDriver”).newInstance();

System.out.println(“Load the embedded driver”);

Connection conn = null;

Properties props = new Properties();

props.put(“user”, “user1”); props.put(“password”, “user1”);

//create and connect the database named helloDB

conn=DriverManager.getConnection(“jdbc:derby:helloDB;create=true”, props);

System.out.println(“create and connect to helloDB”);

conn.setAutoCommit(false);

// create a table and insert two records

Statement s = conn.createStatement();

s.execute(“create table hellotable(name varchar(40), score int)”);

System.out.println(“Created table hellotable”);

s.execute(“insert into hellotable values(‘Ruth Cao’, 86)”);

s.execute(“insert into hellotable values (‘Flora Shi’, 92)”);

// list the two records

ResultSet rs = s.executeQuery(

“SELECT name, score FROM hellotable ORDER BY score”);

System.out.println(“namettscore”);

while(rs.next()) {

StringBuilder builder = new StringBuilder(rs.getString(1));

builder.append(“t”);

builder.append(rs.getInt(2));

System.out.println(builder.toString());

}

// delete the table

s.execute(“drop table hellotable”);

System.out.println(“Dropped table hellotable”);

rs.close();

s.close();

System.out.println(“Closed result set and statement”);

conn.commit();

conn.close();

System.out.println(“Committed transaction and closed connection”);

try { // perform a clean shutdown

DriverManager.getConnection(“jdbc:derby:;shutdown=true”);

} catch (SQLException se) {

System.out.println(“Database shut down normally”);

}

} catch (Throwable e) {

// handle the exception

}

System.out.println(“SimpleApp finished”);

}

}

隨後,我們在命令行(本例為 Windows 平台,當然,其它系統下稍作改動即可)下鍵入以下命令:

清單 2. 運行 HelloJavaDB 命令

java –cp .;%JAVA_HOME%dblibderby.jar HelloJavaDB

圖 1. HelloJavaDB 程序的執行結果

上述的程序和以往沒什麼區別。不同的是我們不需要再為 DBMS 的配置而勞神,因為 Derby 已經自動地在當前目錄下新建了一個名為 helloDB 的目錄,來物理地存儲數據和日誌。需要做的只是注意命名問題:在內嵌模式下驅動的名字應為 org.apache.derby.jdbc.EmbeddedDriver;創建一個新資料庫時需要在協議後加入 create=true。另外,關閉所有資料庫以及 Derby 的引擎可以使用以下代碼:

清單 3. 關閉所有資料庫及 Derby 引擎

DriverManager.getConnection(“jdbc:derby:;shutdown=true”);

如果只想關閉一個資料庫,那麼則可以調用:

清單 4. 關閉一個資料庫

DriverManager.getConnection(“jdbc:derby:helloDB;shutdown=true “);

這樣,使用嵌入模式的 Derby 維護和管理資料庫的成本接近於 0。這對於希望專心寫代碼的人來說不失為一個好消息。然而有人不禁要問:既然有了內嵌模式,為什麼大多數的 DBMS 都沒有採取這樣的模式呢?不妨做一個小實驗。當我們同時在兩個命令行窗口下運行 HelloJavaDB 程序。結果一個的結果與剛才一致,而另一個卻出現了錯誤,如 圖 2 所示。

圖 2. 內嵌模式的局限

錯誤的原因其實很簡單:在使用內嵌模式時,Derby 本身並不會在一個獨立的進程中,而是和應用程序一起在同一個 Java 虛擬機(JVM)里運行。因此,Derby 如同應用所使用的其它 jar 文件一樣變成了應用的一部分。這就不難理解為什麼在 classpath 中加入 derby 的 jar 文件,我們的示常式序就能夠順利運行了。這也說明了只有一個 JVM 能夠啟動資料庫:而兩個跑在不同 JVM 實例里的應用自然就不能夠訪問同一個資料庫了。

鑒於上述的局限性,和來自不同 JVM 的多個連接想訪問一個資料庫的需求,下一節將介紹 Derby 的另一種模式:網路伺服器(Network Server)。

網路伺服器模式

如上所述,網路伺服器模式是一種更為傳統的客戶端/伺服器模式。我們需要啟動一個 Derby 的網路伺服器用於處理客戶端的請求,不論這些請求是來自同一個 JVM 實例,還是來自於網路上的另一台機器。同時,客戶端使用 DRDA(Distributed Relational Database Architecture)協議連接到伺服器端。這是一個由 The Open Group 倡導的資料庫交互標準。圖 3 說明了該模式的大體結構。

由於 Derby 的開發者們努力使得網路伺服器模式與內嵌模式之間的差異變小,使得我們只需簡單地修改 清單 1 中的程序就可以實現。如清單 5所示,我們在 HelloJavaDB 中增添了一個新的函數和一些字元串變數。不難看出,新的代碼只是將一些在上一節中特別指出的字元串進行了更改:驅動類為 org.apache.derby.jdbc.ClientDriver,而連接資料庫的協議則變成了 jdbc:derby://localhost:1527/。這是一個類似 URL 的字元串,而事實上,Derby 網路的客戶端的連接格式為:jdbc:derby://server[:port] /databaseName[;attributeKey=value]。在這個例子中,我們使用了最簡單的本地機器作為伺服器,而埠則是 Derby 默認的 1527 埠。

圖 3. Derby 網路伺服器模式架構

清單 5. 網路伺服器模式下的 HelloJavaDB

public class HelloJavaDB {

public static String driver = “org.apache.derby.jdbc.EmbeddedDriver”;

public static String protocol = “jdbc:derby:”;

public static void main(String[] args) {

// same as before

}

private static void parseArguments(String[] args) {

if (args.length == 0 || args.length 1) {

return;

}

if (args[0].equalsIgnoreCase(“derbyclient”)) {

framework = “derbyclient”;

driver = “org.apache.derby.jdbc.ClientDriver”;

protocol = “jdbc:derby://localhost:1527/”;

}

}

}

當然,僅僅有客戶端是不夠的,我們還需要啟動網路伺服器。Derby 中控制網路伺服器的類是 org.apache.derby.drda.NetworkServerControl,因此鍵入以下命令即可。如果想了解 NetworkServerControl 更多的選項,只要把 start 參數去掉就可以看到幫助信息了。關於網路伺服器端的實現,都被 Derby 包含在 derbynet.jar 里。

清單 6. 啟動網路伺服器

java -cp .;”C:Program FilesJavajdk1.6.0dblibderby.jar”;

“C:Program FilesJavajdk1.6.0dblibderbynet.jar”

org.apache.derby.drda.NetworkServerControl start

相對應的,網路客戶端的實現被包含在 derbyclient.jar 中。所以,只需要在 classpath 中加入該 jar 文件,修改後的客戶端就可以順利地讀取數據了。再一次嘗試著使用兩個命令行窗口去連接資料庫,就能夠得到正確的結果了。如果不再需要伺服器,那麼使用 NetworkServerControl 的 shutdown 參數就能夠關閉伺服器。

更多

至此,文章介紹了 Java SE 6 中的新成員:Java DB(Derby),也介紹了如何在內嵌模式以及網路伺服器模式下使用 Java DB。當然這只是淺嘗輒止,更多高級的選項還需要在 Sun 和 Derby 的文檔中尋找。在這一章的最後,我們將簡單介紹幾個 Java DB 的小工具來加快開發速度。它們都位於 org.apache.derby.tools 包內,在開發過程中需要獲取信息或者測試可以用到。

• ij:一個用來運行 SQL 腳本的工具;

• dblook:為 Derby 資料庫作模式提取(Schema extraction),生成 DDL 的工具;

• sysinfo:顯示系統以及 Derby 信息的工具類;

javaDB是做什麼用的,為什麼安裝jdk需要安裝這個?

單純安裝jdk是不需要javaDB的,安裝完jdk之後配置環境變數,然後就可以寫代碼了,不需要安裝別的

javadb被封了怎麼找到新的

1、首先打開javadb官網,並登錄自己的javadb賬號密碼。

2、其次點擊首頁左上角賬號找回,並先擇被封賬號。

3、最後點擊獲取新的賬號密碼即可。

JavaDB的一些問題

javaDB其實就是Derby,它並不是一個新的資料庫產品,它是由IBM捐獻給Apache的DB項目的一個純Java資料庫,JDK6.0裡面帶的這個Derby的版本是 10.2.1.7,支持存儲過程和觸發器;有兩種運行模式,一種是作為嵌入式資料庫,另一種是作為網路資料庫,前者的資料庫伺服器和客戶端都在同一個 JVM裡面運行,後者允許資料庫伺服器端和客戶端不在同一個JVM裡面,而且允許這兩者在不同的物理機器上.值得注意的是JDK6裡面的這個Derby支持JDK6的新特性JDBC 4.0規範(JSR 221),現在我們如果要練習JDBC的用法,沒有必要單獨裝一個資料庫產品了,直接用Derby就行.

1、本身沒有操作界面,可以用第三方工具來管理(也就是你說的操作界面),Aqua Data Studio 具備管理功能的用於 Apache Derby 關係資料庫的管理工具和資料庫查詢工具。直觀管理功能讓用戶能夠瀏覽和修改資料庫結構,包括架構對象和資料庫存儲,以及維護資料庫安全。集成查詢工具讓您能夠迅速創建、編輯和執行 SQL 查詢與腳本。Aqua Data Studio 進一步提供導入與導出工具,從而輕鬆地將數據移入和移出不同的數據格式及 Apache Derby 資料庫。集成在這些工具內的是庫瀏覽器 (Repository Browser),擁有 CVS 和 Subversion (SVN) 的完整來源控制客戶端。

2、兩者的區別,簡單的說,就是javaDB是一個簡化輕量級資料庫,適合小型系統的小規模測試用,完全可以跑在內存里的資料庫,它只有3M大小,而MySQL則是可以應用部署大型系統的資料庫,功能更多更全,也更穩定,是用範圍更廣。

3、下面是個使用derby的簡單例子:

首先導入JAR包:derby.jar,如果你裝的是JDK6,在C:\Program Files\Sun\JavaDB\lib目錄下就可以找到.

然後就要創建資料庫了:

代碼

private Connection getConnection() throws SQLException {

Connection connection = DriverManager

.getConnection(“jdbc:derby:userDB;create=true;user=test;password=test”);

connection.setAutoCommit(false);

return connection;

}

其中userDB是要連接資料庫的名字,create=true表示如果該資料庫不存在,則創建該資料庫,如果資料庫存在,則用用戶user=test;密碼password=test連接資料庫.

有了資料庫,接下來該建表了:

代碼

private void createTable(Connection connection) throws SQLException {

Statement statement = connection.createStatement();

String sql = “create table USERS(“

+ ” ID BIGINT not null generated by default as identity,”

+ ” USER_NAME VARCHAR(20) not null,”

+ ” PASSWORD VARCHAR(20),”

+ ” constraint P_KEY_1 primary key (ID))”;

statement.execute(sql);

sql = “create unique index USER_NAME_INDEX on USERS (“

+ ” USER_NAME ASC)”;

statement.execute(sql);

statement.close();

}

創建了 USERS表,包括ID,USER_NAME,PASSWORD三個列,其中ID是主鍵,其中generated by default as identity 的作用類似sequence,identity是定義自動加一的列,

GENERATED BY ALWAYS AS IDENTITY

GENERATED BY DEFAULT AS IDENTITY

By always和by default是說明生成這個IDENTITY的方式。

By always是完全由系統自動生成。

by default是可以由用戶來指定一個值。

編寫與USERS表對應的javabean(這個就不多說了),:

代碼

public class User implements Serializable {

/**

*

*/

private static final long serialVersionUID = 1L;

private Long id;

private String userName;

private String password;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

}

接下來就可以就資料庫進行增刪改查的操作了:

插入數據:

代碼

private void create(User user) {

Connection connection = null;

try {

connection = this.getConnection();

PreparedStatement statement = connection

.prepareStatement(“insert into users (user_name,password) values(?,?)”);

int index = 1;

statement.setString(index++, user.getUserName());

statement.setString(index++, user.getPassword());

statement.execute();

user.setId(this.getId(connection));

connection.commit();

} catch (SQLException e) {

rollback(connection);

throw new RuntimeException(e);

} finally {

if (connection != null) {

close(connection);

}

}

}

代碼

private Long getId(Connection connection) throws SQLException {

CallableStatement callableStatement = connection

.prepareCall(“values identity_val_local()”);

ResultSet resultSet = callableStatement.executeQuery();

resultSet.next();

Long id = resultSet.getLong(1);

resultSet.close();

callableStatement.close();

return id;

}

getId方法是獲得系統默認的id值,是通過 identity_val_local()獲得的,而函數IDENTITY_VAL_LOCAL()則可以在INSERT語句執行之後,為我們返回剛才系統為id所產生的值.感覺還是有點想sequence的curr_val.

修改數據:

代碼

private void update(User user) {

Connection connection = null;

try {

connection = this.getConnection();

PreparedStatement statement = connection

.prepareStatement(“update users set user_name=?,password=? where id=?”);

int index = 1;

statement.setString(index++, user.getUserName());

statement.setString(index++, user.getPassword());

statement.setLong(index++, user.getId());

statement.execute();

connection.commit();

} catch (SQLException e) {

rollback(connection);

throw new RuntimeException(e);

} finally {

if (connection != null) {

close(connection);

}

}

}

刪除數據:

代碼

public void delete(Long id) {

Connection connection = null;

try {

connection = this.getConnection();

PreparedStatement statement = connection

.prepareStatement(“delete from users where id=?”);

statement.setLong(1, id);

statement.execute();

connection.commit();

} catch (SQLException e) {

rollback(connection);

throw new RuntimeException(e);

} finally {

if (connection != null) {

close(connection);

}

}

}

查詢數據:

代碼

public User findById(Long id) {

Connection connection = null;

try {

connection = this.getConnection();

PreparedStatement statement = connection

.prepareStatement(“select user_name,password from users where id=?”);

statement.setLong(1, id);

ResultSet resultSet = statement.executeQuery();

User user = null;

if (resultSet.next()) {

user = new User();

user.setId(id);

user.setUserName(resultSet.getString(“user_name”));

user.setPassword(resultSet.getString(“password”));

}

resultSet.close();

statement.close();

connection.commit();

return user;

} catch (SQLException e) {

throw new RuntimeException(e);

} finally {

if (connection != null) {

close(connection);

}

}

}

Java DB是什麼?

它卻是一個先進的全事務處理的基於Java技術的資料庫,它支持各類開放標準、觸發器和存儲程序。Java DB可以客戶端伺服器模式使用,也可以直接嵌入到一個Java應用程序中。在這些場合,Java DB都可以在同樣的Java虛擬機(JVM)中運行,這就無需在應用程序之外單獨購買、下載、安裝或管理這個資料庫。對於選擇在生產中採用Java DB的客戶,Sun將提供支持服務。Java DB:Java 6 里的資料庫新安裝了 JDK 6 的程序員們也許會發現,除了傳統的 bin、jre 等目錄,JDK 6 新增了一個名為 javadb 的目錄。這便是 Java 6 的新成員:Java DB。這是一個純 Java 實現、開源的資料庫管理系統(DBMS),源於 Apache 軟體基金會(ASF)名下的項目 Derby。它只有 3MB 大小,對比動輒上 G 的資料庫來說可謂袖珍。但這並不妨礙 Derby 功能齊備,支持幾乎大部分的資料庫應用所需要的特性。更難能可貴的是,依託於 ASF 強大的社區力量,Derby 得到了包括 IBM 和 Sun 等大公司以及全世界優秀程序員們的支持。這也難怪 Sun 公司會選擇其 10.2.2 版本納入到 JDK 6 中,作為內嵌的資料庫。這就好像為 JDK 注入了一股全新的活力:Java 程序員不再需要耗費大量精力安裝和配置資料庫,就能進行安全、易用、標準、並且免費的資料庫編程。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/156853.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-18 01:58
下一篇 2024-11-18 01:58

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論