• 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

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

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

Image

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

Image

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ụ:

[vb]#Region Project Attributes
#ApplicationLabel: B4A Example
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region

#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region

Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Dim s As SQL
Dim c As Cursor


End Sub

Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.

Dim txt As EditText
Dim btn As Button
Dim lv As ListView
Dim txt1 As EditText
End Sub

Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
Activity.LoadLayout("main")
Dim ruta As String
If File.ExternalWritable Then
ruta = File.DirDefaultExternal
Else
ruta = File.DirInternal
End If

If File.Exists(ruta,"test.db") = False Then
File.Copy(File.DirAssets, "test.db", ruta, "test.db")
End If

s.Initialize(ruta,"test.db",True)

End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub btn_Click
If txt.Text <> "" Then
s.ExecNonQuery2("INSERT INTO contact VALUES(?,?)", Array As String(txt.Text,txt1.Text))
c= s.ExecQuery("SELECT name,phone FROM contact")
lv.Clear

If c.RowCount > 0 Then
For i=0 To c.RowCount-1
c.Position=i
lv.AddTwoLines(c.GetString("name"),c.GetString("phone"))
'lv.AddSingleLine(c.GetString("name"))
Next
End If
End If
End Sub[/vb]

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

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

[vb]SQL1.BeginTransaction
Try
'block of statements like:
For i = 1 to 1000
SQL1.ExecNonQuery("INSERT INTO table1 VALUES(...)
Next
SQL1.TransactionSuccessful
Catch
Log(LastException.Message) 'no changes will be made
End Try
SQL1.EndTransaction[/vb]

* 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:
[vb]Dim Cursor As Cursor
Cursor = SQL1.ExecQuery("SELECT col1, col2 FROM table1")
For i = 0 To Cursor.RowCount - 1
Cursor.Position = i
Log(Cursor.GetString("col1"))
Log(Cursor.GetInt("col2"))
Next[/vb]

* 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:
[vb]Dim Cursor As Cursor
Cursor = sql1.ExecQuery2("SELECT col1 FROM table1 WHERE col3 = ?", Array As String(22))
[/vb]

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

[vb]sql1.ExecQueryAsync("SQL", "SELECT * FROM table1", Null)
...
Sub SQL_QueryComplete (Success As Boolean, Crsr As Cursor)
If Success Then
For i = 0 To Crsr.RowCount - 1
Crsr.Position = i
Log(Crsr.GetInt2(0))
Next
Else
Log(LastException)
End If
End Sub[/vb]

* 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:
[vb]Dim NumberOfMatches As Int
NumberOfMatches = SQL1.ExecQuerySingleResult("SELECT count(*) FROM table1 WHERE col2 > 300")
[/vb]

* 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:
[vb]Dim NumberOfMatches As Int
NumberOfMatches = SQL1.ExecQuerySingleResult2("SELECT count(*) FROM table1 WHERE col2 > ?", Array As String(300))
[/vb]

* 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:
[vb]Dim SQL1 As SQL
SQL1.Initialize(File.InternalDir, "MyDb.db", True)[/vb]
:) Tummo Software :D
https://www.tummosoftware.com

englishfunny
Posts: 5
Joined: Wed 27/05/2015 6:56 pm
Been thanked: 1 time

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

Postby englishfunny » Sat 11/07/2015 9:51 pm

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

Thierri016
Posts: 1
Joined: Sun 29/12/2019 3:31 pm

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

Postby Thierri016 » Sun 29/12/2019 3:34 pm

Bạn nào hướng dẫn giúp với?!
taxi orly


Return to “Android”

Who is online

Users browsing this forum: No registered users and 1 guest