2013-04-18 44 views
5

Tôi có 3 bảng trong cơ sở dữ liệu sqllite của mình Hai bảng cấu hình và một là bảng chính nơi dữ liệu của tôi được lưu trữ. bây giờ làm thế nào để lấy lại dữ liệu từ bảng chính bằng cách tham gia 2 bảng trong android, Làm thế nào và ở đâu để thực hiện các hoạt động nối.Tham gia các bảng trong android

Bất kỳ ai cũng có thể hướng dẫn tôi.

+0

http://www.w3schools.com/sql/sql_join.asp kiểm tra này và sử dụng loại khác nhau tham gia theo yêu cầu của bạn .... – SBJ

+0

Cảm ơn phản ứng của bạn SBJ thực sự tôi biết về các kết nối này nhưng tôi không chắc chắn làm thế nào để thực hiện tương tự trong android – Siva

Trả lời

9

bạn chỉ có thể thực thi một rawQuery.
Ví dụ một cái gì đó như thế này:

db.rawQuery("SELECT a.* 
FROM table_1 a 
INNER JOIN table_2 b ON a.id=b.anyId 
INNER JOIN table_3 c ON b.id= c.anyId 
WHERE c.key = ?", new String[]{"test"}); 

Tham số đầu tiên là truy vấn mà bạn muốn thực hiện. Đối với tất cả các khóa bạn muốn thêm vào truy vấn, chỉ cần thêm một số ? trong truy vấn.
Tham số thứ hai là một Chuỗi Chuỗi. Trong mảng này, bạn đặt các khóa của mình, như ví dụ ở trên giá trị test.

EDIT:

nó cũng có thể sử dụng rawQuery cho update, insert hoặc delete.
Ví dụ một truy vấn cập nhật đơn giản:

db.rawQuery("UPDATE table_1 
SET fieldA = ?, 
fieldB = ? 
WHERE id = ?", new String[]{"test", "test2", "1"}); 
+0

Cảm ơn Obl Tobl nhưng tôi đã học được truy vấn thô có thể tạo ra một số vấn đề là có bất kỳ khác cách để thực hiện kết nối và truy vấn chọn lửa – Siva

+0

Bạn có thể cho tôi biết bạn đã nghe thấy vấn đề gì không trong khoảng? tôi không bao giờ gặp bất kỳ vấn đề gì trong dự án của mình. –

+0

Thường thì phương pháp truy vấn thô trả về kết quả sai và tôi đã khuyên không sử dụng nó ... Nếu đó là cách hợp lệ, chúng tôi có thể thực hiện chèn, cập nhật và xóa với truy vấn thô ... Nếu có, bạn có thể vui lòng hướng dẫn tôi. xin lỗi vì hỏi câu hỏi somany Tôi là một newbie trong android và tôi chỉ đang học giai đoạn .. Cảm ơn – Siva

-1

Bạn cần rawQuery phương pháp để giải quyết vấn đề này.

private final String MY_QUERY = "SELECT * FROM table_a a INNER JOIN table_b b ON a.id=b.other_id WHERE b.property_id=?"; 

db.rawQuery(MY_QUERY, new String[]{String.valueOf(propertyId)}); 

Nhưng nếu bạn muốn thực hiện tốt, hãy tạo SQLiteHelper và DataSource cho mỗi bảng và thực hiện mối quan hệ trong nguồn dữ liệu.

+0

Cảm ơn phản hồi của bạn
Có ... chính xác ... thay vì truy vấn thô này giống như chèn là có bất kỳ fucntion để tham gia bàn và sử dụng trong truy vấn chọn – Siva

0

lớp DatabaseHelper kéo dài SQLiteOpenHelper

ghi bên dưới mã trong funcions của bạn ...

SQLiteDatabase db = this.getReadableDatabase(); 

    private final String MY_QUERY = "YOUR QUERY"; 

    db.rawQuery(MY_QUERY, new String[]{"Parameter"}); 
    db.close(); 
+0

Cảm ơn SBJ của chúng tôi sẽ thực hiện nó. – Siva

+0

bạn thực sự chỉ cần sao chép câu trả lời của tôi? đó không phải là phong cách quý tộc thực sự ... –

+0

tôi sao chép mục đích truy vấn của bạn cách sử dụng truy vấn ... bây giờ tôi đã xóa ok .... – SBJ

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