程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> J2ME程序與Servlet通訊訪問Access數據庫

J2ME程序與Servlet通訊訪問Access數據庫

編輯:J2ME
首 頁 | 新 聞 | SymBian | android| Windows Mobile | J2ME | 下載中心 | 游戲策劃 | 招聘與求職 | 購書指南 | 視頻教程 您現在的位置: 開發視界 >> J2ME >> 數據與存儲 >> 正文 J2ME程序與Servlet通訊訪問Access數據庫 作者:關文柏    文章來源:http://blog.csdn.Net/k7sem/    更新時間:2007-4-19 9:50:12 939 現在J2ME聯網的技術很多,本人也只是剛剛接觸這方面,這幾天幫別人調試了一些這方面的程序,學到了不少東西,下面就談談我學習的過程.

首先這種程序可以簡化的分解成三個層面,
1,J2ME的客戶端(MIDlet程序)
2,服務器端的servlet(servlet程序)
3,數據庫(Access或者是SQL等)

下面我通過一個小例子來實現通過手機客戶端發送請求,然後服務器端的servlet響應,servlet通過查詢Access數據庫的內容 ,返回給手機客

戶端並顯示出來。

很簡單的一個東西卻涉及到很多步驟。

開發環境:

操作系統: Windows 2000 professional
JDK版本: 1.4.2
WTK版本: 2.1
Tomcat版本:5.0

如果你還不明白JDK WTK  tomcat 是什麼東西的話,建議你補習一下基礎知識,這裡我就不說明了。

JDK的版本,一定要是1.4.0以上的,也許你用的低版本的並且和Tomcat的低版本兼容也不錯。但是我試過用 Tomcat5.0 + JDK1.0.3 就會報錯

,無法啟動Tomcat服務器.在Tomcat的log中,是這樣寫的"Unsuported JNI version 65537" 所以我采用相對高版本的JDK。

配置好環境變量,這裡也不多說了。測試一下你的環境變量。在cmd窗口,輸入java - version 看看JDK的版本。輸入Javac 看看是否報錯,無

錯就證明JDK的環境變量設置正確了。

然後我們編輯J2ME的客戶端程序,程序由兩個類構成。本人不是什麼高手,所以程序只能是實現功能為目的,並沒有體現什麼優化的價值。
---------------------------------NetMain.Java-----------------------------------------------------
import Javax.microedition.midlet.*;
import Javax.microedition.lcdui.*;

public class NetMain extends MIDlet implements CommandListener//繼承MIDlet 實現CommandListener接口
{
 private Display dis;
 sendMsg sm;
 private Command sd = new Command("連接",Command.OK,1);//發送數據的按鈕
 public NetMain()
 {
  dis = Display.getDisplay(this);//得到顯示對象
 }
 
 public void startApp()
 {
  Form f = new Form("聯網測試");//顯示在屏幕的Form對象
  f.append("發送數據");
  f.addCommand(sd);
  f.setCommandListener(this);//設置按鈕監聽
  dis.setCurrent(f);
 }

 public void pauseApp()
 {
 }
 public void destroyApp(boolean un)
 {
 }
 public void exit()
 {
  destroyApp(false);
  notifyDestroyed();
 }
 public void commandAction(Command c,Displayable d)
 {
  if(c == sd)
  {
   sm = new sendMsg(this);//調用sendMsg類,將本類作為參數傳入
   dis.setCurrent(sm);//顯示sendMsg類
   

  }

 }
}
------------------------------------------------------------------------------------------
------------------------------------sendMsg.Java------------------------------------------------------
import Javax.microedition.lcdui.*;
import Javax.microedition.io.*;
import Java.io.*;

public class sendMsg extends Form implements CommandListener,Runnable//繼承Form 實現CommandListener和Runnable接口
{
 String url = "http://127.0.0.1:8080/returnMsg";// 定義聯網用的URL
 String returnMsg=""; //獲得返回字符串
 Command exit=new Command("離開",Command.EXIT,1);//退出程序的按鈕
 Thread t;//定義聯網用線程
 NetMain nm;//NetMain的實例
 
 public sendMsg(NetMain nm)//構造函數,將NetMain的實例傳入
 {
  super("返回結果");//定義Form的標題
  this.nm = nm;
  t = new Thread(this);
  t.start();//啟動線程
  
 }
 public void run()
 {
  try
  {
   returnMsg = sendHttpGet(url);

//將url傳到sendHttpGet方法裡做參數,並返回服務器結果的字符串賦值給returnMsg
   
   //System.out.println(returnMsg);
   append(returnMsg);//顯示出返回結果
   addCommand(exit);
   setCommandListener(this);
   
  }catch(Exception e)
  {
   System.out.println(e);
  }

 }
 public String sendHttpGet(String url) throws IOException
 {
  HttpConnection hconn = null; //定義HTTP連接的對象
  DataInputStream dis = null; //定義數據輸入流
  StringBuffer msg = new StringBuffer() ; //創建一個StringBuffer存放收到的字符串
  String s="";
  try
  {
  hconn = (HttpConnection)Connector.open("http://localhost:8080/returnMsg");//得到連接對象
  dis = new DataInputStream(hconn.openInputStream());//用得到的對象的數據流做參數 再作為參數構成數據輸入流
  
  while(dis.readUTF()!= null) //判斷當數據流不為空的時候
  {
   msg = msg.append(dis.readUTF());//用readUTF()方法構造字符串 放在StringBuffer裡
  }
  
  }catch(Exception e){}
  finally
  {
   if(hconn != null)//關閉連接
    hconn.close();
   if(dis != null)
    dis.close();

  }
  
  return msg.toString();//將得到的StringBuffer 通過toString()方法,生成新的String並返回

 }
 public void show()
 {
  
 }
 public void commandAction(Command c,Displayable d)
 {
  if(c == exit)
  {
   
   nm.exit();//退出程序

  }
 }
}
-------------------------------------------------------------------------------------------------------------------

以上的兩個類,注釋應該能看明白。首先是一個Form,上面放了一個按鈕,當按按鈕的時候,啟動聯網線程,連接URL,然後返回一個字符串,

顯示在一個新的Form裡。很簡單是吧,呵呵。
下面我們來設計服務器端的部分。主要就是寫一個servlet程序。下面是程序代碼
-----------------------------------------returnMsg.Java----------------------------------------------------------------------

----
import Java.sql.*;
import Javax.sql.*;
import Java.io.*;
import Javax.servlet.*;
import Javax.servlet.http.*;

public class returnMsg extends HttpServlet
{
 public void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
 {
  res.setContentType("text/Html; charset=gb2312");//設置返回的類型
  
  ServletOutputStream out = res.getOutputStream();//得到輸出流
  
  DataOutputStream DOS = new DataOutputStream(out);
    
  DOS.writeUTF("這是測試結果");
  DOS.writeUTF("下面是數據信息");
  Connection conn = null;
  ResultSet rs = null;
  Statement stmt = null;
  
 
  try
  {
   
   String drname = "sun.jdbc.odbc.JdbcOdbcDriver";//這些是連接數據庫的驅動
   
   Class.forName(drname);
   
   String url = "jdbc:odbc:mydata";
   
   conn = DriverManager.getConnection(url);
   
   stmt = conn.createStatement();
   rs = stmt.executeQuery("select * from user");//查詢數據庫表 表名為user
   
   while(rs.next())
   {
    DOS.writeUTF("用戶ID:"+rs.getString("id"));//得到字段ID 和字段name 內容
    DOS.writeUTF("用戶名:"+rs.getString("name"));
   }
   rs.close();
   stmt.close();
   conn.close();

  }catch(Exception e)
  {
   
  }
 }
}
---------------------------------------------------------------------------------------------------------
首先把寫好的returnMsg.Java程序要進行編譯,生成.class文件。我們把生成好的class文件放在 Tomcat 目錄下的

webaPPS/root/web-inf/classes/ 裡面,注意路徑一定不要錯。
然後還要編輯web-inf目錄下面的web.XML文件.
再裡面加入這些信息:
--------------------------------------------------------
 <servlet>
        <servlet-name>returnMsg</servlet-name>
        <servlet-class>returnMsg</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>returnMsg</servlet-name>
        <url-pattern>/returnMsg</url-pattern>
    </servlet-mapping>
    ----------------------------------------------------
    你可以把原來裡面的這些內容刪除掉。
   
    注意:如果你在CMD 下面編譯returnMsg.java文件時候,出現import Javax.servlet.*;錯誤的時候,記得要在環境變量裡面填加一句,比

如在classpath裡面加上
    c:\Program Files\apache Software Foundation\Tomcat 5.0\common\lib\servlet-api.jar 就是填加servlet api的搜索路徑.

   然後我們還需要用Access生成一個數據庫文件,表名就是user,裡面有幾個字段 分別為ID 自動編號就行,name 隨便加幾個名字。然後要

把數據庫作為數據源進行連接。
   由於我們的系統是Windows 2000 所以在 開始---設置----控制面板-----管理工具---數據源ODBC   點"添加" 注意要在系統的DSN裡面 操

作,然後把你的數據庫放在一個
   沒有中文字符路徑中, 選擇它就可以了。數據源的名稱就是mydata


    現在我們可以啟動Tomcat服務器了,然後測試一下我們剛才寫的servlet,  我們打開IE浏覽器  輸入http://127.0.0.1:8080/returnMsg

來看看效果吧,,,,,,
    什麼?什麼都沒出現嗎,呵呵,,因為我們並沒有向浏覽器裡面輸出什麼,當然什麼也沒有,,,你可以查看原文件,如果裡面有你數據

庫的信息,那麼就是連接成功了。servlet一切正常。


    最後我們打開 WTK 新建工程文件,把前面我們寫的那兩個類 放在scr裡面,然後 build一下,然後run  點"連接" ,這時候模擬器中,就

會出現和剛才在IE原文件裡面一樣的文字了。
    是不是很開心。呵呵!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved