摘 要: 隨著手機功能的增強,通過無線網絡訪問企業數據庫的移動數據庫應用必然會進一步發展以提供更多的功能,同時其開發也會變的越來越復雜。本文通過研究J2ME和J2EE技術架構的特點,提出一套完整的移動設備訪問數據庫解決方案,詳細解析了移動客戶端和服務器端的設計方案,對移動查詢系統的架構、J2ME客戶端的實現和使用Hibernate連接數據庫進行了完整的剖析。
關鍵詞: J2ME J2EE 嵌入 Hibernate
1.前言
數據庫操作是現在項目開發的根本?,F在不管用什么語言編寫程序,一般都會涉及數據庫的連接,那么在使用J2ME開發平臺編寫手機應用程序的過程中也避免不了要涉及數據庫的連接。J2EE是一種用于建立服務器應用程序的系統平臺,它被定義為開發、部署、管理多層以網絡和組件技術為基礎、以服務器端為中心的企業級應用提供的開放的標準平臺。在這里本文主要用到了Hibernate。Hibernate是一個高性能的ORM持久性和查詢服務。Hibernate是Java應用和關系數據庫之間的橋梁,它負責Java對象和關系數據之間的映射。Hibernate內部封裝了通過JDBC訪問數據庫的操作,向上層應用提供了面向對象的數據訪問的API。以下是我在開發J2ME過程中的一點體會,希望能得到大家的指點。
2.系統設計思路
在這樣的中大型項目中,首先要設計完善的公共類,包括可繼承的控件基類、資源類、Hibernate業務邏輯類、Hibernate配置文件等。公共類要提供各種所需的API讓程序調用。Hibernate業務邏輯類主要提供訪問數據庫中指定行列數據、保存指定記錄到數據庫、排序現有記錄等的各種API。公共類還要求高度獨立,可以移植到其它類似數據席的應用中去。其次,設計統一的應用層架構,使不同的開發人員在相同的模式下進行開發,便于管理和查錯。
在本文討論的項目中,描述一個最簡單流程為:用戶在手機端進入某個查詢界面。通過選擇和錄入等方式設置查詢條件。查詢條件被發送至服務器。在服務器端有相應Servlet類接收手機發送的數據,調用Hibernate業務邏輯類操作數據庫,并將返回的結果集返回到手機客戶端并顯示。流程如下圖:
3.手機通過Servlet 與Web 服務器通信
圖2表示了手機客戶端程序MIDlet通過與Web服務器上Servlet 的交互完成訪問網絡數據庫示意圖:
基于J2ME平臺開發手機客戶端程序,支持打開網絡連接、傳送數據、訪問遠程服務器但,并不支持直接訪問數據庫的能力。因此,我們需要編寫一套服務器端程序來接受手機客戶端的請求指令,通過解析請求、調用Hibernate業務邏輯類、響應結果的方式把數據再傳回給手機。
4.JAVA手機訪問數據庫的實現
4.1實例描述
下面是一個J2ME與Servlet結合實現仿真手機查詢計算機考試成績的例子。用戶在手機端輸入要查詢的學生學號、密碼,Midlet 程序將參數傳送Web服務器端Servlet,Servlet程序根據傳來的學號、密碼,通過Hibernate連接數據庫服務器mysql,將讀取的學生成績信息以UF8格式編碼傳送給手機端Midlet程序。以下為Midlet 和Servlet的主要代碼。
4.2 開發手機客戶端Midlet
public void commandAction(Command c,Displayable s){
Form form1 = new Form(\"查詢結果\") ; //建立查詢結果界面
display.setCurrent(form1) ;
StringBuffer sb=new StringBuffer();
String stid=tf.getString();//獲取文本框中所輸入的學號
String url=\"http://127.0.0.1:8080/servlet/
ServletScore?stid=\"+stid;
HttpConnection conn =1; DataInputStream in=1;
try{ conn =(HttpConnection)Connector.open(url);
in= conn.openDataInputStream();
String ok=in.readUTF();
if(ok.equals(\"find\")){//將查詢結果放入sb
sb.append(\"學號\"+in.readUTF()+\"\\");
}else {sb.append(in.readUTF()+\"\\");}
}catch (Exception e){ sb.append(e.toString());
}finally{
try{
if(in!=1)in.close();
if(conn!=1)conn.close();
}catch(java.io.IOException ioe){}
}
form1.append(sb.toString());//顯示成績信息
}
4.3 開發服務器端響應servlet
Servlet的doPost方法代碼如下:
DataOutputStream out = new DataOutputStream(new
BufferedOutputStream(response.getOutputStream()));
String stid=request.getParameter(\"stid\");
TestUser tu = new TestUser();
User user = new User();
User=tu.getUser(stid);
If(user != 1){
String tycj =user.getTyjc();
String whcj =user.getWhjc();
String ok=\"find\";
out.writeUTF(ok);
out.writeUTF(tycj);
out.writeUTF(whcj);
}
4.4 Hibernate連接MySql數據庫的配置
Hibernate配置文件主要用于配置數據庫連接和Hibernate運行時所需的各種屬性,這個配置文件應該位于應用程序或Web程序的類文件夾classes中。Hibernate配置文件支持兩種形式,一種是xml格式的配置文件,另一種是Java屬性文件格式的配置文件,采用“鍵=值”的形式。建議采用xml格式的配置文件。xml配置文件可以直接對映射文件進行配置,并由Hibernate自動加載,而prop-erties文件則必須在程序中通過編碼加載映射文件。兩種配置方式的使用方法類似,本文主要以第一種方式為主詳細介紹如下:
Hibernate默認的xml格式的配置文件名稱為hibernate.cfg.xml。下面是連接MySql的Hibernate的xml配置文件。
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/stumanage
org.hibernate.dialect.MySQLDialect
org.hibernate.transaction.JDBCTransactionFactory
在上面的代碼中,\"localhost\"代表本地MySQL服務器,如果想連接其他服務器可以修改為要連接的MySQL服務器的名稱;\"stumanage\"為要連接的數據庫名稱;\"root\"為登錄用戶名;\"root\"表示用戶密碼;\"org.hibernate.transaction.JDBCTransaction
\"Factory\"表示采用JDBC的事務處理機制;\"UserForm.hbm.xml\"為持久化類對應的映射文件名稱。
4.5 hibernate-MySQL配置文件及簡單應用(CRUD)
User.hbm.xml 配置如下:
not-1=\"true\" /> DAO類核心代碼如下: public User getUser(String User_id){ Session session = sessionFactory.openSession(); Transaction tx = 1; User user = 1; try{ tx = session.beginTransaction(); Query query = session.createQuery(\"from User where id = \" + User_id); List Iterator while (it.hasNext()){ user = it.next();} tx.commit(); } catch (Exception e) { tx.rollback(); } finally{ session.close();} return user; } 4.6程序運行結果 編寫編譯servlet程序并放到相應的servlet目錄。啟動Web服務器,啟動mysql數據庫服務器,運行J2MEWTK的ktoolbar,建立項目編寫手機端代碼,編譯后選擇defaultphone手機模擬器,運行界面如圖3所示,在第一個界面輸入要查的學號,點擊OK,即可訪問服務器端ServletScore,獲得查詢結果。 5.結語 目前基于J2ME手機的移動信息管理和數據應用都比較簡單,但隨著網絡和硬件功能的增強,出現類似于臺式機數據庫系統復雜度的移動應用將會越來越多。本文提出了一種輕量級的移動電子商務開發架構,充分利用J2ME和J2EE技術各自的特點,將兩者有機結合起來,開發出輕便的J2ME客戶端和J2EE服務器端,從而來滿足企業級商業平臺開發的需要,對移動數據信息集成具有一定的實用參考意義。 參考文獻: [1]唐潤華,章璐,劉外喜.基于J2ME-J2EE移動集成查詢系統的設計與實現.科學技術與工程,2008,8,(1):87-89. [2]唐自仰,張克君.基于J2ME/Servlet的手機聊天系統.計算機工程,2009,35,(10):262-263. [3]宋漢增,沈琳.利用Hibernate對象持久化服務簡化Java數據庫訪問.計算機應用,2003,23,(12):135-137.