PDA

View Full Version : آموزش: ارتباط با SQLServer بدون استفاده از WebService



بمب منطقی
چهارشنبه 27 فروردین 1393, 10:50 صبح
با سلام.
بنده به تازگی با استفاده از Eclipse IDE ، اندروید کار می کنم و برنامه نویس Asp.net هم هستم.از آنجا که در این تالار بعضی از دوستان ، در کار با SqlServer بدون استفاده از WebService و با استفاده از درایور JDBC دارای اشکال می باشند(و خود من نیز جزو این افراد بودم) با تحقیق در سایت های مختلف ، به روشی کامل و تست شده تونستم برسم که در ذیل بصورت مرحله به مرحله بیان میکنم.
نکته: JDBC درایوری جهت ارتباط با دیتابیس SQL Server می باشد که در jTDS API ارائه شده است. نسخه 3 این درایور با نسخه های 6.5 ، 7 ، 2000 ، 2005 ، 2008 و 2012 SQLServer می تواند کار کند.ولی بدلیل بعضی مشکلاتی که من به آنها برخورد کردم نسخه 1.2.7 درایور JDBC رو انتخاب نمودم.

1- Eclipse من نسخه INDIGO و ADT نسخه 18.0.0 و JDK نسخه 1.6u45 می باشد
2- jTDS و دقیقا نسخه 1.2.7 رو از این لینک (http://sourceforge.net/projects/jtds/files/jtds/1.2.7/jtds-1.2.7-dist.zip/download) دانلود کنید و پس از دانلود ، فایل را unPack کرده و فایل jtds-1.2.7.jar رو به پوشه lib پروژتون اضافه کنید (اگر پوشه lib در پروژتون وجود نداشت با راست کلیک بر روی نام پروژه و از طریق New->Folder اونو ایجاد کنید)
3- بر روی فایل jtds-1.2.7.jar در پوشه lib راست کلیک کرده و روی Build Path -> Add to Build Path کلیک کنید.
4-دوباره بر روی فایل فوق راست کلیک کرده و اینسری بر روی Build Path ->Configure Build Path کلیک کنید و در پنجره باز شده به تب Order and Export رفته و در لیست داخل آن گزینه jtds-1.2.7.jar - SQLtest/lib را تیک بزید و سپس OK بزنید تا پنجره بسته شود.
5-حالا میتوانید با استفاده ازFunction ذیل اطلاعات DataBase ای به مشخصات زیر را بخوانید:
SQL Server2008R2: DBMS
نام پایگاه داده: Cake
نام کاربری دسترسی به سرور (دقت کنید که نام کاربری کاربر پایگاه داده نیست) : sa
رمز عبور دسترسی به سرور: 123
نام جدول مورد نظر: Groups
اولین فیلد جدول : از نوع int
دومین فیلد جدول : از نوع nvarchar
سومین فیلد جدول : از نوع nvarchar

private void FetchDBdata()
{
try
{
log.i("Package", "open");
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
Log.i("Connection", "open");
Connection DbConn = DriverManager.getConnection("jdbc:jtds:sqlserver://192.168.1.25;databaseName=Cake;", "sa", "123");
Statement stmt = DbConn.createStatement();
Log.i("Table", "fetch");
ResultSet reset = stmt.executeQuery("select * from Groups");
Log.i("Row", "Display");
while (reset.next())
{
Log.i("Row Output", reset.getInt(1) + " " + reset.getString(2) + " " + reset.getString(3));
}
DbConn.close();
}
catch (Exception ex)
{
Log.e("Error", ex.getMessage().toString());
}
}




امیدوارم این مطلب برای دوستان مفید واقع بشه.موفق باشید

saeed_g21
چهارشنبه 27 فروردین 1393, 11:11 صبح
من نیاز دارم به 2000 هم وصل بشم البته میتونستم به 2000 به بالا وصل بشم

باورژن 3 به چه مشکلاتی برخورد کرده بودی ؟

بمب منطقی
چهارشنبه 27 فروردین 1393, 12:35 عصر
اولین و مهم ترین مشکل در ساخت instance از کلاس Driver در خط 6 کد فوق بود.وقتی Cursor کامپایلر به این خط می رسید به کلاس net.sourceforge.jtds.jdbc.Driver ایراد میگرفت و جلوتر نمیرفت. و اگر هم به طریقی (مثلا استفاده از MicrosoftJDBC (http://msdn.microsoft.com/en-us/sqlserver/aa937724.aspx)) از این خط رد میشد در خطوط بعدی ایراد در میومد.
SqlServer2000 رو با نسخه 1.2.7 درایور JDBC استفاده کن ببین مشکل حل میشه؟و اگه تونستی نتیجش رو اینجا بگو.آخه این مشکل رو بعضی از دوستان دارن!

esmaeilbf
چهارشنبه 27 فروردین 1393, 12:49 عصر
به سه دلیل ارتباط مستقیم به دیتابیس توصیه نمیشه

1- security
2-speed
3-accessibility
توضیحات بیشتر
http://stackoverflow.com/questions/13471822/why-dont-connect-android-to-database-directly

بمب منطقی
چهارشنبه 27 فروردین 1393, 13:21 عصر
1- Security : شما تصور کنید یک برنامه اندروید نوشتید که نمیخواید تو اینترنت قرارش بدید و قراره تو یک شبکه Lan کار کنه؟ آیا باز حاضرید که خودتون رو درگیر WebService کنید؟ اصلا تو همچین شبکه ای که هم برنامه قرار داره و هم SQL Server ، امنیت مهمه؟ وقتی شما یک برنامه حسابداری می نویسید Connection String رو کجا نگهداری میکنید که اگه قرار شد تغییرش بدید سریع و بدون نیاز به کامپایل مجدد عوضش کنید؟ حتما داخل یک فایل ini و شاید هم یک فایل رمزنگاری شده.آیا با این کار دارید امنیت رو رعایت میکنید؟در یک چنین شبکه هایی هست که اگه قرار بشه یک برنامه اندروید برای مدیر سیستم بنویسید که بدون نیاز به مثلا نرم افزاری حسابداریش بتونه یک سری گذارشات رو تهیه کنه دیگه بدون نیاز به IIS و ASP.net یا PHP و دنگ و فنگاشون میتونید به راحتی با استفاده از JDBC کد بزنید :لبخندساده:
2- Speed : من هنوز در JDBC تازه کار هستم ولی Stored Procedure های SQLServer میتونه مشکل رو حل کنه البته اگه JDBC بتونه پشتیبانیش کنه.چون همونطور که میدونید یکی از مزایای Stored Procedure اینه که اجرای SQL Query ها رو از برنامه سمت کاربر به SQL Server محول میکنه.
3- Accessibility : با Stored Procedure و Threading مشکل حل میشه :لبخندساده:

saeed_g21
چهارشنبه 27 فروردین 1393, 14:43 عصر
من خودم کلی سروکله زدم باهاش نشده که نشده
هرجا که برنامه میدم بایستی SQL اونارو تبدیل کنم خودم 2012 میزنم که قشنگه:بامزه: نصبش و از هرجهت راحت هست

بمب منطقی
پنج شنبه 28 فروردین 1393, 09:23 صبح
منم تست کردم نشد.

saeed_g21
پنج شنبه 28 فروردین 1393, 09:28 صبح
پس با این حساب کلا پرونده SQL2000 بسته میشه ؟
بیخیال 2000 بشیم بریم سراغ ورژن های جدید SQLServer ؟