Android SQLite: พารามิเตอร์ nullColumnHack ในวิธีการแทรก / แทนที่


96

Android SDK มีวิธีอำนวยความสะดวกบางอย่างในการจัดการข้อมูลด้วย SQLite อย่างไรก็ตามทั้งวิธีการแทรกและแทนที่ใช้nullColumnHackพารามิเตอร์บางอย่างที่ฉันไม่เข้าใจการใช้งาน

เอกสารประกอบอธิบายดังต่อไปนี้ แต่ถ้าตารางมีหลายคอลัมน์ที่อนุญาตNULL? ฉันไม่เข้าใจจริงๆ: /

SQL ไม่อนุญาตให้แทรกแถวที่ว่างเปล่าทั้งหมดดังนั้นหาก initialValues ​​ว่างคอลัมน์นี้ [ / row for replace ] จะได้รับการกำหนดNULLค่าอย่างชัดเจน

คำตอบ:


196

สมมติว่าคุณมีตารางชื่อfooที่คอลัมน์ทั้งหมดอนุญาตNULLค่าหรือมีค่าเริ่มต้น

ในการใช้ SQL บางอย่างสิ่งนี้จะเป็น SQL ที่ถูกต้อง:

INSERT INTO foo;

ไม่ถูกต้องใน SQLite คุณต้องระบุอย่างน้อยหนึ่งคอลัมน์:

INSERT INTO foo (somecol) VALUES (NULL);

ดังนั้นในกรณีที่คุณส่งผ่านช่องว่างContentValuesไปinsert()Android และ SQLite จำเป็นต้องมีคอลัมน์ที่ปลอดภัยในการกำหนดNULLให้ หากคุณมีคอลัมน์ดังกล่าวให้เลือกหลายคอลัมน์ให้เลือกหนึ่งคอลัมน์ผ่านกลไกการเลือกที่คุณต้องการ: ทอยลูกเต๋า, Magic 8-Ball (TM), การพลิกเหรียญ, การพลิกคูบิเคิลเมท ฯลฯ

โดยส่วนตัวแล้วฉันเพิ่งทำให้มันผิดกฎหมายที่จะผ่านContentValuesไปinsert()แต่พวกเขาไม่ได้ถามฉัน ... :-)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.