آموزش اتصال به دیتابیس mysql د b4a
سه شنبه, ۱۷ آذر ۱۳۹۴، ۰۲:۵۱ ق.ظ
منبع :gameover.blog.ir
منبع:
http://www.b4x.com/android/forum/threads...rial.8339/
مترجم:
sajjad3011
این آموزش طریقه اتصال بین Android device و remote server رو نشون می ده.
در اینجا قصد اتصال به یک MySQL database رو داریم.
Android به طور مستقیم نمی تونه به database server وصل بشه.
بنابراین نیازه یک simple web service یا سرویس وب ساده بسازیم تا request ما رو به دیتابیس بفرسته و به ما response بده.
مثلا ما یه new database ایجاد کردیم که جمعیت کشور ها رو برامون لیست کنه.
.(در اینجا البته اسم دیتابیس و ... دلخواه هست مثل xxxx یا .... )
دیتابیس ما یه جدول داره به اسم "countries" با سه ستون Name+ID+Population
![[تصویر: mysql_1.png]](http://www.b4x.com/basic4android/images/mysql_1.png)
PHP Script:
web service ما یک اسکریپت php هست که روی سایت سرور قرار میدیم.
روش های ارتباط با این اسکریپت زیاده. مثلا می تونید با ارسال و دریافت پارامترها کار کنید و ... .
می تونیم روی سایت با php یه query بگیریم با دستوای sql و محتوای دیتابیس رو بریزیم بیرون یا واکشی کنیم توی یک فایل دیگه یا یه صفحه که با php درخواست می دیم.(مثلا get.php یا...)
البته این سوریس بهتره public نباشه(تنظیمات chmod روی سایت رو طوری تنظیم کنید که فقط کاربران خاص بتونن بهش دسترسی داشه باشن یا یه سری مسائل ایمنی و رعایت کنید اگه واستون مهمه)
البته یه راهنما هم هست تا افراد نتونن sql رو inject(تزریق) کنن برای باگ یابی از بانک شما:
PHP: mysql_real_escape_string - Manual
http://php.net/manual/en/function.mysql-...string.php
ما در اینجا از روش query استفاده می کنیم.
php script:
این اسکریپت با استفاده از داده ها یا پارامتری هایی که با متد POST بهش ارسال می کنیم یک query از دیتابیس mysql می گیره.یعنی طبق درخواست ما به بانک وصل میشه و نهایتا نتیجه رو البته با فرمت JSON برگشت میده.
نکته: قسمت مهم کد بالا
Basic4android code:
![[تصویر: SS-2013-01-29_16.42.32.png]](http://www.b4x.com/basic4android/images/SS-2013-01-29_16.42.32.png)
این کد یک query(یک متغیر رشته ای که شامل بازجست و دستورات SQL هست مثل select * from table1 برای انتخاب تمام ستون ها از جدول) رو send می کنه. و نتیجه ی JSON دیافت شده رو parse(تجزیه) می کنه و نمایش میده روی listView .
قسمت اصلی سورس b4a اینطوری هست :
در کد فوق اطاعات یا query بهcountries.php ارسال میشه (ما فرض کردیم همون فایل get.php که بالا اوردیم هست. اسمشون رو خودتون یکی کنید و ادرس رو به هاست یا سایت خودتون تغییر بدید و لینک دقیق فایل php)
اینم سورس رایگان که خودم هم تست کردم کاملا کار می کنه:
http://www.mediafire.com/download/gb2b3a2ka1dye8p/MySQL.zip
خرید آموزش b4a فارسی با قیمت کم:
http://gameover.blog.ir/1395/04/03/%DA%A9%D8%AA%D8%A7%D8%A8-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%D9%88%D8%B2%D8%B4-b4a-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A2%D9%88%D8%B1
منبع:
http://www.b4x.com/android/forum/threads...rial.8339/
مترجم:
sajjad3011
این آموزش طریقه اتصال بین Android device و remote server رو نشون می ده.
در اینجا قصد اتصال به یک MySQL database رو داریم.
Android به طور مستقیم نمی تونه به database server وصل بشه.
بنابراین نیازه یک simple web service یا سرویس وب ساده بسازیم تا request ما رو به دیتابیس بفرسته و به ما response بده.
مثلا ما یه new database ایجاد کردیم که جمعیت کشور ها رو برامون لیست کنه.
.(در اینجا البته اسم دیتابیس و ... دلخواه هست مثل xxxx یا .... )
دیتابیس ما یه جدول داره به اسم "countries" با سه ستون Name+ID+Population
![[تصویر: mysql_1.png]](http://www.b4x.com/basic4android/images/mysql_1.png)
PHP Script:
web service ما یک اسکریپت php هست که روی سایت سرور قرار میدیم.
روش های ارتباط با این اسکریپت زیاده. مثلا می تونید با ارسال و دریافت پارامترها کار کنید و ... .
می تونیم روی سایت با php یه query بگیریم با دستوای sql و محتوای دیتابیس رو بریزیم بیرون یا واکشی کنیم توی یک فایل دیگه یا یه صفحه که با php درخواست می دیم.(مثلا get.php یا...)
البته این سوریس بهتره public نباشه(تنظیمات chmod روی سایت رو طوری تنظیم کنید که فقط کاربران خاص بتونن بهش دسترسی داشه باشن یا یه سری مسائل ایمنی و رعایت کنید اگه واستون مهمه)
البته یه راهنما هم هست تا افراد نتونن sql رو inject(تزریق) کنن برای باگ یابی از بانک شما:
PHP: mysql_real_escape_string - Manual
http://php.net/manual/en/function.mysql-...string.php
ما در اینجا از روش query استفاده می کنیم.
php script:
<? $databasehost = "localhost"; $databasename = "xxxx"; $databaseusername ="xxxx"; $databasepassword = "xxxx"; $con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error()); mysql_select_db($databasename) or die(mysql_error()); mysql_query("SET CHARACTER SET utf8"); $query = file_get_contents("php://input"); $sth = mysql_query($query); if (mysql_errno()) { header("HTTP/1.1 500 Internal Server Error"); echo $query.'\n'; echo mysql_error(); } else { $rows = array(); while($r = mysql_fetch_assoc($sth)) { $rows[] = $r; } print json_encode($rows); } ?>
این اسکریپت با استفاده از داده ها یا پارامتری هایی که با متد POST بهش ارسال می کنیم یک query از دیتابیس mysql می گیره.یعنی طبق درخواست ما به بانک وصل میشه و نهایتا نتیجه رو البته با فرمت JSON برگشت میده.
نکته: قسمت مهم کد بالا
$query = file_get_contents("php://input");
Basic4android code:
![[تصویر: SS-2013-01-29_16.42.32.png]](http://www.b4x.com/basic4android/images/SS-2013-01-29_16.42.32.png)
این کد یک query(یک متغیر رشته ای که شامل بازجست و دستورات SQL هست مثل select * from table1 برای انتخاب تمام ستون ها از جدول) رو send می کنه. و نتیجه ی JSON دیافت شده رو parse(تجزیه) می کنه و نمایش میده روی listView .
قسمت اصلی سورس b4a اینطوری هست :
'Activity module Sub Process_Globals Private COUNTRIES_LIST = "countries_list", COUNTRY_POPULATION = "country_population" As String End Sub Sub Globals Type TwoLines (First As String, Second As String) Dim lblPopulation As Label Dim ListView1 As ListView Dim lblCountry As Label End Sub Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("1") FetchCountriesList End Sub Sub FetchCountriesList ProgressDialogShow("Fetching list of countries") 'Gets all the available countries ExecuteRemoteQuery("SELECT name, id FROM countries ORDER BY id", COUNTRIES_LIST) End Sub Sub ListView1_ItemClick (Position As Int, Value As Object) Dim tl As TwoLines tl = Value lblCountry.Text = tl.Second lblPopulation.Text = "Calling server..." ExecuteRemoteQuery("SELECT population FROM countries WHERE id='" & tl.First & "'", COUNTRY_POPULATION) End Sub Sub ExecuteRemoteQuery(Query As String, JobName As String) Dim job As HttpJob job.Initialize(JobName, Me) job.PostString("http://www.basic4ppc.com/android/countries.php", Query) End Sub Sub JobDone(Job As HttpJob) ProgressDialogHide If Job.Success Then Dim res As String res = Job.GetString Log("Response from server: " & res) Dim parser As JSONParser parser.Initialize(res) Select Job.JobName Case COUNTRIES_LIST Dim COUNTRIES As List COUNTRIES = parser.NextArray 'returns a list with maps For i = 0 To COUNTRIES.Size - 1 Dim m As Map m = COUNTRIES.Get(i) 'We are using a custom type named TwoLines (declared in Sub Globals). 'It allows us to later get the two values when the user presses on an item. Dim tl As TwoLines tl.First = m.Get("id") tl.Second = m.Get("name") ListView1.AddTwoLines2(tl.First, tl.Second, tl) Next Case COUNTRY_POPULATION Dim l As List l = parser.NextArray If l.Size = 0 Then lblPopulation.Text = "N/A" Else Dim m As Map m = l.Get(0) lblPopulation.Text = NumberFormat2(m.Get("population"),0, 0, 0, True) & " (K)" End If End Select Else ToastMessageShow("Error: " & Job.ErrorMessage, True) End If Job.Release End Sub Sub Activity_Resume End Sub
در کد فوق اطاعات یا query بهcountries.php ارسال میشه (ما فرض کردیم همون فایل get.php که بالا اوردیم هست. اسمشون رو خودتون یکی کنید و ادرس رو به هاست یا سایت خودتون تغییر بدید و لینک دقیق فایل php)
اینم سورس رایگان که خودم هم تست کردم کاملا کار می کنه:
http://www.mediafire.com/download/gb2b3a2ka1dye8p/MySQL.zip
خرید آموزش b4a فارسی با قیمت کم:
http://gameover.blog.ir/1395/04/03/%DA%A9%D8%AA%D8%A7%D8%A8-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%D9%88%D8%B2%D8%B4-b4a-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A2%D9%88%D8%B1
۹۴/۰۹/۱۷