Bối cảnh và vấn đề nghiên cứu
Khóa luận tốt nghiệp "Tìm hiểu SQLite và xây dựng chương trình ứng dụng" được thực hiện bởi sinh viên Nguyễn Hoàng Long (lớp CT1601, Khoa Công nghệ Thông tin, Trường Đại học Dân lập Hải Phòng) dưới sự hướng dẫn của ThS. Phùng Anh Tuấn vào năm 2017.
Về bối cảnh thực tiễn, tác giả chỉ ra sự phát triển mạnh mẽ của hệ điều hành Android kể từ khi ra mắt năm 2007 bởi Liên minh thiết bị cầm tay mở (Open Handset Alliance). Tính đến quý 3 năm 2012, Android đã chiếm 75% thị phần điện thoại thông minh toàn cầu với hơn 500 triệu thiết bị được kích hoạt và 1,3 triệu lượt kích hoạt mỗi ngày. Cùng với sự mở rộng của kho ứng dụng Google Play (đạt 25 tỷ lượt tải xuống vào tháng 9 năm 2012), nhu cầu xây dựng các ứng dụng di động có khả năng lưu trữ và quản lý dữ liệu cục bộ an toàn, gọn nhẹ ngày càng trở nên thiết yếu. Để giải quyết bài toán quản lý dữ liệu trên thiết bị nhúng mà không cần hệ thống máy chủ phức tạp, SQLite nổi lên như một giải pháp cơ sở dữ liệu dạng thư viện liên kết, không máy chủ (serverless), chiếm dung lượng bộ nhớ nhỏ và tối ưu hóa cho tài nguyên giới hạn của thiết bị cầm tay. Từ nền tảng đó, đề tài đi vào tìm hiểu công nghệ và phát triển một phần mềm quản lý chi tiêu cá nhân nhằm hỗ trợ người dùng theo dõi tài chính hằng ngày.
Nhiệm vụ nghiên cứu được văn bản giao kết quả cụ thể gồm hai nhóm:
- Nội dung nghiên cứu:
- Tìm hiểu về hệ điều hành Android;
- Tìm hiểu về môi trường lập trình Android Studio;
- Tìm hiểu về công cụ tạo lập thiết bị di động ảo Genymotion;
- Tìm hiểu về hệ quản trị cơ sở dữ liệu cho thiết bị di động SQLite;
- Xây dựng chương trình ứng dụng thử nghiệm quản lý chi tiêu cá nhân.
- Yêu cầu cần giải quyết:
- Nắm được các khái niệm cơ bản của hệ điều hành Android;
- Cài đặt, cấu hình môi trường lập trình ứng dụng Android Studio;
- Cài đặt, cấu hình thiết bị di động ảo phục vụ chạy thử nghiệm chương trình;
- Thực hiện được các thao tác cơ bản với dữ liệu trên hệ quản trị cơ sở dữ liệu SQLite;
- Xây dựng được chương trình ứng dụng, đóng gói ứng dụng thành tệp
*.apk cho phép cài đặt và vận hành trên thiết bị di động Android thật.
Đối tượng nghiên cứu của đồ án là hệ điều hành Android, môi trường tích hợp Android Studio, hệ quản trị cơ sở dữ liệu nhúng SQLite và kỹ thuật phát triển ứng dụng di động quản lý chi tiêu. Phạm vi nghiên cứu về mặt không gian được thực hiện tại Trường Đại học Dân lập Hải Phòng; phạm vi thời gian hoàn thành trong năm 2017; dữ liệu phục vụ thiết kế và tính toán là nguồn số liệu giả lập do tác giả tự xây dựng trong quá trình thử nghiệm.
Cơ sở lý thuyết và phương pháp
Khung lý thuyết của đồ án dựa trên các công nghệ nền tảng của phát triển phần mềm di động:
- Kiến trúc hệ điều hành Android: Hoạt động dựa trên nhân Linux (phiên bản 2.6 và từ Android 4.0 trở đi là nhân 3.x), ứng dụng chạy trên máy ảo Dalvik thông qua việc thực thi mã bytecode định dạng
.dex (Dalvik Executable) được biên dịch từ Java. Cơ chế bảo mật dựa trên mô hình hộp cát (sandbox) phân quyền truy cập, kết hợp cơ chế quản lý bộ nhớ tự động đóng tiến trình nền cũ nhất khi tài nguyên RAM xuống thấp.
- Hệ quản trị cơ sở dữ liệu SQLite: Được phát triển bởi D. Richard Hipp bằng ngôn ngữ C, là hệ quản trị cơ sở dữ liệu quan hệ thu nhỏ dạng file-based, không yêu cầu tiến trình máy chủ độc lập (serverless), kích thước tệp nhị phân xấp xỉ 300 kB và tuân thủ phần lớn tiêu chuẩn SQL92.
- Kiến trúc giao diện người dùng Android: Dựa trên hệ thống phân cấp các lớp
View và ViewGroup (Layout), được đặc tả thông qua tệp định dạng XML kết hợp xử lý mã nguồn Java.
Phương pháp nghiên cứu thực tế được tác giả triển khai bao gồm:
- Phương pháp tổng hợp và phân tích tài liệu kỹ thuật: Thu thập, hệ thống hóa tài liệu chính thức từ cổng phát triển phần mềm Google Developer và trang chủ dự án SQLite nhằm xác định cấu trúc dự án, cú pháp câu lệnh truy vấn và vòng đời thành phần ứng dụng.
- Phương pháp thực nghiệm kỹ thuật phần mềm: Cài đặt và thiết lập môi trường phát triển trên hệ điều hành máy tính; xây dựng mã lệnh giao diện và mã lệnh logic; kết nối cơ sở dữ liệu cục bộ; cấu hình thiết bị máy ảo mô phỏng phần cứng; chạy thử nghiệm phần mềm; biên dịch và đóng gói thành gói cài đặt nhị phân.
- Nguồn dữ liệu: Tác giả sử dụng bộ dữ liệu giả lập (mock data) về các khoản thu, chi cá nhân để phục vụ việc kiểm thử các chức năng thêm, sửa, xóa và truy vấn dữ liệu trên bảng của SQLite.
Thiết kế và triển khai
Do đề tài thuộc nhóm đồ án xây dựng phần mềm ứng dụng, các nội dung liên quan đến cấu hình hệ thống, công nghệ và quy trình triển khai được tác giả mô tả chi tiết:
Yêu cầu hệ thống và công cụ phát triển
- Hệ điều hành máy tính phát triển: Microsoft Windows 7 hoặc Windows 8 (hỗ trợ cả hai bản 32-bit và 64-bit).
- Yêu cầu phần cứng máy tính: Dung lượng bộ nhớ RAM tối thiểu 4 GB.
- Môi trường phát triển tích hợp (IDE): Android Studio (xây dựng trên nền tảng IntelliJ IDEA) kết hợp bộ công cụ phát triển Android SDK.
- Công cụ máy ảo: Phần mềm Genymotion tích hợp VirtualBox để khởi tạo và mô phỏng thiết bị phần cứng di động.
- Cấu hình máy ảo thực nghiệm: Mô phỏng thiết bị Samsung Galaxy S3, chạy hệ điều hành Android phiên bản 4.1 (API Level 16), độ phân giải màn hình 720x1280.
- Nền tảng đích: Dự án cấu hình chọn Minimum SDK là API 14 (Android 4.0 Ice Cream Sandwich), do tại thời điểm nghiên cứu phiên bản này chiếm tỷ lệ bao phủ hơn 90% lượng thiết bị Android đang lưu hành.
Kiến trúc dự án và tổ chức mã nguồn
Dự án trong Android Studio được cấu trúc thành ba thành phần chính:
- Thư mục
manifests: Chứa tệp AndroidManifest.xml quản lý cấu hình tổng thể của ứng dụng, đăng ký quyền truy cập và định nghĩa các Activity.
- Thư mục
java: Lưu trữ toàn bộ các tệp mã nguồn Java thực thi logic xử lý và kết nối cơ sở dữ liệu.
- Thư mục
res: Lưu trữ tài nguyên của chương trình, chia thành các thư mục con gồm drawable (chứa tệp hình ảnh, tài nguyên đồ họa XML), layout (chứa các tệp XML định nghĩa giao diện màn hình), và values (chứa tệp chuỗi strings.xml, màu sắc colors.xml, kích thước và phong cách giao diện).
Thiết kế giao diện và xử lý sự kiện
Giao diện phần mềm được tổ chức thông qua các bộ bố cục (Layout):
FrameLayout: Bố cục xếp chồng cơ bản, mặc định neo các điều khiển ở góc trên bên trái, sử dụng thuộc tính android:layout_gravity="center" để căn chỉnh đối tượng vào giữa màn hình.
LinearLayout: Bố cục sắp xếp các điều khiển theo một chiều duy nhất, phân chia theo thuộc tính android:orientation="horizontal" (sắp xếp dạng cột từ trái sang phải) hoặc android:orientation="vertical" (sắp xếp dạng hàng từ trên xuống dưới).
RelativeLayout: Bố cục sắp xếp vị trí tương đối giữa các phần tử với nhau hoặc với phần tử cha thông qua định danh id của từng điều khiển.
Các thành phần điều khiển giao diện (View) chính được áp dụng gồm TextView (hiển thị văn bản), EditText (nhận dữ liệu nhập từ bàn phím), ImageView (hiển thị hình ảnh), Button (nút bấm thực thi tác vụ) và ListView (hiển thị danh sách dữ liệu cuộn thông qua các thành phần ListItem).
Cơ chế xử lý tương tác được xây dựng thông qua giao diện lắng nghe sự kiện (Event Listener) và phương thức xử lý (Event Handler). Các phương thức chính được tác giả đề cập gồm:
onClick(): Bắt sự kiện khi người dùng chạm hoặc nhấn chọn một thành phần.
onLongClick(): Bắt sự kiện nhấn giữ thành phần, trả về giá trị kiểu boolean để xác định việc tiếp tục hay dừng xử lý sự kiện.
onKey(): Bắt thao tác nhấn phím phần cứng hoặc phím điều hướng trên thiết bị.
onTouch(): Bắt các thao tác cử chỉ tiếp xúc trực tiếp trên bề mặt cảm ứng.
onFocusChange(): Xác định trạng thái con trỏ khi chuyển vùng nhập liệu giữa các thành phần.
onCreateContextMenu(): Xây dựng menu ngữ cảnh khi người dùng thực hiện thao tác nhấn giữ lâu.
Cấu hình và thao tác cơ sở dữ liệu SQLite
Việc triển khai SQLite trên môi trường Windows phục vụ thử nghiệm được thực hiện bằng cách giải nén hai gói phần mềm sqlite-shell-win32-*.zip và sqlite-dll-win32-*.zip, trích xuất các tệp sqlite3.exe cùng sqlite3.dll vào thư mục hệ thống và thiết lập đường dẫn vào biến môi trường PATH của hệ điều hành. Đồng thời, tác giả giới thiệu phần mềm giao diện đồ họa SQLite Administrator (sqliteadmin.exe) để hỗ trợ quan sát trực quan cấu trúc bảng. Trong ứng dụng di động, cơ sở dữ liệu được khởi tạo dưới dạng tệp riêng tư, lưu trữ cục bộ trong bộ nhớ máy của ứng dụng nhằm đảm bảo tính toàn vẹn và bảo mật dữ liệu.
Quy trình đóng gói và thử nghiệm
Sau khi hoàn thiện mã nguồn và kiểm thử giao diện cùng các chức năng thêm/sửa/xóa trên máy ảo Genymotion, tác giả tiến hành đóng gói chương trình thành tệp thực thi *.apk. Tệp này sau đó được nạp trực tiếp vào phần cứng điện thoại di động chạy Android thật để nghiệm thu khả năng tương thích và độ ổn định thực tế.
Nội dung chính theo từng chương
Chương 1: Hệ điều hành Android
Chương này tập trung trình bày tổng quan lịch sử hình thành, cấu trúc hệ thống và các đặc tính kỹ thuật cơ bản của nền tảng Android:
- Lịch sử phát triển: Android Inc. được thành lập vào tháng 10 năm 2003 tại Palo Alto, California bởi Andy Rubin, Rich Miner, Nick Sears và Chris White. Google mua lại công ty vào ngày 17 tháng 8 năm 2005. Ngày 5 tháng 11 năm 2007, Liên minh thiết bị cầm tay mở chính thức thành lập và công bố hệ điều hành Android. Thiết bị thương mại đầu tiên chạy Android là HTC Dream, phát hành ngày 22 tháng 10 năm 2008. Tác giả cũng liệt kê các mốc phát triển dòng thiết bị Nexus (Nexus One năm 2010 hợp tác với HTC; Nexus 4 hợp tác với LG; Nexus 10 hợp tác với Samsung) và việc công bố hệ điều hành thiết bị đeo Android Wear vào năm 2014.
- Kho ứng dụng và hệ sinh thái: Đến tháng 10 năm 2012, Google Play có khoảng 700.000 ứng dụng với 25 tỷ lượt tải xuống. Tác giả phân tích các chính sách hoàn tiền trong vòng 15 phút sau khi tải ứng dụng trả phí và các công cụ phát triển phần mềm chính thức (Android SDK, Eclipse tích hợp plugin ADT, Android Studio).
- Giao diện người dùng: Hoạt động dựa trên thao tác trực tiếp (vuốt, chạm, kéo giãn, thu lại) kết hợp cảm biến phần cứng như gia tốc kế, con quay hồi chuyển, cảm biến khoảng cách. Màn hình chính chứa các biểu tượng (icon) và tiện ích sống động (widget), phía trên cùng là thanh trạng thái có thể kéo xuống để xem thông báo.
- Kiến trúc hạt nhân và phân vùng: Sử dụng nhân Linux 2.6 (từ bản 4.0 trở đi dùng bản 3.x), máy ảo Dalvik thông dịch mã
dex. Bộ nhớ flash được phân chia thành các phân vùng riêng biệt như /system (chỉ đọc dành cho hệ điều hành) và /data (dành cho dữ liệu người dùng và ứng dụng). Người dùng thông thường không có quyền truy cập root.
- Cơ chế quản lý bộ nhớ RAM: Hệ thống không tắt ứng dụng ngay mà giữ ở trạng thái dừng ngầm trong RAM để tăng tốc độ phản hồi khi mở lại. Khi bộ nhớ cạn kiệt, hệ thống tự động giải phóng tiến trình không hoạt động lâu nhất. Tác giả đưa ra nhận định rằng việc cài đặt các ứng dụng can thiệp tắt tác vụ của bên thứ ba (Task Killer) trên Google Play thường gây hại cho hệ thống hơn là mang lại lợi ích.
- Bảo mật hệ thống: Ứng dụng chạy độc lập trong cơ chế hộp cát (sandbox) và phải khai báo quyền tường minh trước khi cài đặt. Google sử dụng công cụ quét tự động Google Bouncer trên cửa hàng ứng dụng; số liệu thống kê từ hãng bảo mật F-Secure chỉ ra chỉ có khoảng 0,5% phần mềm độc hại có thể xâm nhập được vào Google Play. Từ phiên bản Android 4.2 Jelly Bean (2012), hệ thống bổ sung tính năng cảnh báo tự động chặn tin nhắn SMS gửi đến các đầu số dịch vụ tính phí.
Chương 2: Môi trường lập trình Android Studio
Chương này cung cấp tài liệu hướng dẫn kỹ thuật chi tiết về việc cài đặt, cấu hình và sử dụng công cụ Android Studio:
- Giới thiệu Android Studio: Công cụ lập trình chính thức do Google cung cấp, xây dựng trên nền tảng IntelliJ IDEA, tối ưu hóa cho ngôn ngữ Java.
- Cài đặt và cấu hình: Hướng dẫn các bước tải tệp cài đặt từ trang
developer.android.com, thiết lập SDK và cấu hình máy ảo Genymotion (chọn cấu hình Samsung Galaxy S3, hệ điều hành Android 4.1, API 16, độ phân giải 720x1280).
- Cấu trúc màn hình làm việc: Tác giả phân chia không gian làm việc của Android Studio thành 6 phân vùng tương tác chính: (1) Cây thư mục cấu trúc hệ thống; (2) Bảng Palette chứa danh sách các Control để kéo thả; (3) Màn hình thiết kế trực quan giao diện thiết bị; (4) Cửa sổ Component Tree hiển thị cấu trúc cây các thành phần giao diện; (5) Cửa sổ Properties thiết lập thuộc tính điều khiển; (6) Thanh công cụ chứa các chức năng biên dịch, chạy thử và quản lý thiết bị ảo (Android Device Manager).
- Kỹ thuật thiết kế giao diện và xử lý sự kiện: Phân tích chi tiết ba loại Layout phổ biến (
FrameLayout, LinearLayout, RelativeLayout); hướng dẫn khai báo và sử dụng các View cơ bản (TextView, EditText, ImageView, Button, ListView); hướng dẫn phương thức gắn bộ lắng nghe OnClickListener thông qua cả hai cách: tạo đối tượng nặc danh (anonymous implementation) hoặc hiện thực trực tiếp giao diện trên lớp Activity.
Chương 3: SQLite
Chương này hệ thống hóa toàn bộ lý thuyết và cú pháp thực hành của hệ quản trị cơ sở dữ liệu nhúng SQLite:
- Giới thiệu và ưu điểm: SQLite là hệ quản trị cơ sở dữ liệu quan hệ thu nhỏ, không máy chủ, dung lượng gọn nhẹ (~300 kB), giao dịch (transaction) tin cậy, không cần cấu hình phức tạp, mã nguồn mở. Cơ sở dữ liệu phù hợp với ứng dụng dạng flat-file, thiết bị nhúng (điện thoại thông minh, PDA) hoặc các hệ thống có lưu lượng dưới 100.000 lượt truy cập/ngày.
- Nhược điểm và tính năng bị hạn chế so với chuẩn SQL92:
- Phép kết bảng: Không hỗ trợ
RIGHT OUTER JOIN và FULL OUTER JOIN (chỉ hỗ trợ LEFT OUTER JOIN).
- Lệnh sửa đổi bảng: Lệnh
ALTER TABLE bị hạn chế, chỉ hỗ trợ RENAME TABLE và ADD COLUMN; không hỗ trợ DROP COLUMN, ALTER COLUMN hay ADD CONSTRAINT.
- Khung nhìn: Thành phần
VIEW ở chế độ chỉ đọc (read-only), không cho phép thực thi INSERT, UPDATE, DELETE trực tiếp trên view.
- Ràng buộc và giao dịch: Không hỗ trợ ràng buộc khóa ngoại (foreign key constraints), không hỗ trợ các transaction lồng nhau.
- Đồng thời: Cho phép nhiều tiến trình đọc dữ liệu đồng thời, nhưng thao tác ghi dữ liệu không được phép chạy song song.
- Phân loại câu lệnh: Phân định rõ ba nhóm lệnh: Nhóm định nghĩa dữ liệu DDL (
CREATE, ALTER, DROP); Nhóm thao tác dữ liệu DML (INSERT, UPDATE, DELETE); Nhóm truy vấn dữ liệu DQL (SELECT).
- Cài đặt và công cụ hỗ trợ: Các bước cấu hình tệp thực thi SQLite 3 trên hệ điều hành Windows, thiết lập biến môi trường
PATH để chạy trong cửa sổ Command Prompt (cmd) và giới thiệu công cụ sqliteadmin.exe.
- Hệ thống kiểu dữ liệu: SQLite không sử dụng kiểu dữ liệu tĩnh nghiêm ngặt mà quản lý theo các lớp lưu trữ (Storage Classes):
NULL, INTEGER (lưu trữ có dấu trong 1, 2, 3, 4, 6, hoặc 8 bytes tùy độ lớn), REAL (số thực dấu phẩy động 8-byte), TEXT (chuỗi ký tự mã hóa UTF-8, UTF-16BE hoặc UTF-16LE), và BLOB (lưu trữ nguyên khối nhị phân).
- Kiểu dữ liệu đặc thù: Không có lớp lưu trữ riêng cho Boolean (lưu dưới dạng
INTEGER với giá trị 0 đại diện cho false và 1 đại diện cho true). Kiểu ngày giờ không có lớp lưu trữ riêng mà được biểu diễn linh hoạt dưới dạng TEXT (định dạng YYYY-MM-DD HH:MM:SS.SSS), REAL (số ngày tính từ ngày 24 tháng 11 năm 4714 trước Công nguyên), hoặc INTEGER (số giây tính từ mốc Unix Epoch 1970-01-01 00:00:00 UTC).
- Cú pháp và lưu ý: SQLite phân biệt chữ hoa/chữ thường trong một số trường hợp cụ thể (như lệnh
GLOB và glob); quy tắc chú thích theo dòng bắt đầu bằng hai dấu gạch nối -- và chú thích khối bằng cặp dấu /* ... */; các phát biểu SQL kết thúc bằng dấu chấm phẩy ;, riêng các lệnh điều khiển nội bộ (dấu chấm lệnh / dot-commands) không kết thúc bằng dấu chấm phẩy.
Chương 4: Chương trình thực nghiệm
Chương này trình bày kết quả xây dựng ứng dụng thực tế:
- Phân tích và thiết kế: Xác định các luồng dữ liệu cần quản lý cho bài toán chi tiêu cá nhân, thiết kế các bảng lưu trữ thông tin giao dịch tài chính trên SQLite.
- Xây dựng giao diện: Thiết kế các màn hình tương tác trên tệp layout XML, bố trí các ô nhập liệu số tiền, danh mục thu/chi và danh sách hiển thị lịch sử giao dịch.
- Kết quả đạt được: Hoàn thiện việc lập trình logic và kết nối cơ sở dữ liệu nội bộ; thực nghiệm thành công các chức năng trên máy ảo Genymotion; xuất gói cài đặt
*.apk và tiến hành cài đặt, vận hành thử nghiệm trên thiết bị di động Android thật.
Kết quả và đóng góp
Đồ án ghi nhận các kết quả cụ thể dựa trên số liệu và các tiêu chí kỹ thuật có trong văn bản:
- Xây dựng môi trường phát triển: Thiết lập thành công môi trường lập trình Android Studio trên nền Windows với máy ảo Genymotion mô phỏng cấu hình Samsung Galaxy S3 (Android 4.1, API 16, 720x1280), tương thích với cấu hình Minimum SDK API 14 (Android 4.0 - phiên bản chiếm hơn 90% lượng thiết bị tại thời điểm đó).
- Hệ thống hóa lý thuyết SQLite: Xây dựng bảng tổng hợp chi tiết về các lớp lưu trữ, ánh xạ kiểu dữ liệu và bảng đối chiếu các hạn chế của SQLite so với tiêu chuẩn SQL92.
| Tiêu chuẩn / Tính năng |
Mức độ hỗ trợ trong SQLite |
Chi tiết kỹ thuật theo văn bản |
RIGHT OUTER JOIN |
Không hỗ trợ |
Chỉ hỗ trợ LEFT OUTER JOIN |
FULL OUTER JOIN |
Không hỗ trợ |
Chỉ hỗ trợ LEFT OUTER JOIN |
ALTER TABLE |
Hỗ trợ một phần |
Chỉ hỗ trợ RENAME TABLE và ADD COLUMN; không hỗ trợ DROP COLUMN, ALTER COLUMN, ADD CONSTRAINT |
Trigger |
Hỗ trợ một phần |
Hỗ trợ phát biểu FOR EACH ROW, không hỗ trợ FOR EACH STATEMENT |
VIEWs |
Chế độ chỉ đọc |
Không cho phép thực hiện INSERT, UPDATE, DELETE trên View |
| Ràng buộc khóa ngoại |
Không hỗ trợ |
Không hỗ trợ kiểm tra tính toàn vẹn khóa ngoại tự động |
| Transaction lồng nhau |
Không hỗ trợ |
Không hỗ trợ thực thi transaction bên trong transaction |
| Truy cập đồng thời |
Hỗ trợ đọc |
Cho phép nhiều tiến trình đọc cùng lúc; không cho phép ghi song song |
| Giới hạn lưu lượng |
Khuyến nghị ứng dụng nhỏ |
Phù hợp nhất cho các hệ thống có lưu lượng dưới 100.000 lượt truy cập/ngày |
- Triển khai phần mềm ứng dụng:
- Xây dựng thành công ứng dụng di động quản lý chi tiêu cá nhân sử dụng cơ sở dữ liệu SQLite cục bộ để lưu trữ các bảng giao dịch.
- Biên dịch và đóng gói hoàn chỉnh phần mềm thành tệp thực thi nhị phân
*.apk.
- Cài đặt và vận hành thử nghiệm thành công trên thiết bị di động Android vật lý.
- Giải pháp và khuyến nghị kỹ thuật từ tác giả:
- Đề xuất lựa chọn Minimum SDK ở mức API 14 khi khởi tạo dự án Android nhằm tối đa hóa khả năng tương thích của ứng dụng trên các thiết bị thực tế.
- Khuyến cáo người dùng và lập trình viên không nên sử dụng các phần mềm can thiệp giải phóng RAM của bên thứ ba, vì cơ chế quản lý vòng đời ứng dụng tự động của Android đã tối ưu hóa giữa mức tiêu thụ điện năng và tốc độ phản hồi.
- Khuyến nghị sử dụng SQLite cho các bài toán lưu trữ cục bộ, ứng dụng từ điển, thiết bị nhúng hoặc làm cơ sở dữ liệu tạm thời (concept model); đối với các hệ thống lớn vượt ngưỡng 100.000 lượt truy cập/ngày hoặc đòi hỏi xử lý giao dịch phức tạp, tác giả khuyến nghị chuyển sang các RDBMS chuyên dụng như SQL Server, Oracle hoặc DB2.
- Đóng góp tự nêu: Đồ án là tài liệu hướng dẫn kỹ thuật chi tiết từ khâu cài đặt môi trường, thiết lập biến môi trường SQLite trên máy tính cá nhân, làm quen với thiết kế giao diện Android đến việc lập trình thao tác dữ liệu nhúng, phù hợp cho những người bắt đầu học lập trình ứng dụng di động.
Hạn chế và hướng nghiên cứu tiếp
Về mặt hạn chế, văn bản ghi nhận nhận xét trực tiếp từ cán bộ hướng dẫn (ThS. Phùng Anh Tuấn):
- Tinh thần học tập và nghiên cứu tài liệu của sinh viên được đánh giá tốt, chấp hành tương đối đầy đủ yêu cầu chuyên môn.
- Năng lực làm việc độc lập của sinh viên còn nhiều hạn chế, đặc biệt là trong tư duy thuật toán và kỹ năng lập trình mã lệnh.
- Về phạm vi dữ liệu: Ứng dụng quản lý chi tiêu mới chỉ được kiểm thử trên nguồn số liệu giả lập do tác giả tự tạo, chưa được đánh giá trên các tập dữ liệu tài chính quy mô lớn hoặc môi trường người dùng đại trà.
- Về phạm vi công nghệ: Do các đặc tính hạn chế vốn có của SQLite được nêu trong đồ án, hệ thống chưa hỗ trợ các cấu trúc ràng buộc quan hệ toàn vẹn phức tạp, chưa xử lý được các truy vấn lồng hay giao dịch đa luồng ghi đồng thời.
- Về tài liệu thuyết minh: Công cụ giao diện đồ họa SQLite Administrator (
sqliteadmin.exe) mới chỉ được giới thiệu về mặt tải và khởi động, tác giả chưa đi sâu trình bày hướng dẫn sử dụng chi tiết trong nội dung báo cáo.
Về hướng phát triển tiếp theo, dựa trên phạm vi nghiên cứu và các điểm còn tồn tại của văn bản:
- Nâng cao thuật toán quản lý và tối ưu hóa hiệu năng mã nguồn Java để ứng dụng vận hành mượt mà hơn.
- Mở rộng chức năng cho phần mềm quản lý chi tiêu, thử nghiệm với dữ liệu giao dịch thực tế của người dùng.
- Nghiên cứu cơ chế đồng bộ hóa dữ liệu từ cơ sở dữ liệu nhúng SQLite trên thiết bị di động lên các hệ quản trị cơ sở dữ liệu máy chủ quy mô lớn (như SQL Server hoặc Oracle) khi khối lượng giao dịch tăng cao.
Giá trị tham khảo
Đồ án có giá trị tham khảo thiết thực cho các nhóm đối tượng sau:
- Sinh viên ngành Công nghệ Thông tin, chuyên ngành Kỹ thuật Phần mềm hoặc Hệ thống Thông tin: Là tài liệu hướng dẫn cơ bản từng bước về quy trình phát triển một ứng dụng di động Android từ đầu, từ việc thiết lập cấu hình SDK, IDE Android Studio đến cách kết nối cơ sở dữ liệu nhúng.
- Người nghiên cứu mới làm quen với SQLite: Có thể sử dụng Chương 3 như một tài liệu tra cứu nhanh về cú pháp lệnh DDL/DML/DQL, cách ánh xạ kiểu dữ liệu động, các phương thức lưu trữ ngày giờ, và đặc biệt là bảng phân tích chi tiết các giới hạn kỹ thuật của SQLite so với chuẩn SQL92.
- Người làm đề tài tốt nghiệp hoặc bài tập lớn về Android: Đáng tham khảo nhất ở quy trình cài đặt máy ảo Genymotion kết nối VirtualBox, quy trình đóng gói thành tệp
*.apk, và kỹ thuật phân chia bố cục giao diện kết hợp xử lý các sự kiện OnClickListener trên các thành phần điều khiển.
Câu hỏi thường gặp
1. Dự án lựa chọn phiên bản Android SDK tối thiểu (Minimum SDK) nào và vì sao?
Dự án cấu hình Minimum SDK là API 14, tương ứng với phiên bản Android 4.0 (Ice Cream Sandwich). Lý do được tác giả nêu rõ trong văn bản là tại thời điểm thực hiện đề tài, các thiết bị chạy từ phiên bản API 14 trở lên chiếm tỷ lệ phổ biến vượt trội, đạt hơn 90% tổng số lượng thiết bị Android đang hoạt động, giúp ứng dụng tương thích tối đa với phần cứng người dùng.
2. SQLite trong đồ án bị giới hạn những tính năng nào so với chuẩn SQL92?
Theo bảng đối chiếu kỹ thuật của tác giả, SQLite không hỗ trợ các phép kết ngoài RIGHT OUTER JOIN và FULL OUTER JOIN (chỉ cho phép LEFT OUTER JOIN). Lệnh ALTER TABLE chỉ cho phép đổi tên bảng (RENAME TABLE) và thêm cột mới (ADD COLUMN), không hỗ trợ xóa cột (DROP COLUMN), sửa cột (ALTER COLUMN) hay thêm ràng buộc (ADD CONSTRAINT). Ngoài ra, khung nhìn (VIEW) ở chế độ chỉ đọc, không hỗ trợ ràng buộc khóa ngoại, không hỗ trợ transaction lồng nhau, và đối với Trigger chỉ hỗ trợ FOR EACH ROW chứ không hỗ trợ FOR EACH STATEMENT.
3. Hệ điều hành Android quản lý bộ nhớ RAM như thế nào khi tài nguyên xuống thấp?
Android thiết kế cơ chế quản lý bộ nhớ tự động nhằm tiết kiệm điện năng. Khi một ứng dụng không còn được tương tác, hệ thống sẽ chuyển ứng dụng vào trạng thái dừng ngầm trong RAM thay vì đóng hoàn toàn. Khi bộ nhớ RAM xuống mức thấp, hệ thống tự động quét và chấm dứt các tiến trình không hoạt động dựa theo thời điểm sử dụng cuối cùng (tiến trình cũ nhất sẽ bị tắt trước). Tiến trình này diễn ra hoàn toàn tự động, do đó văn bản chỉ ra các ứng dụng tắt tác vụ (Task Killer) của bên thứ ba là không cần thiết và gây hại nhiều hơn có lợi.
4. Máy ảo thử nghiệm Genymotion được tác giả cấu hình với thông số kỹ thuật cụ thể ra sao?
Tác giả đã cài đặt máy ảo Genymotion tích hợp VirtualBox, đăng nhập tài khoản người dùng (longsmile) và khởi tạo thiết bị máy ảo mô phỏng điện thoại Samsung Galaxy S3. Thông số kỹ thuật bao gồm hệ điều hành Android phiên bản 4.1, mức API 16, và độ phân giải màn hình chuẩn là 720x1280.
5. SQLite lưu trữ kiểu dữ liệu Boolean và Ngày/Giờ (Date and Time) như thế nào?
SQLite không có lớp lưu trữ riêng cho Boolean và Ngày/Giờ:
- Kiểu Boolean: Được lưu trữ dưới dạng số nguyên (
INTEGER), trong đó giá trị 0 đại diện cho false và 1 đại diện cho true.
- Kiểu Ngày/Giờ: Được lưu trữ linh hoạt dưới một trong ba hình thức: chuỗi văn bản
TEXT (định dạng chuẩn YYYY-MM-DD HH:MM:SS.SSS), số thực REAL (số ngày Julian tính từ ngày 24/11/4714 trước Công nguyên), hoặc số nguyên INTEGER (thời gian tính bằng giây theo chuẩn Unix Epoch từ 1970-01-01 00:00:00 UTC).
Kết luận
Đồ án tốt nghiệp "Tìm hiểu SQLite và xây dựng chương trình ứng dụng" của sinh viên Nguyễn Hoàng Long đã hoàn thành đầy đủ các mục tiêu đề ra về mặt tìm hiểu lý thuyết và thực nghiệm kỹ thuật. Tác giả đã tổng hợp có hệ thống các kiến thức về kiến trúc hệ điều hành Android, môi trường lập trình Android Studio và cơ chế hoạt động của hệ quản trị cơ sở dữ liệu nhúng SQLite. Sản phẩm thực nghiệm là ứng dụng quản lý chi tiêu cá nhân đã được đóng gói thành công thành tệp *.apk và vận hành ổn định trên thiết bị Android thật. Mặc dù còn những mặt hạn chế nhất định về thuật toán và tính độc lập trong lập trình như cán bộ hướng dẫn đã nhận xét, công trình vẫn là một tài liệu tham khảo có giá trị thực hành cao cho sinh viên bắt đầu tiếp cận lĩnh vực phát triển ứng dụng di động gắn liền với cơ sở dữ liệu cục bộ.