❶ 在哪裡去設置埠號,怎樣設置呢
「控制面板」的「管理工具」中的「服務」中來配置。
1、關閉80口:關掉WWW服務。在「服務」中顯示名稱為"World Wide Web Publishing Service",通過Internet 信息服務的管理單元提供 Web 連接和管理。
2、關掉25埠:關閉Simple Mail Transport Protocol (SMTP)服務,它提供的功能是跨網傳送電子郵件。
3、關掉21埠:關閉FTP Publishing Service,它提供的服務是通過 Internet 信息服務的管理單元提供 FTP連接和管理。
4、關掉23埠:關閉Telnet服務,它允許遠程用戶登錄到系統並且使用命令行運行控制台程序。
5、還有一個很重要的就是關閉server服務,此服務提供 RPC支持、文件、列印以及命名管道共享。關掉它就關掉了win2k的默認共享,比如ipc$、c$、admin$等等,此服務關閉不影響您的共他操作。
6、還有一個就是139埠,139埠是NetBIOSSession埠,用來文件和列印共享,注意的是運行samba的unix機器也開放了139埠,功能一樣。以前流光2000用來判斷對方主機類型不太准確,估計就是139埠開放既認為是NT機,現在好了。
關閉139口聽方法是在「網路和撥號連接」中「本地連接」中選取「Internet協議(TCP/IP)」屬性,進入「高級TCP/IP設置」「WINS設置」裡面有一項「禁用TCP/IP的NETBIOS」,打勾就關閉了139埠。
對於個人用戶來說,可以在各項服務屬性設置中設為「禁用」,以免下次重啟服務也重新啟動,埠也開放了。
網上鄰居右鍵屬性-本地連接右鍵屬性-Internet協議Tcp/ip-雙擊進入-高級-選項-Tcp/ip篩選-屬性-啟用篩選-輸入埠
❷ linux中埠號設置是在哪個配置文件,該如何設置
在httpd.conf
修改 #listen 3000,去掉#
可以設置多個。
listen 9090
listen 6060
❸ 關於MyEclipse的資料庫 Derby的問題
在MyEclipse的設置選項中,對Database選擇中的,查一下你所啟用的資料庫連接,伺服器、用戶名、密碼是否都正確
❹ Myeclipse中Myeclipse Derby的問題
首先是把derby的插件復制到MyEclipse的plugins包下,然後在MyEclipse目錄打開mylipse.ini配置文件:
[color=darkred][color=darkred][color=darkred][color=blue]-showsplash
com.genuitec.myeclipse.proct
--launcher.XXMaxPermSize
256M
-vmargs
-Dosgi.requiredjavaVersion=1.5
-Xms128m
-Xmx512m
-Dosgi.splashLocation=e:\MyEclipse 6.0.0 M1\eclipse\MyEclipseSplash.bmp
-Duser.language=en
-XX:PermSize=128M
-XX:MaxPermSize=256M[/color][/color][/color][/color] 在256M下加入-clean,這里注意了,剛剛開始我是加在256M上面,但是重啟了幾回MyEclipse,就是加不進來,後來加在下面就好了,原因我現在還沒弄明白呢,有高手望指教!配置好後,重啟MyEclipse,右擊項目,如果出現Apache Derby選項就是配置成功了!然後把它載入到項目中, 在運行的時候要注意,一定要先啟動MyEclipse的tomcat,然後才啟動derby資料庫,因為MyEclipse比較霸道,總認為自己是第一個啟動的連接,所有如果先啟動derby資料庫,MyEclipse的tomcat就無法啟動了!
另外,如果是Eclipse的話,配置基本一樣,就是在運行項目時,可以不分先後啟動derby資料庫和Eclipse的tomcat,因為Eclipse的tomcat不搶占第一連接!
❺ Cognos 10 64位 和oracle 64位的配置 求助
能測試成功,說明cognos連接數據是成功的,服務無法啟動可能是其他原因。
derby.properties,init_contentstore.sql和service.properties三個文件你不要修改的,只需要在content Manager配置資料庫訪問就行了。
服務無法正常啟動的原因,有可能是jdk,如果你本機配置了jdk路徑,cognos服務啟動會報錯,一般默認都使用cognos本身自帶的jdk。你看一下錯誤提示,我覺得服務無法啟動可能是由於其他原因導致,你好好分析一下,希望可以幫助你。
❻ 戴爾交換機配置命令大全
交換機除了能夠連接同種類型的網路之外,還可以在不同類型的網路(如乙太網和快速乙太網)之間起到互連作用。這篇文章主要介紹了DELL6224交換機基本配置命令一覽,需要的朋友可以參考下
具體介紹
1:配置登錄用戶,口令等
console> //用戶直行模式提示符
console>enable //進入特權模式
console# //特權模式(配置密碼後必須輸入密碼才可進入特 權模式)
console#config //進入全局配置模式 configure
console(config)# //配置模式提示符
console(config)#exit //還有一個命令是end也和exit差不多
console#quit
console>
console(config)#hostname xxx //設置主機名成為xxx這里使用console
console(config)#enable password xxx //設置使能口令為明文顯示為xxx,必須不少於8字元遠程telnet的時候起作用本地通過console口不需要密碼的
console(config)#username zy password 12345678 level 15 //定義交換機的用戶名以及對應的許可權。
console(config)#line console //進入console口配置視圖,這里可以設置通過超級終端訪問交換機的一些參數
console(config-line)#enable authentication default //配置訪問角色為默認
console(config-line)#exec-timeout <0-65535> minutes // 設置console口自動關閉時間,以分鍾為單位
console(config-line)#speed 9660 //設置訪問速率,一般9660為默認設置。
console(config-line)#password xxxx //不少於八位的密碼用來訪問console,與enable password xxx,差不多
console(config-line)#no password //刪除password密碼
console(config-line)#exit //退出console口配置視圖
console(config)#line telnet //進入telnet配置視圖
console(config-telnet)#enable authentication default //配置訪問角色為默認
console(config-telnet)#exec-timeout <0-65535> minutes // 設置telnet訪問閑置自動關閉時間,以分鍾為單位
console(config-telnet)#password xxxx //不少於八位的密碼用來訪問telnet
console(config-telnet)#no password //刪除password密碼
console(config-telnet)#exit //退出telnet口配置視圖
console(config)#line ssh //進入ssh配置視圖
console(config-ssh)#enable authentication default //配置訪問角色為默認
console(config-ssh)#exec-timeout <0-65535> minutes // 設置ssh訪問閑置自動關閉時間,以分鍾為單位
console(config-ssh)#password xxxx //不少於八位的密碼用來訪問ssh
console(config-ssh)#no password //刪除password密碼
console(config-ssh)#exit //退出ssh口配置視圖
2:cisco2960 VLan設置
console> enable //進入特權模式
console#configure //進入配置視圖
console(config)#vlan database //進入vlan設置
console(config-vlan)#vlan 2 //創建vlan 2
console(config-vlan)#no vlan 2 v //刪除vlan 2
console(config-vlan)#exit //回到特權模式下
console(config)#interface vlan 2 //進入vlan2配置視圖
console(config-if-vlan2)#name xxx //為vlan取名字
埠設置命令:
console(config)#interface ethernet 1/g1 //進入網口1, / 1/g1指的是第一個插槽上的第一個千兆網口
console(config-if-1/g1)# //介面視圖模式
console(config-if-1/g1)#speed 10/100/1000 //定義埠的帶寬,只能從這三種模式中做選擇。
console(config-if-1/g1)#plex full/half //定義雙工模式
console(config-if-1/g1)#negotiation //啟用自動協商速度和雙工參數
console(config-if-1/g1)#no negotiation //禁用自動協商速度和雙工參數
console(config-if-1/g1)#switchport mode access/trunk/general //定義埠類型,總共有三種類型
console(config-if-1/g1)#switchport access vlan 2 //將埠以access模式加入到vlan 2中
console(config-if-1/g1)#shutdown //關閉當前埠
console(config-if-1/g1)#no shutdown //打開當前埠
console(config)#interface ethernet 1/g24 //進入匯聚千兆口24,共有4個千兆combo口21-24
console(config-if-1/g24)#
console(config-if-1/g24)#plex auto/full/half //設置埠工作模式為 自適應/全雙通/半雙通
console(config-if-1/g24)#switchport mode trunk //設置當前埠模式為匯聚口
console(config-if-1/g24)#switchport mode access //設置當前埠模式為接入模式
console(config-if-1/g24)#switchport trunk allowed vlan add/remove 1,2 //將當前匯聚埠加入或移除從vlan1,2通過,vlan修剪,默認為all,全部允許
console(config-if-1/g24)#switchport access vlan 2 //將當前埠以access模式加入到vlan 2中
若21-24號口用作光口的話配置介面就對應1/xg1-1/xg4代表使用光線做10G上聯口用:
console(config)#interface ethernet 1/xg1 //進入匯聚萬兆口1,共有4個千兆combo口21-24對應四個1/xg1-1/xg4萬兆光口
console(config-if-1/xg1)#
console(config-if-1/xg1)#plex auto/full/half //設置埠工作模式為 自適應/全雙通/半雙通
console(config-if-1/xg1)#switchport mode trunk //設置當前埠模式為匯聚口
console(config-if-1/xg1)#switchport mode access //設置當前埠模式為接入模式
console(config-if-1/xg1)#switchport trunk allowed vlan add/remove 1,2 //將當前匯聚埠加入或移除從vlan1,2通過,vlan修剪,默認為all,全部允許
console(config-if-1/xg1)#switchport access vlan 2 //將當前埠以access模式加入到vlan 2中
將埠加入vlan
console(config)#interface ethernet 1/g1
console(config-if-1/g1)#switchport mode access
console(config-if-1/g1)#switchport access vlan 2
將多個埠加入到VLAN中
console(config)#interface range ethernet 1/g1-1/g12 //進入1-12這個介面組里配置
console(config-if)#switchport mode access
console(config-if)#switchport access vlan 2
console#show vlan //用於查看配置後結果
3:設置VTP cisco專有的vlan終極協議也成為區域網幹道協議,作用是十幾台交換機在企業網中,配置VLAN工作量大,可以使用VTP協議,把一台交換機配置成VTP Server, 其餘交換機配置成VTP Client,這樣他們可以自動學習到server 上的VLAN 信息
4:交換機配置IP地址
console(config)#interface vlan 1 //進入vlan 1
console(config-if-vlan1)#ip address 119.167.223.221 255.255.255.128 //設置交換機的管理ip地址
console(config)#ip default-gateway 119.167.223.254 //設置交換機的默認網關
console(config)#end //退出當前模式
5: 交換機保存設置命令
console# running-config startup-config //將當前正在使用中的配置保存到交換機開機需要載入的配置文件里去。
console# running-config backup-config //將當前的配置保存在備份配置文件里
6:交換機顯示命令
特權模式下:
console#show running-config //顯示當前正在使用的配置信息
console#show startup-config //交換機開機是自動載入的 配置文件
console#show vlan //顯示vlaner配置信息
console#show interfaces configuration ethernet 1/g1 //顯示二層埠狀態,可以用來決定此口是否為二層或三層口
console#show ip interface vlan100 //查看交換機vlan100的ip配置信息
console#show version //查看交換機固件版本信息
7:基於埠的mac地址綁定
console#config //進入配置視圖模式
console(config)#interface ethernet 1/g1 //進入具體埠視圖模式下
console(config-if-1/g1)#switchport port-secruity //配置埠安全模式
console(config-if-1/g1)#switchport port-secruity mac-address MAC(主機的mac地址) //配置該埠要綁定的主機的MAC地址
console(config-if)#no switchport port-secruity mac-address MAC(主機的mac地址) //刪除綁定主機的mac地址
8:配置交換機的snmp功能
console(config)#snmp-server community xxx ro //xxx為自定義的共同體名稱,並且團體的許可權為只讀。
console(config)#snmp-server host x.x.x.x(ip地址) xxx(團體名) //設置管理機x.x.x.x,同時允許該管理機以團體明xxx訪問。
console(config)#snmp-server host 119.167.223.221 zy //例子
console(config)#snmp-server enable traps //啟用snmp服務
9:交換機禁ping配置
console(config)#access-list 110 deny icmp any any //配置訪問控制列表(Access Control List,ACL)110指的ICMP對應ping。
console(config)#access-list 110 permit ip any any //運行所有的IP協議的應用
console(config)#int vlan 1
console(config-if-vlan1)#ip access-group 110 in
console(config)#int vlan 2
console(config-if-vlan2)#ip access-group 110 in
console(config)#int vlan 3
console(config-if-vlan3)#ip access-group 110 in
console(config)#interface ethernet 1/g1 //埠禁ping
console(config-if-1/g1)#ip access-group 110 in
10:恢復交換機出廠設置
console#clear config //恢復交換機出廠設置
console#reload //重新啟動交換機
相關閱讀:交換機工作原理過程
交換機工作於OSI參考模型的第二層,即數據鏈路層。交換機內部的CPU會在每個埠成功連接時,通過將MAC地址和埠對應,形成一張MAC表。在今後的通訊中,發往該MAC地址的數據包將僅送往其對應的埠,而不是所有的埠。因此,交換機可用於劃分數據鏈路層廣播,即沖突域;但它不能劃分網路層廣播,即廣播域。
❼ 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資料庫。
❽ 優化Derby資料庫程序性能的方法有哪些
derby資料庫可視化操作工具,該怎麼解決
淺談一下Cognos處理大數據的思路,僅針對10.2.1以下的版本,對於10.2.1當中引入的hadloop等分布式數據倉庫等不做介紹。我們主要從一個一般中等項目當中,用怎樣的思路來優化我們的查詢。
我們主要從3個思路來思考大數據的處理
一、資料庫層次
現在主流的Cognos項目,主要的開發模式還是基於rolap的dmr報表建模。因此,資料庫的優化就顯得由為重要。主要通過以下幾個方面優化我們的資料庫:
(1)維度id,維度層次id等關鍵減縮欄位建立索引建立、維護。
(2)根據數據量的大小,按時間等進行分區優化。
(3)高速緩沖表MQT的使用
(4)表空間、緩沖池設置等
(5)資料庫性能優化
二、Cognos Server優化
Cognos優化包括對配置文件的優化,集群的搭建,服務和日誌的開啟等基於cognos 軟體安裝,配置的優化,主要包括以下幾個方面:
2.1 apache 配置優化
Timeout(超時)/MaxKeepAliveRequests(最大的請求數)/KeepAliveTimeout(請求超時)的優化配置
2.2Cognos自帶tomcat配置調優
(1)可修改TOMCAT配置文件CRN_ROOT\tomcat.\conf\server.xml。其參數集中在行:
可以對maxProcessors(最大進程數)/AcceptCount(最大連接數) ConnectionTimeout(連接超時)進行修改
(2)文件路徑:CRN_ROOT\tomcat.\conf\web.xml
可以對session-timeout進行修改.
❾ 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 信息的工具類;