本文目錄一覽:
- 1、java jms為什麼引入消息中間件
- 2、java中可以用swing編的程序連接資料庫嗎?
- 3、javaswing怎麼向資料庫中添加數據
- 4、java swing JTable 顯示資料庫中一個表中的數據,表中有一百多條,可是JTable只能顯示25條
- 5、Java SWING如何從資料庫中讀取多組數據通過JTable顯示?
- 6、在JAVA Swing中對資料庫內容進行了修改,怎樣在主界面中實現JFrame的刷新,repaint()和validate()都沒用
java jms為什麼引入消息中間件
mom4j
mom4j是一個完全實現JMS1.1規範的消息中間件並且向下兼容JMS1.0與1.02.它提供了自己的消息處理存儲使它獨立於關係數據與語言,所以它的客戶端可以用任何語言開發.
OpenJMS
OpenJMS是一個開源的Java Message Service API 1.0.2 規範的實現,它包含有以下特性:
*. 它既支持點到點(point-to-point)(PTP)模型和發布/訂閱(Pub/Sub)模型。
*. 支持同步與非同步消息發送
*. JDBC持久性管理使用資料庫表來存儲消息
*. 可視化管理界面。
*. Applet支持。
*. 能夠與Jakarta Tomcat這樣的Servlet容器結合。
*. 支持RMI, TCP, HTTP 與SSL協議。
*. 客戶端驗證
*. 提供可靠消息傳輸、事務和消息過濾
UberMQ
UberMQ完全實現了Java Message Service 規範。UberMQ是因為現有的許多JMS提供商已經違背了分散式計算的核心原則:快速與簡單而開發的。
Hermes JMS
利用它提供的Swing UI可以很好的實現監控JMS providers。
ActiveMQ
ActiveMQ是一個開放源碼基於Apache 2.0 licenced 發布並實現了JMS 1.1。它能夠與Geronimo,輕量級容器和任Java應用程序無縫的給合。
Somnifugi
Somnifugi使得工作在同一個java虛擬機中的線程能實現消息互發。
MantaRay
MantaRay基於peer-2-peer 技術。它具有以下特性:
1.它既支持點對點(point-to-point)的域,又支持發布/訂閱(publish/subscribe)類型的域。
2.並且提供對下列類型的支持:經認可的消息傳遞,事務型消息的傳遞,一致性消息和具有持久性的訂閱者支持。
3.消息過濾體制。
4.能與WebLogic and WebSphere 給合。
5.支持TCP, UDP 與 HTTP傳輸協。
Presumo
Presumo也是一個實現Java Message Service API的JMS消息中間件。
JORAM
JORAM一個類似於openJMS分布在ObjectWeb之下的JMS消息中間件。
JMS4Spread
JMS4Spread是一個消息系統.它部分地實現了Java消息服務(JMS) API.
——————————————————————————————-
開源JMS簡單比較
我考慮在公司的項目中採用JMS來降低伺服器之間的耦合性,但為了降低成本,商業軟體是不考慮的,於是只能在開源的並且對商業友好的JMS伺服器中選擇一個了。選擇條件主要基於:
支持JMS 1.1規範
持久化,能滿足商業應用所需的穩定性
滿足項目的性能需求
最好本身提供JNDI服務
最好支持JMX
最好本身提供一個友好的管理工具
最好提供一份完整的文檔
準備進行選擇的JMS伺服器有:OpenJMS、UberMQ、ActiveMQ、MantaRay、JORAM
OpenJMS:老牌的JMS伺服器了,也是我最早知道的開源JMS伺服器,不過只支持JMS 1.02,已經很長時間沒有更新了,因此不予考慮。
UberMQ:採用NIO的JMS伺服器,以前我學習NIO的時候看過它的代碼,寫的蠻不錯的,也支持JMS 1.1。由於採用了NIO,所以具有很高的彈性,在滿足項目的性能需求上沒有什麼問題;本身也提供JNDI服務,但是遺憾的是我bind其他類型的數據時會出錯;提供admin和viewer兩個管理工具,但是在管理工具里不能創建ConnectionFactory和Destination並綁定到JNDI;文檔不太完整;最頭痛的對於持久化支持不好,如果關閉JMS伺服器再開啟,所有保存在JMS中的信息就全部丟失了,這點沒有辦法滿足商業應用所需的穩定性。
ActiveMQ:最近比較活躍的一個JMS伺服器,主頁上的介紹說在協議配置上可以選擇支持NIO,但是我仔細看它所支持的協議,卻並沒有提到如何配置,並且在實際的測試中也並沒有發現其有採用NIO的跡象,多連接一個Client端,伺服器端就增多了一個線程。滿足JMS 1.1,有多種方法進行持久化;本身不提供JNDI,也沒有對JMX的支持,本身不帶管理工具,採用Hermes進行管理(這個我會在以後提到),文檔也相對較少。
MantaRay:也是比較活躍的一個JMS伺服器,採用的是P2P模型,但是我不喜歡這種模型,對於JMS服務來說,很大的一個特點就是客戶端可以不用永遠在線,比如在更新某一個客戶端時需要暫停服務,等服務再度開啟時,這段時間內所接收到的信息並不會丟失,保存在伺服器上,所以我並不能看到P2P模型應用在JMS伺服器上的優勢,況且採用JMS服務就是為了解除耦合,速度並不是唯一需要考量的事情。出於我不喜歡其所採用模型,並且在運行其所帶的示例時都出現了示例時都出現了問題,兩個客戶端互發互收,但是彼此之間都收不到消息,於是不予考慮。
JORAM:支持JMS 1.1,可以持久化到文件,本身提供JNDI服務和提供對JMX的支持,自帶的管理工具可以添加ConnectionFactory和Destination並綁定到JNDI,這點對實現動態管理來說非常有用;文檔非常完備,100多頁的PDF,包含了各種配置和調整信息。其穩定性考慮的尤其好,不僅考慮到JMS伺服器的集群,甚至連JNDI的集群也考慮進去(儘管暫時對我而言還用不上),這點對於商業應用而言應該會有加分。
ActiveMQ是Apache License,JORAM是LGPL,這兩者對於商業應用都是友好的;UberMQ和MantaRay採用是Dual License,UberMQ的Dual License是只要你不分發,就可以允許使用;而MantaRay是商業使用需要應用一個商業的License。
比較上面的這些JMS伺服器,最終我是選擇了JORAM,其滿足了我的絕大部分要求,唯一比較遺憾的是其採用傳統的IO模型,每連接一個Client端會在伺服器端增加兩個線程,這點稍微影響了伺服器的彈性。不過考慮到我們的項目應用,這點暫時可以不用考慮,實在壓力過大了,最多到時候採用JMS集群唄:)
開源JMS再比較
四月份時我曾經比較了那時活躍度比較高的一些開源JMS——《開源JMS簡單比較》,時隔四個月,重新回顧這些項目,發現與四個月以前的比較有一些出入,在這裡再進行一些比較:)
比較的項目沒有變化,OpenJMS、UberMQ、ActiveMQ、MantaRay、JORAM,這段時間內沒有出現什麼JMS新秀,JBoss計劃在今年第四季度發布JBoss Messaging,但只要還是捆綁發行,我對其就沒什麼興趣。
在上次的比較中,OpenJMS已經有比較長的一段時間沒有更新了,但最近的四個月似乎又活躍了起來,其預備發行的0.7.7版計劃支持JMS 1.1(這個來的太晚了些),其主頁上的Changelog表明了接下來的這個版本有著較大的變化。這對那些以前將OpenJMS應用在項目中的人來說是一個不錯的消息,但對正在選擇JMS的人而言,OpenJMS的這些改進來的還是稍稍晚了些。
UberMQ這段時間沒有更新,我對它的評價與以前一樣,沒有任何變化。
MantaRay在其主頁上更新了一系列的Flash Demos,通過這些Demo,我更堅定了我的看法——MantaRay並不適合用於企業的JMS服務。
P2P這個詞雖然熱,但是不是什麼地方都需要P2P的,在我看來JMS就是用於解除各個應用之間的耦合,速度是個關鍵指標,但比起這個關鍵指標更重要的是它存在的意義。我更傾向於採用MantaRay在Flash中所反對的那種模型,通過中心伺服器進行轉發,可以存放離線消息以及解除耦合。更何況,企業應用中很少有類似MantaRay演示DEMO中出現的那種網路拓撲圖,並不是任何兩個節點之間都是互聯互通的。當然,如果MantaRay能夠做一些改進,先嘗試採用點對點模型,如果點對點失敗,這時將消息發送到中心伺服器上(但這一切必須對用戶透明),我會比較贊成,既具有傳統優勢,又能提高消息發送接收速度。
至於上篇文章中提到的運行其自帶的示例出現了問題,這次在Flash演示中終於找到了答案。看來MantaRay真應該提高其示常式序的易用性,這麼複雜的操作,要是不看Flash演示,還真難想到該這樣操作:(
ActiveMQ是讓我感到驚訝的一個項目,上次對它的評價似乎有失偏頗。 ActiveMQ支持多種網路拓撲模型,既可以採用傳統JMS的Client-Server模型,也可以採用MantaRay的P2P模型,還可以僅僅支持同一JVM內的JMS應用。持久化機制一如既往的優秀,默認採用Apache Derby資料庫持久化,也可以配置為各種主流資料庫來持久。目前也提供了一簡單的JNDI實現,對於JMS應用而言,這已經夠用了。
但是其缺點也同樣明顯,本身不提供管理工具;示例代碼非常少;雖然主頁上的文檔看上去比較全面,但是一來缺乏一種有效的組織方式(文檔凌亂,用戶很難由淺入深進行了解,提高了門檻),二來文檔整體的專業性太強(不了解ActiveMQ?看文檔去吧,可是文檔是寫給了解ActiveMQ的用戶看的……),對於普通用戶而言,門檻有點高。
而且感覺ActiveMQ有點不安於JMS的本份,開始做一些周邊應用了,看其主頁就可以看出來,多了很多比較流行的辭彙。說不上這是優點還是缺點,但就我的角度而言,我更希望其專註於做好它的JMS。
JORAM在這段期間推出了4.3.x的版本,也是我們在應用中所採用的版本,我的評價和上次相比沒有什麼大的變化。主頁上說其速度有了提高,但我們應用中JMS數據量相對較少,沒有感覺出來。稍微遺憾的是在我們試用的過程中,從4.2.3升級到4.3,老版本的持久化消息都無法在新版本上識別出來,只能全部清空。在兼容性上,看來JORAM還得多下功夫。總而言之,我們在應用中採用JORAM,感覺就是波瀾不驚,沒碰到什麼大問題,也沒有什麼驚喜。
java中可以用swing編的程序連接資料庫嗎?
SWING本來就可以連資料庫的啊
用JDBC技術連資料庫 或者用io流保存在文件中
你可以在SWING中寫個方法 方法中定義一個連接把上次運行次數讀出來 再+1存進去
然後在每次程序啟動的時候調用這個方法不就可以了
先配個數據源
再個資料庫連接類吧
先導入java.sql包
import java.sql.*;
public class DB{
Connection con;
Statement stt;
private void begin()
{
if(con!=null||stt!=null)
{
this.closs();
}
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
con = DriverManager.getConnection(“jdbc:odbc:數據源名”);
stt = con.createStatement();
}
public Resultset qu(String sql)
{
this.begin();
return stt.executeQuery(sql);
}
public boolean cun(String sql)
{
this.begin();
return stt.execute(sql);
}
public void closs()
{
stt.close();
con.close();
}
}
然後在你的swing程序中 要連資料庫的時候就
DB a = new DB
要存數據就
a.cun(“update/insert ….”)
要取就
a.qu(“select … from…”)
javaswing怎麼向資料庫中添加數據
首先你要明白一個問題javaswing給你提供了一個可視化的界面,這個界面可以使你在後端接受到界面互動產生的數據行為。
然後,寫入資料庫這個操作,你只要知道你寫一個jdbc的連接,寫sql語句。
你把這兩步分開做第一步是列印點按鈕列印你的對話框里的內容。第二部,你寫個main方法寫入資料庫最後把這兩步合併起來。
java swing JTable 顯示資料庫中一個表中的數據,表中有一百多條,可是JTable只能顯示25條
JTable大小固定了,應該把JTable放在JScrollPane裡面
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(table);
Java SWING如何從資料庫中讀取多組數據通過JTable顯示?
public void inithavesold(){//建立查詢已銷售商品表格、模型
try {
VectorString columnName = new VectorString();//欄位名
VectorVectorObject dataVector = new
VectorVectorObject(); //存儲所有數據,裡面每個小的Vector是存單行的
columnName.add(“編號”);
columnName.add(“商品名”);
columnName.add(“數量”);
columnName.add(“價格”);
columnName.add(“總盈利”);
conn = DataBase.getconnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(“select * from havesold”);
while(rs.next()){
VectorObject vec = new VectorObject();//就是這個存單行的,最後放到上面的大的Vector裡面
for(int i=1;i=5;i++){
vec.add(rs.getObject(i));
}
dataVector.add(vec);
}
tmhavesold = new DefaultTableModel();//建立默認的JTable模型
tmhavesold.setDataVector(dataVector, columnName);//設定模型數據和欄位
DataBase.free(conn, stmt, rs);
} catch (SQLException e) {
e.printStackTrace();
}
jtable.setModel(tmhavesold);
}
在JAVA Swing中對資料庫內容進行了修改,怎樣在主界面中實現JFrame的刷新,repaint()和validate()都沒用
你想進行局部刷新,還是整體刷新。
①主要是個思路問題,想局部刷新的話,將修改後的值,傳回到主界面中,通過x,y定位,修改單元格的值(你主界面應該是表格)
②想整體刷新的話,就簡單了,不用傳值,修改完成後,釋放當前窗口資源,新建一個資源窗口。
PS:如還有問題,可百度Hi我!或留聯繫方式,good luck!~
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/295178.html