Tag Archives: SQLite

Objective-C Programming Chapter 17 (Part3)

School Project V.2

โปรแกรมที่ได้เขียนไปก็ทำงานได้ถูกต้อง แต่ถ้าหากเพิ่มเมธอดเข้าไปในคลาส Managed Object ที่ XCode สร้างให้เช่น เพิ่มเมธอด countStudent เข้าไปในคลาส Classroom เพื่อนับจำนวนนักเรียน แต่หลังจากที่เขียนโปรแกรมไปสักพัก ก็พบว่าต้องการจะแก้ไข model เช่น เพิ่มชื่อของอาจารย์ประจำชั้น ผลที่ตามมาจากการเปลี่ยนโมเดล คือคลาสที่เคยใช้ก็จะใช้ไม่ได้เพราะไม่เข้ากับโมเดลใหม่ที่สร้างขึ้น ดังนั้นจึงต้องให้ XCode สร้างคลาสให้ใหม่ การให้ XCode สร้างคลาสให้ใหม่นั้นไม่ใช่ปัญหา แต่สิ่งที่เป็นปัญหาคือเมธอดที่ได้เขียนเพิ่มเข้าไปก็จะหายไปด้วย เนื่องจากเราได้เขียนเมธอดการทำงานต่างๆไว้ในคลาสตัวเก่า เมื่อสร้างคลาสใหม่ XCode จะสร้างไฟล์ใหม่ทับของเดิม โค้ดที่ได้เขียนไปจึงหายไปด้วย การแก้ไขปัญหานี้อาจจะทำได้ด้วยการคัดลอกโค้ดไว้ก่อน แล้วนำไปวางในคลาสใหม่ แต่ถ้าหากเกิดแก้ไขพร้อมกันสัก 5 คลาส การใช้วิธี copy & paste ย่อมไม่ใช่หนทางที่ดีแน่นอน การแก้ปัญหาที่ดีกว่านั้นก็คือใช้แคทิกกอรี่ ดังเช่นตัวอย่างต่อไปนี้

Student+DataManagement.h

Continue reading Objective-C Programming Chapter 17 (Part3)

Objective-C Programming Chapter 17 (Part2)

Core Data

 

Core Data คือเฟรมเวิร์คที่ได้ออกแบบมาเพื่อช่วยในการจัดเก็บข้อมูล ( object persistence framework)  Core Data มีความสามารถหลายอย่างมากเป็นต้นว่า ผู้ใช้งานสามารถกำหนดได้ว่าข้อมูลที่จะจัดเก็บนั้นจะใช้ XML , SQLite หรือเก็บใน iCloud แต่แนวคิดการจัดเก็บข้อมูลของ Core Data นั้นจะต่างจาก SQL พอสมควร เพราะไม่ได้มองข้อมูลในรูปแบบตาราง แต่จะมองว่าข้อมูลในรูปแบบของอ็อบเจ็ก (Managed Object) ถึงแม้ว่าตัว Core Data เองนั้นจะเป็นเพียง Framework เพื่อใช้จัดเก็บข้อมูล ซึ่งไม่ได้รวมไปถึงการออกแบบ managed object ที่จะใช้งาน แต่อย่างไรก็ตามการออกแบบ managed object นั้น ทำได้ง่ายมากใน XCode เพราะมีเครื่องมือช่วย

Core Data Stack

ก่อนที่จะไปใช้งาน API และเครื่องมือต่างๆนั้น ต้องทำความเข้าใจเกี่ยวกับโครงสร้างของ Core Data ก่อนว่าประกอบด้วยอะไรบ้าง และแต่ละส่วนมีความสัมพันธ์กันอย่างไร อย่างที่เห็นในรูปด้านล่าง Core Data ประกอบไปด้วย 4 ส่วนด้วยกันคือ Managed Object Model , Manage Object Context , Persistant Coordinator และ Data Store ส่วนประกอบทั้งหมดนี้จะเรียกว่า Core Data Stack

core_data_stack

Continue reading Objective-C Programming Chapter 17 (Part2)

Objective-C Programming Chapter 17 (Part1)

Chapter 17

 

Database & Core Data

 

การจัดการข้อมูลด้วย Cocoa สามารถทำได้หลายวิธีด้วยกัน ในบทที่ผ่านมาก็ได้ใช้ทั้ง plist หรือเขียนไฟล์จัดการด้วยตัวเองกันไปแล้ว แต่เมื่อต้องจัดการกับข้อมูลที่มีปริมาณมากขึ้นหรือมีความซับซ้อน การจัดการข้อมูลด้วย plist อาจไม่ใช่ทางเลือกที่เหมาะสมมากนัก วิธีการที่ดีกว่านั้นคือการใช้ระบบฐานข้อมูล ซึ่งช่วยให้จัดการข้อมูลต่างๆได้อย่างมีประสิทธิภาพและง่ายกว่าเดิม ในบทนี้จะได้เรียนรู้การจัดการฐานด้วย SQLite ซึ่งเป็นระบบฐานข้อมูลเบื้องต้น นอกจากนี้ยังจะได้ศึกษาและทำความเข้าใจการจัดการข้อมูลในระดับสูงด้วยการใช้ Core Data Framework

SQLite

ระบบฐานข้อมูลเชิงสัมพันธ์หรือที่เรียกว่า Relational Database เป็นระบบการจัดเก็บข้อมูลที่อยู่ในรูปแบบของตาราง โดยแต่ละตารางจะแบ่งออกเป็นแถว ในแต่ละแถวก็ยังแบ่งย่อยออกเป็นคอลัมน์ตามแต่ผู้ใช้กำหนด การจัดการข้อมูลแบบตารางนี้มีความนิยมแพร่หลายมากที่สุดเพราะง่ายต่อการทำความเข้าใจ เช่น ระบบฐานข้อมูล MySQL , Oracle , Microsoft SQL เป็นต้น และ SQLite ก็เป็นหนึ่งในระบบฐานข้อมูลแบบ relational database เช่นกัน การใช้ระบบฐานข้อมูล SQLite มีข้อดีหลายอย่าง เช่นทำงานเร็ว ใช้หน่วยความจำน้อย และข้อดีที่เห็นได้ชัดอีกอย่างหนึ่งคือ SQLite เป็นฐานข้อมูลเบื้องต้นที่มาพร้อมกับ iOS และ Mac OS X กล่าวคือมีไลบรารีและชุดคำสั่งภาษา C ให้เรียกใช้งาน โดยไม่ต้องติดตั้งไลบรารีจากภายนอกเพิ่มเติมแต่อย่างใด

Expense Project

โปรแกรมที่จะได้เขียนกันต่อไปนี้เป็นโปรแกรมบันทึกรายจ่ายประจำวันด้วย SQLite เนื่องจากหนังสือเล่มนี้เน้นการใช้ Framework และ Library เป็นหลัก จึงจะไม่อธิบายการทำงานของคำสั่งทาง SQL โดยละเอียด ผู้อ่านควรมีความรู้เกี่ยวกับระบบการจัดการฐานข้อมูลเบื้องต้นมาก่อน

Create Database
ก่อนที่จะเริ่มลงมือเขียนโปรแกรม เราจะสร้างไฟล์ฐานข้อมูลกันเสียก่อน และเพื่อให้ง่ายต่อการทำความเข้าใจ ฐานข้อมูลที่ใช้ในโปรแกรมจึงได้ออกแบบไม่ซับซ้อน โดยประกอบไปด้วยตาราง EXPENSE เพียงตารางเดียว ที่เก็บข้อมูลหมายเลขของรายการ (index) , กลุ่มของรายการ (group), จำนวนเงิน (amount), และสุดท้ายคือเวลา(date) ดังที่แสดงต่อไปนี้

expense_table

Continue reading Objective-C Programming Chapter 17 (Part1)