• 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 8 - Sử dụng SQL Lite

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: 57 time
Liên hệ:

[Basic4Android] Bài 8 - Sử dụng SQL Lite

Gửi bàigửi bởi tummosoft » T.Năm 24/07/2014 9:35 am

SQLite là hệ thống cơ sở dữ liệu quan hệ nhỏ gọn, hoàn chỉnh, có thể cài đặt bên trong các trình ứng dụng khác. Nó tương đối phù hợp khi project trên Android có cơ sở dữ liệu phức tạp, thay vì sử dụng csv, text...

1- Trước hết, để sử dụng SQL Lite ta cần tạo ra một tệp cơ sở dữ liệu. Download phần mềm SQLite Expert: http://www.sqliteexpert.com/download.html

2- Trong ví dụ này, ta tạo 1 database có tên là test.db, 1 table có tên là contact và các trường dữ liệu của nó như hình

Hình ảnh

3- Tại IDE Basic4Android, ta import thư viện SQL vào project

Hình ảnh

4- Ví dụ bên dưới sẽ thêm 2 dòng name và phone vào database, và sau đó thì dữ liệu được hiển thị

* Lưu ý: Do bên trong Resources chỉ có thể đọc, nên sau khi add một file dữ liệu vào đó. Tại lúc chương trình khở động đầu tiên, ta cache nó ra một vùng trống bên ngoài thẻ nhớ, hoặc bộ nhớ trong.

  1. Dim ruta As String
  2.     If File.ExternalWritable Then
  3.         ruta = File.DirDefaultExternal
  4.     Else
  5.         ruta = File.DirInternal
  6.     End If
  7.    
  8.     If File.Exists(ruta,"test.db") = False Then
  9.         File.Copy(File.DirAssets, "test.db", ruta, "test.db")
  10.     End If
  11.    
  12.     s.Initialize(ruta,"test.db",True)


Code ví dụ:

  1. #Region  Project Attributes
  2.     #ApplicationLabel: B4A Example
  3.     #VersionCode: 1
  4.     #VersionName:
  5.     'SupportedOrientations possible values: unspecified, landscape or portrait.
  6.     #SupportedOrientations: unspecified
  7.     #CanInstallToExternalStorage: False
  8. #End Region
  9.  
  10. #Region  Activity Attributes
  11.     #FullScreen: False
  12.     #IncludeTitle: True
  13. #End Region
  14.  
  15. Sub Process_Globals
  16.     'These global variables will be declared once when the application starts.
  17.     'These variables can be accessed from all modules.
  18.     Dim s As SQL
  19.     Dim c As Cursor
  20.    
  21.  
  22. End Sub
  23.  
  24. Sub Globals
  25.     'These global variables will be redeclared each time the activity is created.
  26.     'These variables can only be accessed from this module.
  27.  
  28.     Dim txt As EditText
  29.     Dim btn As Button
  30.     Dim lv As ListView
  31.     Dim txt1 As EditText
  32. End Sub
  33.  
  34. Sub Activity_Create(FirstTime As Boolean)
  35.     'Do not forget to load the layout file created with the visual designer. For example:
  36.     Activity.LoadLayout("main")
  37.     Dim ruta As String
  38.     If File.ExternalWritable Then
  39.         ruta = File.DirDefaultExternal
  40.     Else
  41.         ruta = File.DirInternal
  42.     End If
  43.    
  44.     If File.Exists(ruta,"test.db") = False Then
  45.         File.Copy(File.DirAssets, "test.db", ruta, "test.db")
  46.     End If
  47.    
  48.     s.Initialize(ruta,"test.db",True)
  49.    
  50. End Sub
  51.  
  52. Sub Activity_Resume
  53.  
  54. End Sub
  55.  
  56. Sub Activity_Pause (UserClosed As Boolean)
  57.  
  58. End Sub
  59.  
  60. Sub btn_Click
  61.     If txt.Text <> "" Then
  62.         s.ExecNonQuery2("INSERT INTO contact VALUES(?,?)", Array As String(txt.Text,txt1.Text))
  63.         c= s.ExecQuery("SELECT name,phone FROM contact")
  64.         lv.Clear
  65.        
  66.         If c.RowCount > 0 Then
  67.             For i=0 To c.RowCount-1
  68.                 c.Position=i
  69.                 lv.AddTwoLines(c.GetString("name"),c.GetString("phone"))
  70.                 'lv.AddSingleLine(c.GetString("name"))
  71.             Next
  72.         End If
  73.     End If
  74. 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: 57 time
Liên hệ:

Re: [Basic4Android] Bài 8 - Sử dụng SQL Lite

Gửi bàigửi bởi tummosoft » T.Năm 24/07/2014 10:04 am

Thư viện SQL

Thư viện SQL gồm 2 thành phần chính:

* Cursor / con trỏ
* SQL


-------------------------------------------
Cursor : Tham khảo tại đây http://www.basic4ppc.com/android/help/sql.html
-------------------------------------------

-------------------------------------------
SQL
-------------------------------------------

* AddNonQueryToBatch (Statement As String, Args As List)

Thực hiện một truy vấn non-query;

Example:
  1. For i = 1 To 10000
  2.         sql1.AddNonQueryToBatch("INSERT INTO table1 VALUES (?)", Array As Object(Rnd(0, 100000)))
  3. Next
  4. sql1.ExecNonQueryBatch("SQL")
  5. ...    
  6. Sub SQL_NonQueryComplete (Success As Boolean)
  7.     Log("NonQuery: " & Success)
  8.     If Success = False Then Log(LastException)
  9. End Sub


* BeginTransaction: Truy vấn chỉ có hiệu lực khi BeginTransaction được gọi

  1. SQL1.BeginTransaction
  2. Try
  3.     'block of statements like:
  4.    For i = 1 to 1000
  5.         SQL1.ExecNonQuery("INSERT INTO table1 VALUES(...)
  6.    Next
  7.    SQL1.TransactionSuccessful
  8. Catch
  9.    Log(LastException.Message) 'no changes will be made
  10. End Try
  11. SQL1.EndTransaction


* Close : Đóng database

* ExecNonQuery (Statement As String) : Thực hiện một truy vấn đơn

Example: SQL1.ExecNonQuery("CREATE TABLE table1 (col1 TEXT , col2 INTEGER, col3 INTEGER)")

* ExecNonQuery2 (Statement As String, Args As List) : Thực hiện truy vấn với các tham só của mãng

Example:
SQL1.ExecNonQuery2("INSERT INTO table1 VALUES (?, ?, 0)", Array As Object("some text", 2))
ExecNonQueryBatch (EventName As String)

* ExecQuery (Query As String) As android.database.Cursor : Thực thi 1 truy vần và trả về nơi con trỏ được truy vấn.

Example:
  1. Dim Cursor As Cursor
  2. Cursor = SQL1.ExecQuery("SELECT col1, col2 FROM table1")
  3. For i = 0 To Cursor.RowCount - 1
  4.     Cursor.Position = i
  5.     Log(Cursor.GetString("col1"))
  6.     Log(Cursor.GetInt("col2"))
  7. Next


* ExecQuery2 (Query As String, StringArgs() As String) As android.database.Cursor

Thực hiện truy vấn và trả về các giá trị của con trỏ lui tới; dấu hỏi (?) được thay thế cho phần tử trong mãng.

Example:
  1. Dim Cursor As Cursor
  2. Cursor = sql1.ExecQuery2("SELECT col1 FROM table1 WHERE col3 = ?", Array As String(22))
  3.  


* ExecQueryAsync (EventName As String, Query As String, StringArgs() As String)

  1. sql1.ExecQueryAsync("SQL", "SELECT * FROM table1", Null)
  2. ...
  3. Sub SQL_QueryComplete (Success As Boolean, Crsr As Cursor)
  4.     If Success Then
  5.         For i = 0 To Crsr.RowCount - 1
  6.             Crsr.Position = i
  7.             Log(Crsr.GetInt2(0))
  8.         Next
  9.     Else
  10.         Log(LastException)
  11.     End If
  12. End Sub


* ExecQuerySingleResult (Query As String) As String

Truy vấn và trả về kết quả của cột đầu tiên, hàng đầu tiên

Example:
  1. Dim NumberOfMatches As Int
  2. NumberOfMatches = SQL1.ExecQuerySingleResult("SELECT count(*) FROM table1 WHERE col2 > 300")
  3.  


* ExecQuerySingleResult2 (Query As String, StringArgs() As String) As String

Truy vấn và trả về kết của dòng dầu tiên, cột đầu tiên (nếu tìm thấy); ngược lại trả về Null

Example:
  1. Dim NumberOfMatches As Int
  2. NumberOfMatches = SQL1.ExecQuerySingleResult2("SELECT count(*) FROM table1 WHERE col2 > ?", Array As String(300))
  3.  


* Initialize (Dir As String, FileName As String, CreateIfNecessary As Boolean)

Open 1 database. Nếu database không tồn tại, nó sẽ được tạo mới, đồng thời CreateIfNecessary = True;

Example:
  1. Dim SQL1 As SQL
  2. SQL1.Initialize(File.InternalDir, "MyDb.db", True)
:) Tummo Software :D
http://tummosoft.com

englishfunny
Bài viết: 5
Ngày tham gia: T.Tư 27/05/2015 6:56 pm
Been thanked: 1 time

Re: [Basic4Android] Bài 8 - Sử dụng SQL Lite

Gửi bàigửi bởi englishfunny » T.Bảy 11/07/2015 9:51 pm

chỉ xem sử dụng sql lite đi


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