當前位置:首頁 » 操作系統 » javadb資料庫

javadb資料庫

發布時間: 2022-10-20 14:52:41

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 是什麼

Java DB簡介Java DB是Sun公司的輕量級資料庫。它卻是一個先進的全事務處理的基於Java技術的資料庫,它支持各類開放標准、觸發器和存儲程序。Java DB可以客戶端伺服器模式使用,也可以直接嵌入到一個Java應用程序中。在這些場合,Java DB都可以在同樣的Java虛擬機(JVM)中運行,這就無需在應用程序之外單獨購買、下載、安裝或管理這個資料庫。對於選擇在生產中採用Java DB的客戶,Sun將提供支持服務。

㈢ 關於NetBean下使用JavaDB資料庫的問題

JavaDB資料庫聯接方法:
1.點 "工具 "--javaDB資料庫--點 "創建資料庫 "
為資料庫起名字,用戶名,密碼,自定義的都是
2.配置資料庫連接池:如果你使用的是sun application server 那麼啟動容器,進入管理平台
選」資源」--jdbc--Connection Pools --new-- Resource Type:java.sql.datasource
選擇javaDB--next--前面不用管,看Properties:輸入User passworld其他不用管,點上面的ping,測試是不時連接成功了
3.創建數據源:jdbc--JDBC Resources--為jndi起個名字 Pool Name:你剛才創建的那個池

㈣ Netbeans無法連接javaDB資料庫無法監聽1527埠

: JDBC,就那麼一回事,driver/url/user/password 四個屬性,別的操作除了SQL有個別特性,一般的操作,都一樣的。

㈤ 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);
}
}
}

㈥ javadb資料庫是什麼

它是一個先進的全事務處理的基於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 程序員不再需要耗費大量精力安裝和配置資料庫,就能進行安全、

㈦ javadb資料庫是什麼

它卻是一個先進的全事務處理的基於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 程序員不再需要耗費大量精力安裝和配置資料庫,就能進行安全、

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

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

㈨ javadb資料庫怎麼導入sql文件

創建Java工程javaDB:
首先要把Derby驅動包加進來,該文件可以在C:\Program Files\Sun\JavaDB\lib找到,就是derby.jar

創建包com.test
在包下面創建JavaDBTes測試類,
並添加主函數

創建資料庫:
第一步載入驅動:
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
第二部設置賬號密碼:
Properties props = new Properties(); props.put("user", "admin"); props.put("password", "123");
第三部 連接創建資料庫:
Connectionconn = DriverManager.getConnection("jdbc:derby:liu;create=true",props);
不提交事務
conn.setAutoCommit(false);

創建表:
Statement s = conn.createStatement(); //獲取實例 s.execute("create table user_info (user_id int,user_name varchar(50))");
conn.commit();//提交事務
往表添加數據:
Statement s = conn.createStatement();boolean mark = s.execute("insert into user_info values(1, '張三')");
conn.commit();
查詢數據:
ResultSet rs = s.executeQuery("SELECT user_id,user_name FROM user_info");
//遍歷結果集
while (rs.next()) {
System.out.println(rs.getInt(1));
System.out.println(rs.getString(2)); }
7
修改數據:
Statement s = conn.createStatement();boolean mark = s.execute("update user_info setuser_name= '張三' where user_id=1");
conn.commit();

8
刪除數據:
Statement s = conn.createStatement();boolean mark = s.execute("delete from user_info where user_id=1");
conn.commit();

熱點內容
優酷怎麼給視頻加密 發布:2025-05-14 19:31:34 瀏覽:633
夢三國2副本腳本 發布:2025-05-14 19:29:58 瀏覽:859
phpxmlhttp 發布:2025-05-14 19:29:58 瀏覽:432
Pua腳本 發布:2025-05-14 19:24:56 瀏覽:448
蘋果像素低為什麼比安卓好 發布:2025-05-14 19:13:23 瀏覽:460
安卓機微信怎麼設置紅包提醒 發布:2025-05-14 19:00:15 瀏覽:271
androidsystem許可權設置 發布:2025-05-14 18:56:02 瀏覽:970
mq腳本 發布:2025-05-14 18:45:37 瀏覽:25
仙境傳說ro解壓失敗 發布:2025-05-14 18:45:01 瀏覽:868
betweenand的用法sql 發布:2025-05-14 18:39:25 瀏覽:250