A. 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 信息的工具類;
B. 德比的Derby資料庫
Derby資料庫是一個純用Java實現的內存資料庫,屬於Apache的一個開源項目。由於是用Java實現的,所以可以在任何平台上運行;另外一個特點是體積小,免安裝,只需要幾個小jar包就可以運行了。
Derby資料庫入門
1,下載並安裝Derby:
下載地址: ,下載最新版本。
我用的是10.5.3.0。
解壓縮到任意文件夾,我的是:E:JavaJoyderby
2,配置環境變數:
建立DERBY_HOME,值:E:JavaJoyderbydb- derby-10.5.3.0-bindb-derby-10.5.3.0-bin
在Path加入:%DERBY_HOME%in
在CLASSPATH加入:%DERBY_HOME%lib derby.jar;%DERBY_HOME%libderbyclient.jar;%DERBY_HOME%libderbytools.jar;%DERBY_HOME%libderbynet.jar
3,測試看看Derby安裝成功沒有
開始—Run—CMD
運行 sysinfo
如果安裝成功,將會看到相關信息,下面是截取的部分信息。
——— Derby 信息 ——–
JRE – JDBC: Java SE 6 – JDBC 4.0
[E:JavaJoyderbydb-derby-10.5.3.0-bindb-derby-10.5.3.0-binlibderby.jar] 10
.5.3.0 – (802917)
[E:JavaJoyderbydb-derby-10.5.3.0-bindb-derby-10.5.3.0-binlibderbytools.ja
r] 10.5.3.0 – (802917)
[E:JavaJoyderbydb-derby-10.5.3.0-bindb-derby-10.5.3.0-binlibderbynet.jar]
10.5.3.0 – (802917)
[E:JavaJoyderbydb-derby-10.5.3.0-bindb-derby-10.5.3.0-binlibderbyclient.j
ar] 10.5.3.0 – (802917)
4,創建和使用資料庫
打開命令行,進入想要放置資料庫的目錄,我的是:E:JavaJoy derbyDerby_data
然後輸入ij
將會看到:
ij 版本 10.5
ij>
接下來就可以創建資料庫了。
例:
創建firstdb資料庫:
ij> connect 『jdbc:derby:firstdb;create=true』;
連接firstdb資料庫:
ij> connect 『jdbc:derby:firstdb』;
查詢資料庫等操作,只需要輸入相應的Sql語句即可。
創建一個table:
create table firsttable(id int primary key, name varchar(20));
插入數據:
insert into firsttable values(1, 『Hotpepper』);
在命令行測試一下:
select * from firsttable;
結果如下:
ID |NAME
——————————–
1 |Hotpepper
其它命令
斷開連接:
ij> disconnect;
退出ij:
ij> exit;
5,在Java程序中使用Derby
首先要把相關的Derby jar包加進來(Build Path)。
把derby.jar加進來,如果沒有加進來會出現 「java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver」錯誤
好了,下面寫JAVA代碼進行測試:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {
private static String driver = 「org.apache.derby.jdbc.EmbeddedDriver」;
private static String protocol = 「jdbc:derby:」;
String dbName = 「E:\Java\Joy\derby\Derby_data\firstdb」;
static void loadDriver() {
try {
Class.forName(driver).newInstance();
System.out.println(「Loaded the appropriate driver」);
} catch (Exception e) {
e.printStackTrace();
}
}
public void doIt() {
Connection conn = null;
Statement s = null;
ResultSet rs = null;
System.out.println(「starting」);
try {
conn = DriverManager.getConnection(protocol + dbName
+ 「;create=true」);
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println(「Connected to and created database 」 + dbName);
try {
s=conn.createStatement();
rs=s.executeQuery(「select * from firsttable」);
while (rs.next()) {
System.out.println(rs.getInt(1));
System.out.println(rs.getString(2));
}
} catch (SQLException e1) {
e1.printStackTrace();
}
try {
conn.close();
conn = null;
s.close();
s = null;
rs.close();
rs = null;
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Test t = new Test();
t.loadDriver();
t.doIt();
}
}
C. java自帶的資料庫怎麼用,能不能給一段運行的通的代碼.(包括import)
你是指javaDB Derby嗎?Derby資料庫是一個純用Java實現的內存資料庫,屬於Apache的一個開源項目。由於是用Java實現的,所以可以在任何平台上運行;另外一個特點是體積小,免安裝,只需要幾個小jar包就可以運行了。
Derby資料庫有兩種運行模式:
1) 內嵌模式。Derby資料庫與應用程序共享同一個JVM,通常由應用程序負責啟動和停止,對除啟動它的應用程序外的其它應用程序不可見,即其它應用程序不可訪問它;
2) 網路模式。Derby資料庫獨佔一個JVM,做為伺服器上的一個獨立進程運行。在這種模式下,允許有多個應用程序來訪問同一個Derby資料庫。
在Apache上,Derby有4種發布包,這里以bin發布包為例。bin發布包中含有包含了執行derby資料庫工具、設置derby資料庫環境的腳本文件、Demo、jar文件等。
希望幫到你……
1、 安裝Derby資料庫
只需要從Derby官方網站下載Derby的zip或者tar包,解壓就可以了。這里以db-derby-10.4.1.3-bin版本為例,解壓後得到以下目錄:
1) bin目錄,包含了一些工具腳本和設備環境的腳本;
2) demo目錄,包含了一些實常式序;
3) docs目錄,包含了Derby的文檔;
4) javadoc目錄,包含了Derby的API文檔;
5) lib目錄,包含了Derby資料庫的jar文件;
6) test目錄,Derby的一些測試jar包;
2、 使用Derby腳本
Derby提供了幾個腳本來操作Derby資料庫,在使用這些腳本前,你必須先設置好Derby的運行環境。
下面的例子都是在命令行下設置環境變數,這些設置都是臨時的,如果你新開一個命令行窗口,則需要重新設置一遍,如果想要使環境變數永久生效,可以在我的電腦中進行設置。
首先設置好DERBY_HOME這個環境變數,為DERBY_HOME指定你的derby目錄,假如你的derby解壓到了E:\ db-derby-10.4.1.3-bin目錄下,則可以在命令行中如下設置:
set DERBY_HOME=E:\ db-derby-10.4.1.3-bin
將DERBY_HOME\bin目錄添加到PATH環境變數中:
set path=%DERBY_HOME%\bin;%PATH%
這樣可以簡化你稍後在命令行中的輸入,否則你每次都必須使用腳本的全路徑或者你必須到DERBY_HOME\bin目錄中才能執行腳本。
最後需要Derby的jar包添加到classpath環境變數中,在DERBY_HOME%\bin目錄中提供了幾個腳本用於設置classpath,以簡化你手工在classpath中添加jar包的麻煩:
1) setEmbeddedCP。當使用內嵌模式來運行Derby時,可以使用該腳本來設置。該腳本將derby.jar和derbytools.jar添加到環境變數中;
2) setNetworkServerCP。當使用網路模式來運行Derby時,用該腳本來設置Derby服務端的classpath變數。該腳本將derbynet.jar添加到環境變數中;
3) setNetworkClientCP。當使用網路模式來運行Derby時,用該腳本來設置Derby客戶端的classpath變數。該腳本將derbyclient.jar和derbytools.jar添加到環境變數中。
一般只有當你通過derbyrun.jar來運行Derby工具時才會使用這些腳本。
Derby提供了三個工具腳本:1)sysinfo;2)ij;3)dblook。運行這三個腳本時,如果你沒有設置classpath環境變數,這些腳本會自動進行設置。
1) sysinfo
使用sysinfo可以顯示你的Java環境信息和Derby的版本信息。使用方法就是在命令行下直接輸入:
sysinfo.bat
2) dblook
使用dblook可以將全部或者部分資料庫的DDL定義導出到控制台或者文件中。使用方法:
dblook.bat –d <sourceDBUrl> [Options]
3) ij
使用ij工具來進行資料庫交互,執行SQL腳本,如查詢、增刪改、創建表等等。在命令行下輸入:
ij.bat
即可啟動ij工具,然後就可以開始執行SQL腳本了。當要退出ij工具時,在命令行下輸入
exit;
即可。
3、 使用ij腳本
1) 運行內嵌模式的Derby資料庫
在命令行中輸入ij.bat後啟動ij工具。然後通過如下命令創建資料庫,並與資料庫創建連接:
connect 『jdbc:derby:firstdb;create=true』;
通過connect命令可以與指定資料庫創建連接,通過一個JDBC URL來指定與哪個資料庫創建連接。ij命令是不區分大小寫的。
參數中jdbc:derby是Derby資料庫的驅動協議;firstdb是資料庫命,由於沒有指定路徑,資料庫將會被創建在當前你命令行下所在的目錄下;create=true表示如果資料庫不存在,則創建該資料庫;「;」是ij命令的終止符。
當資料庫創建成功時,Derby會在當前你命令行下所在的目錄下創建一個與資料庫命一致(這里是firstdb)的目錄,其中存放了資料庫的文件。
與資料庫連接上後,就可以開始執行SQL腳本了,如創建一個表格:
create table firsttable(id int primary key, name varchar(20));
然後插入記錄:
insert into firsttable values(1, 『Hotpepper』);
也可以執行查詢:
select * from firsttable;
也可以通過run命令來執行sql文件:
run 'E:\derby\demo\programs\toursdb\ToursDB_schema.sql';
最後通過exit;來退出ij工具。
你可以在當前你命令行下所在的目錄中找到一個derby.log的日誌文件,derby在其中記錄的資料庫啟動、關閉的信息。
2) 運行網路模式的Derby資料庫
這種模式下,需要使用兩個控制台窗口,一個用於啟動Derby資料庫服務端,另一個做為訪問Derby資料庫的客戶端。
可以通過DERBY_HOME\bin目錄下的startNetworkServer.bat來啟動Derby資料庫服務端,只需要在命令行中輸入:
startNetworkServer.bat
資料庫就啟動了,啟動成功會在控制台輸出如下信息:
已使用基本伺服器安全策略安裝了安全管理程序。
Apache Derby Network Server - 10.4.1.3 - (648739) 已啟動並且已准備好 2008-09-06
00:38:12.540 GMT 時在埠 1527 上接受連接
在另一個控制台使用ij命令訪問Derby資料庫服務端,在輸入ij.bat啟動ij工具後,通過如下命令建立與服務端的連接,並創建一個資料庫:
connect 'jdbc:derby://localhost:1527/seconddb;create=true';
參數中的資料庫命部分和內嵌模式不同,這里使用了「//localhost:1527/」,訪問網路模式的URL需要指定伺服器的IP地址和埠,其它的就和內嵌模式一樣了。
與服務端連接上後,就可以開始執行SQL腳本了,如創建一個表格:
create table firsttable(id int primary key, name varchar(20));
然後插入記錄:
insert into firsttable values(1, 『Hotpepper』);
也可以執行查詢:
select * from firsttable;
也可以通過run命令來執行sql文件:
run 'E:\derby\demo\programs\toursdb\ToursDB_schema.sql';
最後通過exit;來退出ij工具
4、 在Java應用程序中訪問Derby資料庫
使用Java代碼訪問Derby資料庫與訪問其它資料庫的區別如下:
1) JDBC驅動的不同;
2) 資料庫連接URL的不同;
3) 在訪問內嵌模式資料庫時,需要顯示關閉資料庫。
下面分別實例訪問內嵌模式和網路模式Derby資料庫的代碼
1) 訪問內嵌模式Derby資料庫
String driver = 「org.apache.derby.jdbc.EmbeddedDriver」;
String url = 「jdbc:derby:firstdb;create=true」;
Connection conn;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url);
}catch(Exception e) {
……
}finally {
……
DriverManager.getConnection("jdbc:derby:;shutdown=true");
}
建立好連接後,其它的數據操作,如查詢、更新數據都和其它資料庫一樣,這里不詳述。有一點需要注意,通過Java應用程序訪問內嵌模式Derby資料庫時,應用程序有責任需要在程序結束時關閉Derby資料庫,如上面代碼finally中的
DriverManager.getConnection("jdbc:derby:;shutdown=true");
shutdown參數用於關閉Derby資料庫,如果url中指定了資料庫命,則只會關閉指定的資料庫,而不會關閉整個Derby資料庫。資料庫關閉成功時,Derby會拋出一個錯誤碼為XJ015和一個08006的異常表示關閉成功,應用程序可以不處理這兩個異常。
2) 訪問網路模式Derby資料庫
網路模式和內嵌模式的不同出在於:
A. 資料庫連接URL的不同;
B. 應用程序退出時無效關閉Derby資料庫;
C. 資料庫驅動的不同;
String driver = 「org.apache.derby.jdbc.ClientDriver」;
String url = 「jdbc:derby: //localhost:1527/firstdb;create=true」;
Connection conn;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url);
}catch(Exception e) {
……
}
由於網路模式下,Derby資料庫做為一個獨立運行的資料庫,可以被多個應用程序所訪問,所以應用程序在運行結束時不應該關閉Derby資料庫。
D. 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);
}
}
}
E. derby資料庫是什麼類型資料庫
Derby資料庫是JAVASE 附帶的一個關系型資料庫
Apache Derby是一個完全用java編寫的資料庫,Derby是一個Open source的產品,基於Apache License 2.0分發。
Apache Derby非常小巧,核心部分derby.jar只有2M,所以既可以做為單獨的資料庫伺服器使用,也可以內嵌在應用程序中使用。Cognos 8 BI的Content Store默認就是使用的Derby資料庫,可以在Cognos8的安裝目錄下看到一個叫derby10.1.2.1的目錄,就是內嵌的10.1.2.1 版本的derby。
主要特點編輯
程序小巧,基礎引擎和內嵌的JDBC驅動總共大約2MB。
基於Java、JDBC和SQL標准。
提供內嵌的JDBC驅動,你可把Derby嵌入到基於Java的應用程序中。
支持客戶端/伺服器模式。
安裝、布置和使用簡單