• 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

Moderator: tummosoft

User avatar
tummosoft
Điều hành viên
Điều hành viên
Posts: 334
Joined: Mon 19/05/2014 2:23 pm
Has thanked: 7 times
Been thanked: 61 times
Contact:

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

Postby tummosoft » Thu 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


Image


:) Tummo Software :D
https://www.tummosoftware.com

User avatar
tummosoft
Điều hành viên
Điều hành viên
Posts: 334
Joined: Mon 19/05/2014 2:23 pm
Has thanked: 7 times
Been thanked: 61 times
Contact:

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

Postby tummosoft » Thu 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

Image

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

[vb]Dim hc As HttpClient
Dim req As HttpRequest

req.InitializePost2("http://www.basic4ppc.com/android/countries.php", Query.GetBytes("UTF8"))
hc.Execute(req, TaskId)
[/vb]

- Lấy nội dung table

[vb]Dim res As String
res = Response.GetString("UTF8")
Log("Response from server: " & res)
Dim parser As JSONParser
parser.Initialize(res)[/vb]


- Và kết quả

Image

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

[vb]Sub Process_Globals
Dim hc As HttpClient
Dim COUNTRIES_LIST, COUNTRY_POPULATION As Int
COUNTRIES_LIST = 1
COUNTRY_POPULATION = 2
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)
If FirstTime Then
hc.Initialize("hc")
End If
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)
If IsBackgroundTaskRunning(hc, COUNTRY_POPULATION) Then
ToastMessageShow("Wait for previous call to finish.", False)
Return
End If
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, TaskId As Int)
Dim req As HttpRequest
req.InitializePost2("http://www.basic4ppc.com/android/countries.php", Query.GetBytes("UTF8"))
hc.Execute(req, TaskId)
End Sub
Sub hc_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)
Log("Error: " & Reason & ", StatusCode: " & StatusCode)
If Response <> Null Then
Log(Response.GetString("UTF8"))
Response.Release
End If
ProgressDialogHide
End Sub
Sub hc_ResponseSuccess (Response As HttpResponse, TaskId As Int)
Dim res As String
res = Response.GetString("UTF8")
Log("Response from server: " & res)
Dim parser As JSONParser
parser.Initialize(res)
Select TaskId
Case COUNTRIES_LIST
'add the countries to the ListView
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
ProgressDialogHide
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
Response.Release
End Sub


Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub[/vb]
:) Tummo Software :D
https://www.tummosoftware.com

User avatar
tungblt
Điều hành viên
Điều hành viên
Posts: 550
Joined: Mon 22/12/2008 5:22 pm
Location: quy nhơn
Has thanked: 8 times
Been thanked: 77 times
Contact:

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

Postby tungblt » Sat 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

User avatar
tummosoft
Điều hành viên
Điều hành viên
Posts: 334
Joined: Mon 19/05/2014 2:23 pm
Has thanked: 7 times
Been thanked: 61 times
Contact:

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

Postby tummosoft » Sat 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
https://www.tummosoftware.com

User avatar
tungblt
Điều hành viên
Điều hành viên
Posts: 550
Joined: Mon 22/12/2008 5:22 pm
Location: quy nhơn
Has thanked: 8 times
Been thanked: 77 times
Contact:

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

Postby tungblt » Sat 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

User avatar
tummosoft
Điều hành viên
Điều hành viên
Posts: 334
Joined: Mon 19/05/2014 2:23 pm
Has thanked: 7 times
Been thanked: 61 times
Contact:

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

Postby tummosoft » Sun 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
https://www.tummosoftware.com

User avatar
tungblt
Điều hành viên
Điều hành viên
Posts: 550
Joined: Mon 22/12/2008 5:22 pm
Location: quy nhơn
Has thanked: 8 times
Been thanked: 77 times
Contact:

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

Postby tungblt » Sun 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

User avatar
tummosoft
Điều hành viên
Điều hành viên
Posts: 334
Joined: Mon 19/05/2014 2:23 pm
Has thanked: 7 times
Been thanked: 61 times
Contact:

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

Postby tummosoft » Sun 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
https://www.tummosoftware.com

User avatar
tungblt
Điều hành viên
Điều hành viên
Posts: 550
Joined: Mon 22/12/2008 5:22 pm
Location: quy nhơn
Has thanked: 8 times
Been thanked: 77 times
Contact:

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

Postby tungblt » Sun 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

User avatar
1045007
Thành viên danh dự
Thành viên danh dự
Posts: 551
Joined: Mon 09/06/2008 3:35 pm
Location: TP Cần Thơ
Has thanked: 2 times
Been thanked: 64 times
Contact:

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

Postby 1045007 » Mon 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
Posts: 1
Joined: Wed 12/09/2018 5:25 pm
Has thanked: 1 time

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

Postby hoangtiep1 » Wed 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.


Return to “Android”

Who is online

Users browsing this forum: No registered users and 0 guests