• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Basic4Android] Bài 28 - Kết nối MySQL Server

Lập trình cho Android Phone

Điều hành viên: tummosoft

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 58 time
Liên hệ:

Basic4Android] Bài 28 - Kết nối MySQL Server

Gửi bàigửi bởi tummosoft » T.Năm 14/08/2014 9:26 am

Để kết nối đến MySQL Server, trên Basic4Android có hai cách. Cách đơn giản nhất là dùng thư viện mysql (Download: http://dl.dropbox.com/u/13202017/mysql_1.01.zip)

- Kết nối đến máy chủ MySQL

Ở ví dụ này mình test thử với MySQL Server miễn phí của freemysqlhosting.net

Dim mh1 As MysqlHandler
mh1.Initialize("sql3.freemysqlhosting.net:3306","sql349518","sql349518","gY9!kA9%")

- Code minh họa tạo 1 kết nối đến table user và lấy tất cả danh sách

  1. Sub Globals
  2.    Dim mh1 As MysqlHandler
  3.    Dim rs1 As ResultSet
  4.  
  5.    Dim sv1 As ScrollView
  6.    Dim lv1 As ListView
  7.    Dim hsv1 As HorizontalScrollView
  8. End Sub
  9.  
  10. Sub Activity_Create(FirstTime As Boolean)
  11.    'Do not forget to load the layout file created with the visual designer. For example:
  12.   'Activity.LoadLayout("Layout1")
  13.  
  14.     mh1.Initialize("sql3.freemysqlhosting.net:3306","sql349518","sql349518","gY9!kA9%")
  15.    
  16.        
  17.    If mh1.isConnected = False Then
  18.       Msgbox(mh1.SQLError, "Connection Error:")
  19.       Return
  20.    End If
  21.    
  22.    rs1 = mh1.Query("SELECT * FROM user")
  23.    If rs1.IsInitialized = False Then
  24.       Msgbox("ResultSet is empty" & CRLF & mh1.SQLError, "Warning")
  25.       Return
  26.    End If
  27.    
  28.    hsv1.Initialize(rs1.ColumnCount * 150dip,0)
  29.    Activity.AddView(hsv1,0,0,100%x,100%y)
  30.    
  31.    sv1.Initialize(rs1.RowCount * 30dip)
  32.    hsv1.Panel.AddView(sv1,0,0,rs1.ColumnCount*150dip,100%y)
  33.  
  34.    Dim l As Label
  35.    
  36.    For i=0 To rs1.RowCount - 1
  37.       rs1.Position = i
  38.       For j=0 To rs1.ColumnCount - 1
  39.          l.Initialize("label" & j)
  40.          l.Text = rs1.GetString(j)
  41.          l.TextColor = Colors.Black
  42.          l.Color = Colors.White
  43.          sv1.Panel.AddView(l,j*150dip,i*30dip,149dip,29dip)
  44.       Next
  45.    Next
  46.    mh1.Close
  47. End Sub


Hình ảnh


:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 58 time
Liên hệ:

Re: Basic4Android] Bài 28 - Kết nối MySQL Server

Gửi bàigửi bởi tummosoft » T.Năm 14/08/2014 10:35 am

Ngoài cách dùng thư viện mysql như trên, cách chính thức (được Basic4Android khuyên dùng) là Remote Database Connector.

Thông qua một PHP Web Server, ta tạo một file PHP Script với các thông tin về database như sau: (Cách này mình chưa test thử vì không có php web server, bác nào test thành công thì up hình lên cho mọi người xem!!!!)

$databasehost = "localhost";
$databasename = "xxxx";
$databaseusername ="xxxx";
$databasepassword = "xxxx";

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

  1. <?
  2.  
  3. $databasehost = "localhost";
  4. $databasename = "xxxx";
  5. $databaseusername ="xxxx";
  6. $databasepassword = "xxxx";
  7.  
  8. $con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
  9. mysql_select_db($databasename) or die(mysql_error());
  10. mysql_query("SET CHARACTER SET utf8");
  11. $query = file_get_contents("php://input");
  12. $sth = mysql_query($query);
  13.  
  14. if (mysql_errno()) {
  15.     header("HTTP/1.1 500 Internal Server Error");
  16.     echo $query.'\n';
  17.     echo mysql_error();
  18. }
  19. else
  20. {
  21.     $rows = array();
  22.     while($r = mysql_fetch_assoc($sth)) {
  23.         $rows[] = $r;
  24.     }
  25.     print json_encode($rows);
  26. }
  27. ?>


Ví dụ 1 script chứa trên trang basicppc: http://www.basic4ppc.com/android/countries.php, với các table

Hình ảnh

- Sau đó dùng thư viện https để get hoặc post dữ liệu lên database

  1. Dim hc As HttpClient
  2. Dim req As HttpRequest
  3.  
  4. req.InitializePost2("http://www.basic4ppc.com/android/countries.php", Query.GetBytes("UTF8"))
  5. hc.Execute(req, TaskId)
  6.  


- Lấy nội dung table

  1. Dim res As String
  2.     res = Response.GetString("UTF8")
  3.     Log("Response from server: " & res)
  4.     Dim parser As JSONParser
  5.     parser.Initialize(res)



- Và kết quả

Hình ảnh

- Đoạn code hoàn chỉnh

  1. Sub Process_Globals
  2.     Dim hc As HttpClient
  3.     Dim COUNTRIES_LIST, COUNTRY_POPULATION As Int
  4.     COUNTRIES_LIST = 1
  5.     COUNTRY_POPULATION = 2
  6. End Sub
  7.  
  8. Sub Globals
  9.     Type TwoLines (First As String, Second As String)
  10.     Dim lblPopulation As Label
  11.     Dim ListView1 As ListView
  12.     Dim lblCountry As Label
  13. End Sub
  14.  
  15. Sub Activity_Create(FirstTime As Boolean)
  16.     If FirstTime Then
  17.         hc.Initialize("hc")
  18.     End If
  19.     Activity.LoadLayout("1")
  20.     FetchCountriesList
  21. End Sub
  22. Sub FetchCountriesList
  23.     ProgressDialogShow("Fetching list of countries")
  24.     'Gets all the available countries
  25.     ExecuteRemoteQuery("SELECT name, id FROM countries ORDER BY id", COUNTRIES_LIST)
  26. End Sub
  27. Sub ListView1_ItemClick (Position As Int, Value As Object)
  28.     If IsBackgroundTaskRunning(hc, COUNTRY_POPULATION) Then
  29.         ToastMessageShow("Wait for previous call to finish.", False)
  30.         Return
  31.     End If
  32.     Dim tl As TwoLines
  33.     tl = Value
  34.     lblCountry.Text = tl.Second
  35.     lblPopulation.Text = "Calling server..."
  36.     ExecuteRemoteQuery("SELECT population FROM countries WHERE id='" & tl.First & "'", COUNTRY_POPULATION)
  37. End Sub
  38. Sub ExecuteRemoteQuery(Query As String, TaskId As Int)
  39.     Dim req As HttpRequest
  40.     req.InitializePost2("http://www.basic4ppc.com/android/countries.php", Query.GetBytes("UTF8"))
  41.     hc.Execute(req, TaskId)
  42. End Sub
  43. Sub hc_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)
  44.     Log("Error: " & Reason & ", StatusCode: " & StatusCode)
  45.     If Response <> Null Then
  46.         Log(Response.GetString("UTF8"))
  47.         Response.Release
  48.     End If
  49.     ProgressDialogHide
  50. End Sub
  51. Sub hc_ResponseSuccess (Response As HttpResponse, TaskId As Int)
  52.     Dim res As String
  53.     res = Response.GetString("UTF8")
  54.     Log("Response from server: " & res)
  55.     Dim parser As JSONParser
  56.     parser.Initialize(res)
  57.     Select TaskId
  58.         Case COUNTRIES_LIST
  59.             'add the countries to the ListView
  60.             Dim countries As List
  61.             countries = parser.NextArray 'returns a list with maps
  62.             For i = 0 To countries.Size - 1
  63.                 Dim m As Map
  64.                 m = countries.Get(i)
  65.                 'We are using a custom type named TwoLines (declared in Sub Globals).
  66.                 'It allows us to later get the two values when the user presses on an item.
  67.                 Dim tl As TwoLines
  68.                 tl.First = m.Get("id")
  69.                 tl.Second = m.Get("name")
  70.                 ListView1.AddTwoLines2(tl.First, tl.Second, tl)
  71.             Next
  72.             ProgressDialogHide
  73.         Case COUNTRY_POPULATION
  74.             Dim l As List
  75.             l = parser.NextArray
  76.             If l.Size = 0 Then
  77.                 lblPopulation.Text = "N/A"
  78.             Else
  79.                 Dim m As Map
  80.                 m = l.Get(0)
  81.                 lblPopulation.Text = NumberFormat2(m.Get("population"),0, 0, 0, True) & " (K)"
  82.             End If
  83.     End Select
  84.     Response.Release
  85. End Sub
  86.  
  87.  
  88. Sub Activity_Resume
  89.  
  90. End Sub
  91.  
  92. Sub Activity_Pause (UserClosed As Boolean)
  93.  
  94. End Sub
:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tungblt
Điều hành viên
Điều hành viên
Bài viết: 549
Ngày tham gia: T.Hai 22/12/2008 5:22 pm
Đến từ: quy nhơn
Has thanked: 6 time
Been thanked: 76 time
Liên hệ:

Re: Basic4Android] Bài 28 - Kết nối MySQL Server

Gửi bàigửi bởi tungblt » T.Bảy 06/09/2014 10:46 am

Error description: Unknown type: httpclient
Are you missing a library reference?

mình không biết thêm thư viện vào chỗ nào :(
love

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 58 time
Liên hệ:

Re: Basic4Android] Bài 28 - Kết nối MySQL Server

Gửi bàigửi bởi tummosoft » T.Bảy 06/09/2014 12:46 pm

Thư viện bao gồm 2 file có đuôi .xml và .jar

Bạn chép cả 2 file này vào thư mục "lib", nơi cài đặt Basic4Android.

Mặc định của nó là C:\Program Files \Anywhere Software\Basic4android\Libraries
:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tungblt
Điều hành viên
Điều hành viên
Bài viết: 549
Ngày tham gia: T.Hai 22/12/2008 5:22 pm
Đến từ: quy nhơn
Has thanked: 6 time
Been thanked: 76 time
Liên hệ:

Re: Basic4Android] Bài 28 - Kết nối MySQL Server

Gửi bàigửi bởi tungblt » T.Bảy 06/09/2014 2:53 pm

dùng thư viện mysql thì không connect được . mặc dù cũng dùng server như bạn
love

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 58 time
Liên hệ:

Re: Basic4Android] Bài 28 - Kết nối MySQL Server

Gửi bàigửi bởi tummosoft » CN 07/09/2014 7:38 am

Bạn vẫn dùng tài khoản của mình à? Nếu vậy, có lẽ thằng freemysqlhosting đã xóa tài khoản của mình?

Bạn đăng ký một free mysql khác nhé.

Vấn đề MySQL tốt nhất là dùng PHP webhosting cho bảo mật.

http://www.hostinger.vn/ -> cho miễn phí cả php host và mysql
:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tungblt
Điều hành viên
Điều hành viên
Bài viết: 549
Ngày tham gia: T.Hai 22/12/2008 5:22 pm
Đến từ: quy nhơn
Has thanked: 6 time
Been thanked: 76 time
Liên hệ:

Re: Basic4Android] Bài 28 - Kết nối MySQL Server

Gửi bàigửi bởi tungblt » CN 07/09/2014 8:08 am

mình đang dùng hostinger. rất khó kết nối. lỗi liên tục
love

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 58 time
Liên hệ:

Re: Basic4Android] Bài 28 - Kết nối MySQL Server

Gửi bàigửi bởi tummosoft » CN 07/09/2014 11:41 am

Thôi thì tự tạo một PHP web server tại máy tính localhost mà test thử vậy!!!

http://tusach.thuvienkhoahoc.com/wiki/C ... s_7_64-bit
:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tungblt
Điều hành viên
Điều hành viên
Bài viết: 549
Ngày tham gia: T.Hai 22/12/2008 5:22 pm
Đến từ: quy nhơn
Has thanked: 6 time
Been thanked: 76 time
Liên hệ:

Re: Basic4Android] Bài 28 - Kết nối MySQL Server

Gửi bàigửi bởi tungblt » CN 07/09/2014 11:54 am

à ý của mình là test lúc được lúc không chứ không phải mình không biết test với host
love

Hình đại diện của người dùng
1045007
Thành viên danh dự
Thành viên danh dự
Bài viết: 551
Ngày tham gia: T.Hai 09/06/2008 3:35 pm
Đến từ: TP Cần Thơ
Has thanked: 2 time
Been thanked: 64 time
Liên hệ:

Re: Basic4Android] Bài 28 - Kết nối MySQL Server

Gửi bàigửi bởi 1045007 » T.Hai 08/09/2014 4:41 pm

Đúng là mỗi người mỗi cách. Trước giờ mình làm như thế này

- Tạo một Window Service để luôn start 1 wcf service đặt ở máy làm máy chủ (máy mình open port ra ngoài), nếu không có máy thì tạo một free hosting từ bên ngoài
- Định nghĩa function và trả về client là một JSON OBJECT hoặc XML OBJECT tùy vào mục đích của hàm POST hay GET dạng như:

http://localhost:8000/MainService/mobile/Load_Employee?Division={0}

Đáng chú ý là mình làm như thế này bất kể cơ sở dự liệu là gì?, cho dù là Web hay Application từ Desktop, hoặc từ Android hay Winphone, IOS,... đều ok!

hoangtiep1
Bài viết: 1
Ngày tham gia: T.Tư 12/09/2018 5:25 pm
Has thanked: 1 time

Re: Basic4Android] Bài 28 - Kết nối MySQL Server

Gửi bàigửi bởi hoangtiep1 » T.Tư 12/09/2018 5:31 pm

Mình đã làm giống như trên nhưng không kết nối được trong khi kết nối bằng Navicat for sql test thử thì vẫn được.mình làm với máy chủ db4free.net.


Quay về “Android”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách