• 0
mosh_java

شرح ربط الj2me بقاعدة بيانات بواسطة الانترنت :)

سؤال

بســم الله الـرحمــن الرحيــم

انا عارف اني اتأخرت كثيرا في وضع هذا الموضوع و ذلك بسبب انشغالي :)

في هذا الشرح سوف يتم ربط برنامج j2me مع servlet بواسطة اتصال http

في الj2me لا يتم دعم الjdbc و هي التقنية المستخدمة في j2se و j2ee للربط و التعامل مع قواعد البيانات سواء كانت oracle,MySQL,Apache,MS Access...

لذلك يتم وصل برنامج الj2me مع سيرفلت و السيرفلت هي التي تقوم بالاستعلام مع قاعدة البيانات و ارجاع القيم الى الموبايل كنص و يقوم برنامج الموبايل بالتعامل معها.

في المثال التالي يتم ربط الموبايل مع السيرفلت و يتم ارسال كلمة السر و اسم المستخدم و اسم قاعدة البيانات الى السيرفلت و بعدها يتم التأكد من الاسم و كلمة السر.

1- في جانب الموبايل ( j2me ):

import java.io.*;
import java.util.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;

public class testMySQL extends MIDlet implements CommandListener {
private String username;
private String url =
"http://localhost:8080/servlets-examples/servlet/getConnection";\\ موقع قاعدة البيانات

private Display display;
private Command exit = new Command("EXIT", Command.EXIT, 1);;
private Command connect = new Command("Connect", Command.SCREEN, 1);
private TextField tb;
private Form menu;
private TextField tb1;
private TextField tb2;
DB db;

public testMySQL() throws Exception {
display = Display.getDisplay(this);

}

public void startApp() {
displayMenu();
}

public void displayMenu() {
menu = new Form("Connect");

tb = new TextField("Please input database: ","",30,TextField.ANY );

tb1 = new TextField("Please input username: ","",30,TextField.ANY);

tb2 = new TextField("Please input password: ","",30,
TextField.PASSWORD);

menu.append(tb);
menu.append(tb1);
menu.append(tb2);
menu.addCommand(exit);
menu.addCommand(connect);
menu.setCommandListener(this);
display.setCurrent(menu);
}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void commandAction(Command command, Displayable screen) {
if (command == exit) {
destroyApp(false);
notifyDestroyed();
} else if (command == connect) {
db = new DB(this);
db.start();
db.connectDb(tb.getString(),tb1.getString(),tb2.getString());
}
}

public class DB implements Runnable {
testMySQL midlet;
private Display display;
String db;
String user;
String pwd;
public DB(testMySQL midlet) {
this.midlet = midlet;
display = Display.getDisplay(midlet);
}

public void start() {
Thread t = new Thread(this);
t.start();
}

public void run() {
StringBuffer sb = new StringBuffer();
try {
HttpConnection c = (HttpConnection) Connector.open(url);
c.setRequestProperty(
"User-Agent","Profile/MIDP-1.0, Configuration/CLDC-1.0");
c.setRequestProperty("Content-Language","en-US");
c.setRequestMethod(HttpConnection.POST);

DataOutputStream os =(DataOutputStream)c.openDataOutputStream();

os.writeUTF(db.trim());
os.writeUTF(user.trim());
os.writeUTF(pwd.trim());
os.flush();
os.close();

// Get the response from the servlet page.
DataInputStream is =(DataInputStream)c.openDataInputStream();
//is = c.openInputStream();
int ch;
sb = new StringBuffer();
while ((ch = is.read()) != -1) {
sb.append((char)ch);
}
showAlert(sb.toString());
is.close();
c.close();
} catch (Exception e) {
showAlert(e.getMessage());
}
}
/* This method takes input from user like db,user and pwd and pass
to servlet */
public void connectDb(String db,String user,String pwd) {
this.db = db;
this.user = user;
this.pwd = pwd;
}

/* Display Error On screen*/
private void showAlert(String err) {
Alert a = new Alert("");
a.setString(err);
a.setTimeout(Alert.FOREVER);
display.setCurrent(a);
}

};
}

2- جانب السيرفر (السيرقلت ) (j2ee , Servlet)

import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class getConnection extends HttpServlet {

public void init() {
}

public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,
IOException {

DataInputStream in = new DataInputStream(
(InputStream)request.getInputStream());

String db = in.readUTF();
String user = in.readUTF();
String pwd = in.readUTF();

String message ="jdbc:mysql://localhost:3306/"+db+","+user+","+pwd;
try {

connect(db.toLowerCase().trim(),user.toLowerCase().trim(),pwd.toLowerCase().trim());

message += "100 ok";

} catch (Throwable t) {
message += "200 " + t.toString();
}
response.setContentType("text/plain");\\ تحديد نوع الرد للموبايل على ان يكون من نوع نص
response.setContentLength(message.length());
PrintWriter out = response.getWriter();
out.println(message);\\ اضافة الرد
in.close();
out.close();
out.flush();\\ارسال الرد
}

public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {

doPost(request,response);
}

/* This method connects to MYSQL database*/
\\الربط مع قاعدة بيانات
private void connect(String db, String user,String pwd)
throws Exception {

// Establish a JDBC connection to the MYSQL database server.
//Class.forName("org.gjt.mm.mysql.Driver");
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+db,user,pwd);

}
}

و الامور تكون اوضح في نت بينز

و ان شاء الله سوف اضع شرح مفصل

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

34 إجابة على هذا السؤال .

  • 0

السلام عليكم و رحمة الله وبركاته

أخي الكريم يشرفني أنا أكون أول من يرد عليك.

كيف يتم الإتصال بين السيرفر و الموبايل هل ينفع عن طريق كابل USB ؟؟ أم من الضروري أن يكون الجهازان متصلان بالإنترنت عندئذ يجب إستبدال localhost ب رقم الأي بي الخاص بالسيرفر

وشكراً لك.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بســم الله الـرحمــن الرحيــم

كلامك صحيح

يتم الربط بينهم بواسطة الانترنت، وانت تعلم ان هذا مثال ولذلك يتوجب وضع localhost و لا استطيع وضع رقم سيرفر كتوضيح لانه قد يشتت

و مع العلم انك تستطيع الربط ايضا بدل http ان تستخدم ال socket

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا لك

.

.

و ان شاء الله سوف اضع شرح مفصل

با نتظارك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

شكرا على هذا الشرح

ولكنى عضو جديد وكمان جديد فى لغة J2ME فارجو الشرح بالتفصيل على كيفية عمل داتابيز وتحويل الجهاز الى سيرفر ثم الربط بالموبايل وتخزين وتبادل البيانات والاستعلام عن طريق الموبايل او العكس

للاهمية

وشكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
السلام عليكم

شكرا على هذا الشرح

ولكنى عضو جديد وكمان جديد فى لغة J2ME فارجو الشرح بالتفصيل على كيفية عمل داتابيز وتحويل الجهاز الى سيرفر ثم الربط بالموبايل وتخزين وتبادل البيانات والاستعلام عن طريق الموبايل او العكس

للاهمية

وشكرا

انا ايضا بحاجة الى التفاصيل (المملة لو امكن ) للضرورة والاهمية مع جزيل الشكر مقدما

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هل يجب تحويل الجهاز إلى server عن طريق انزال windows server ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لا

يكفي تحميل ال Glass Fish

و يمكن استخدام السيرفر الموجود في النتبينز

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

قمت بتنزيل glassfish

سؤال : هل يمكن توصيل الموبايل مع السيرفر وهم على وضع localhost عن طريق البلوتوث أو أي طريقة أخرى أسهل أم ضروري التوصيل يكون عن طريق الانترنت ؟

و شكرا على تعاونكم المستمر :)

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يمكن ايصالهم محليا

باستخدام localhost

او

127.0.0.1

عن طريق ال HttpConnection

او ال SocketConnection

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

عندما أقول بعمل run لسرفليت ..تظهرلي هذه الصفحة :-

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

java.io.EOFException

note The full stack traces of the exception and its root causes are available in the GlassFish v3 logs.

وعند الذهاب إلى السيرفلت عن طريق الرابط http://localhost:8084/babycareSer/babyCare/createUser

يظهرلي :-

HTTP Status 404 -

type Status report

message

descriptionThe requested resource () is not available.

GlassFish v3

أرجوكم ما الحل ؟

بارك الله فيكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكلة اخرى ظهرت لي :

"javax.microedition.io.ConnectionNotFoundException: TCP open

هل لديكم أي فكرة لحلها ؟

تم تعديل بواسطه Life Shadows
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

you must use Http Connection with servlets

OK

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

في الموبايل وضعت هذا الكود كما هو موضح :

HttpConnection c = (HttpConnection) Connector.open(url

);

هل هذا يكفي للموضوع ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

امممم هل هناك شرح للباراميتر لهذه النقطة :-

c.setRequestProperty("User-Agent","Profile/MIDP-1.0 Configuration/CLDC-1.0");

c.setRequestProperty("Content-Language", "en-CA");

-----

أنا قمت بتنزيلGlassFish Tools Bundle For Eclipse فقط >>>بما اني أستخدم الEclipse

هل هذا يكفي ؟

مشكلتي في ان صفحة localhost تعمل معي عند تشغيل السيرفلت لكن بعد ذلك تتعطل عند تشغيل ال midlet ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

اولا شكر لتعبك وجزاكم الله خيرا

لكنى اريد توضيح ليكفيه عمل client ب J2me وعمل الserver اللى بيرد عليه ب C#

فهل يمكن ذلك وان كان ممكن ياريت توضح ذلك بمثال بكل تفاصيل او اعطاء لينك لكتاب معين لعمل ذلك

وشكرا لكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ارجو شرح كيفيه عمل client بال J2ME

وعمل السيرفر بال C#

وارجو التوضيح بمثال

مثلا الclient يبعت بطلب شى معين من السيرفر(C#)والسيرفر يرد عليه باللى هو عايزه

ارجو الرد بسرعه

شكرا لمجهوداتكم وجزاكم الله كل خير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ارجو شرح كيفيه عمل client بال J2ME

وعمل السيرفر بال C#

وارجو التوضيح بمثال

مثلا الclient يبعت بطلب شى معين من السيرفر(C#)والسيرفر يرد عليه باللى هو عايزه

ارجو الرد بسرعه

شكرا لمجهوداتكم وجزاكم الله كل خير

to connect any 2 devices u should open server socket, to keep listenning for any incomming client (mobile phone in our case)

u may try to open a server socket using C# commands

then , at mobile phone, using J2ME

connect to the socket at server side

something like this:

HttpConnection c = (HttpConnection) Connector.open(url);

تم تعديل بواسطه Asmaa Abobakr
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمة الله وبركاته

انا عضوة جديدة فى المنتدى وفى لغة ال J2ME

لقد قمت بتنفيذ هذا المثال ولكن عند تشغيل ال servlet يحدث هذا ال error

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.io.EOFException

java.io.DataInputStream.readUnsignedShort(DataInputStream.java:323)

java.io.DataInputStream.readUTF(DataInputStream.java:572)

java.io.DataInputStream.readUTF(DataInputStream.java:547)

getConnection.doPost(getConnection.java:19)

getConnection.doGet(getConnection.java:46)

javax.servlet.http.HttpServlet.service(HttpServlet.java:617)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.29 logs.

وكان هناك نفس الخطأ يحدث للعضو Life Shadows

وقال ان المشكلة اتحلت عندو

برجاء الافادة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مرحبا

في حال كانت قاعدة البيانات من نوع Access 2003؟

ما هو التعديل على الكود

أرجو الرد ولك الشكر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مرحبا

في حال كانت قاعدة البيانات من نوع Access 2003؟

ما هو التعديل على الكود

أرجو الرد ولك الشكر

الـ Access ليست قاعده بيانات تعمل على سيرفر لانها ببساطه لا تقوم بانشاء وفتح Port لها

فهى لا تنفع فى هذه الحاله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا اخي على الرد السريع

طب في حال كانت قاعدة البيانات من نوع: SQL Server 2005

ما هو التغيير على الكود؟

ولك ألف شكر................

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

التغيير هيكون فى الـ URL , Username , password , Driver

الاربع اشياء فقط

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .