2011-11-08 35 views
19

tôi đã cố gắng xóa một cột bằng cách sử dụng như sauLàm cách nào để xóa cột khỏi bảng sqlite trong android?

openDB.execSQL("ALTER TABLE favs" + " DROP COLUMN favsCount"); 

LogCat đưa ra thông điệp sau:

11-07 21: 18: 29,238: ERROR/Cơ sở dữ liệu (13.952): Thất bại 1 (gần "DROP": lỗi cú pháp) trên 0x34e550 khi chuẩn bị 'ALTER TABLE favs DROP COLUMN favsCount'.

Bạn không thể xóa các trường trong sqlite cho Android?

Trả lời

42

Xin lỗi, SQLite doesn't support DROP COLUMN:

(11) Làm thế nào để thêm hoặc xóa các cột từ một bảng hiện có trong SQLite.

SQLite có hỗ trợ ALTER TABLE giới hạn mà bạn có thể sử dụng để thêm cột vào cuối bảng hoặc để thay đổi tên của bảng. [...]

Ví dụ: giả sử bạn có bảng có tên "t1" có tên cột "a", "b" và "c" và bạn muốn xóa cột "c" khỏi bảng này. Các bước sau đây minh họa cách này có thể được thực hiện:

BEGIN TRANSACTION; 
CREATE TEMPORARY TABLE t1_backup(a,b); 
INSERT INTO t1_backup SELECT a,b FROM t1; 
DROP TABLE t1; 
CREATE TABLE t1(a,b); 
INSERT INTO t1 SELECT a,b FROM t1_backup; 
DROP TABLE t1_backup; 
COMMIT; 

Vì vậy, về cơ bản, bạn phải sử dụng các "sao chép, thả bảng, tạo bảng mới, sao chép lại" kỹ thuật để loại bỏ một cột.

+0

Hãy coi chừng "BEGIN TRANSACTION;" và "COMMIT;" vì chúng có thể chặn cơ sở dữ liệu, vì một giao dịch đã được bắt đầu trong 'SQLiteOpenHelper.getWritableDatabase()'. – EmmanuelMess

+0

@muistooshort, nhận xét của EmmanuelMess hợp lệ như thế nào? – Suragch

+0

@Suragch Kiểm tra tài liệu cho 'SQLiteOpenHelper.getWritableDatabase()' (giả sử đó là những gì bạn đang sử dụng tất nhiên). Đó là bit ví dụ SQL được trích dẫn từ tài liệu SQLite BTW. –

4

vì mu quá ngắn nên Sqlite không cho phép thực hiện thay đổi bảng để xóa cột. tại đây bạn có thể thấy alter syntax definition

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