2012-02-29 24 views
6

Tôi đang viết một ứng dụng nhỏ để phát nhạc. Mục tiêu của tôi là Android API cấp 7 trở lên.Có thể thực hiện truy vấn thô trên cơ sở dữ liệu meta sqlite truyền thông của Android không?

Ứng dụng chỉ nên liệt kê và phát nhạc đã được gắn thẻ với một bộ thể loại cụ thể do người dùng chọn qua tùy chọn, ví dụ: "Pop", "Rock", "Hillbilly".

Hiện tại tôi đang cố gắng tìm một cách hiệu quả để tìm tất cả các id album và tên album chứa các bản nhạc được gắn thẻ với các thể loại đã chọn.

Điều này rất dễ trong SQL. Điện thoại lưu trữ dữ liệu meta phương tiện trong cơ sở dữ liệu sqlite. Tôi đã tìm thấy nó trên bộ nhớ trong của điện thoại, sao chép nó qua adb và thử một số truy vấn sqlite trên đó. Truy vấn kết quả là một lớp lót SQL với một chuỗi các phép nối và nó hoạt động tốt.

Điều này có vẻ khó khăn hơn trong Java với SDK Android, ít nhất với API cấp 7 trở lên. Tôi có thể sử dụng managedQuery trên MediaStore để làm một số cú pháp SQL có giới hạn trên cùng cơ sở dữ liệu đó, nhưng nếu tôi hiểu chính xác thì không có JOIN và không có DISTINCT khi sử dụng API này.

Ngoài ra tôi có thể đã bỏ qua điều này, nhưng MediaStore cho phép tôi tìm kiếm tất cả các bản nhạc của một thể loại chứ không phải cho tất cả các bản nhạc thuộc một số thể loại trong một truy vấn.

Vì vậy, tất cả điều này nhận được một chút công việc thủ công trong java. Bây giờ chương trình phải thực hiện một số cuộc gọi managedQuery() cho mỗi thể loại và chương trình phải tham gia các kết quả và làm cho chúng khác biệt với java, bên ngoài sqlite (nơi mà tác phẩm này thuộc về).

Đây có phải là cách thực hiện nó không? Không có cách nào để gửi một truy vấn thô đến tệp cơ sở dữ liệu sqlite?

Cảm ơn!

+0

Tôi đã sử dụng db.rawQuery() trước đây cho các cơ sở dữ liệu SQLite của riêng mình trong Android, có thể áp dụng nó cho meta DB không? http://www.codeproject.com/Articles/119293/Using-SQLite-Database-with-Android – mszaro

Trả lời

2

Không, bạn không thể truy cập trực tiếp cấu trúc cơ sở của cơ sở dữ liệu - trên thực tế bạn không có cách nào để biết cấu trúc thực của cơ sở dữ liệu, nó đã thay đổi trên các phiên bản nền tảng. Các truy vấn trực tiếp duy nhất bạn có thể thực hiện là các truy vấn được cung cấp thông qua giao thức MediaStore của nhà cung cấp nội dung.

Các vấn đề liên quan