תכנות SQLite במדריך ג 'שני

מדריך זה הוא השני בסדרה על תכנות SQLite בסי.

SQLite מאחסן אוסף של טבלאות בקובץ יחיד מאגר מידע, בדרך כלל מסתיים ב- .db. כל טבלה דומה לגיליון אלקטרוני, היא מורכבת ממספר עמודות ובכל שורה יש ערכים.

אם זה עוזר, חשוב על כל שורה להיות מבנה, עם ה עמודות בטבלה המתאים לשדות במבנה.

בטבלה יכולות להיות שורות רבות ככל שיתאימו בדיסק. יש גבול עליון אך 18,446,744,073,709,551,616 העצומים שלו ליתר דיוק.

טבלה יכולה לכלול עד 2,000 עמודות, או אם תקבץ מחדש את המקור, תוכל להגדיל אותה למקסימום 32,767 עמודות.

ממשק ה- API של SQLite

כדי להשתמש ב- SQLite, עלינו לבצע שיחות לממשק ה- API. אתה יכול למצוא מבוא לממשק API זה הרשמי מבוא לממשק SQLite C / C ++ עמוד אינטרנט. זה אוסף של פונקציות וקל לשימוש.

ראשית, אנו זקוקים לטפל במסד הנתונים. זה מסוג sqlite3 ומוחזר באמצעות קריאה ל- sqlite3_open (שם קובץ, ** ppDB). לאחר מכן אנו מבצעים את SQL.

בואו נתחיל קודם כל עיכול קל ונעשה בסיס נתונים שמיש וכמה טבלאות באמצעות SQLiteSpy. (עיין במדריך הקודם לקישורים אליו ולדפדפן מסד הנתונים SQLite).

אירועים ומועדים

מסד הנתונים אודות. DB תקיים שלושה שולחנות לניהול אירועים במספר מקומות. אירועים אלה יהיו מסיבות, דיסקוטקים והופעות, והם יתקיימו בחמישה מקומות (אלפא, בטא, צ'ארלי, דלתא והד). כשאתה מדגמן משהו כזה, זה עוזר לעיתים קרובות להתחיל בגיליון אלקטרוני. לשם הפשטות, אני פשוט אחסן תאריך לא זמן.

instagram viewer

לגיליון האלקטרוני שלוש עמודות: תאריכים, מקום, סוג אירוע וכ כעשרה אירועים כאלה. התאריכים נמשכים בין ה 21- ל 30 ביוני 2013.

כעת ל- SQLite אין סוג תאריך מפורש, כך שקל ומהיר יותר לאחסן אותה כמבנה זהה ובאותה אופן שבו Excel משתמש בתאריכים (בימים מאז ה- 1 בינואר 1900) יש ערכי int 41446 עד 41455. אם אתה שם את התאריכים בגיליון אלקטרוני ואז פורס את עמודת התאריך כמספר עם 0 מקומות עשרוניים, זה נראה כך:

כעת נוכל לאחסן נתונים אלה בטבלה אחת ולדוגמא כל כך פשוטה, זה כנראה יהיה מקובל. עם זאת פרקטיקות טובות של עיצוב מסדי נתונים דורשות כמה נורמליזציה.

פריטי נתונים ייחודיים כמו סוג מקום אמורים להיות בטבלה משלו וסוגי האירועים (מסיבה וכו ') צריכים להיות באחד. לבסוף, מכיוון שיכולים להיות לנו סוגי אירועים מרובים במקומות מרובים, (מערכת יחסים בין רבים לרבים) אנו זקוקים לטבלה שלישית שתקיים את אלה.

שלושת הטבלאות הן:

  • מקומות - מחזיקה בכל חמשת המקומות
  • סוגי אירועים - מכיל את שלושת סוגי האירועים
  • אירועים - מחזיק בתאריך פלוס מזהה מקום בתוספת מזהה סוג אירוע. הוספתי גם שדה תיאור לאירוע זה למשל "יום הולדתו של ג'ים".

שתי הטבלאות הראשונות מכילות את סוגי הנתונים כך שבמקומות יש שמות אלפא להד. הוספתי גם מזהה מספר שלם ויצרתי אינדקס לזה. עם המספרים הקטנים של מקומות (5) וסוגי אירועים (3), ניתן היה לעשות זאת ללא אינדקס, אך עם טבלאות גדולות יותר, זה יעבור לאט מאוד. אז כל טור שעשוי לחפש בו, הוסף אינדקס, רצוי מספר שלם

ה- SQL ליצירת זה הוא:

האינדקס בטבלת האירועים כולל תאריך, אירוע מזהה, סוג האירוע ומקום האירוע. המשמעות היא שאנו יכולים לבצע שאילתות בטבלת האירועים עבור "כל האירועים בתאריך", "כל האירועים במקום", "כל המסיבות" וכו 'ושילובים של כאלה כמו "כל המסיבות במקום" וכו'.

לאחר הפעלת שאילתות הטבלה של SQL, שלושת הטבלאות נוצרות. הערה שמתי את כל ה- sql בקובץ הטקסט create.sql והוא כולל נתונים לאכלוס חלק משלושת הטבלאות.

אם אתה שם; בסוף השורות כפי שעשיתי ב- create.sql אז אתה יכול לבצע אצווה ולהוציא לפועל את כל הפקודות בפעם אחת. בלי ה; אתה צריך לנהל כל אחד בפני עצמו. ב- SQLiteSpy, פשוט לחץ על F9 כדי להריץ הכל.

צירפתי גם את sql כדי להפיל את כל שלושת הטבלאות בתגובות מרובות שורות באמצעות / *.. * זהה לזה ב- C. פשוט בחר את שלוש השורות ובצע ctrl + F9 כדי לבצע את הטקסט שנבחר.

פקודות אלה מכניסות את חמשת המקומות:

שוב צירפתי טקסט שהגיב לטבלאות ריקות עם למחוק מ שורות. אין ביטול אז היזהר עם אלה!

באופן מדהים, עם כל הנתונים שהועמסו (יש להודות שלא הרבה) כל קובץ בסיס הנתונים בדיסק הוא 7KB בלבד.

נתוני אירוע

במקום לבנות חבורה של עשרה הצהרות הוספה, השתמשתי ב- Excel כדי ליצור קובץ .csv לנתוני האירוע ואז השתמש בכלי שירות שורת הפקודה SQLite3 (שמגיע עם SQLite) ובפקודות הבאות לייבוא זה.

הערה: כל שורה עם קידומת תקופה (.) היא פקודה. השתמש ב. עזרה כדי להציג את כל הפקודות. להפעלת SQL פשוט הקלידו אותה ללא קידומת תקופתית.

עליך להשתמש בכתמי הכחלה כפולים \\ בנתיב הייבוא ​​עבור כל תיקיה. עשה רק את השורה האחרונה לאחר שהיבוא הצליח. כאשר SQLite3 מפעיל, מפריד ברירת המחדל הוא: כך שיש לשנות אותו לפסיק לפני הייבוא.

חזרה לקוד

כעת יש לנו בסיס נתונים מאוכלס לחלוטין, בואו ונכתב את קוד C להפעלת שאילתת SQL זו המחזירה רשימת צדדים, עם תיאור, תאריכים ומקומות.

  • חדש ב- SQL? קרא מה זה SQL?

פעולה זו מצטרפת באמצעות העמודה idvenue בין טבלת האירועים והמקומות כך שנקבל את שם המקום ולא את הערך המקורי שלו.

פונקציות API של SQLite C

יש פונקציות רבות אך אנו זקוקים רק לקומץ. סדר העיבוד הוא:

  1. פתח מסד נתונים עם sqlite3_open (), צא אם יש שגיאה בפתיחתו.
  2. הכן את ה- SQL באמצעות sqlite3_prepare ()
  3. לולאה באמצעות slqite3_step () עד לא עוד רשומות
  4. (בלולאה) מעבד כל עמודה עם sqlite3_column ...
  5. סוף סוף להתקשר ל- sqlite3_close (db)

יש שלב אופציונלי לאחר התקשרות ל- sqlite3_prepare בו כל אחד מחויב לעבור בפרמטרים, אך אנו נשמור זאת לצורך הדרכה עתידית.

אז בתוכנית המפורטת להלן קוד הפסאודו לשלבים העיקריים הם:

ה- sql מחזיר שלושה ערכים כך שאם sqlite3.step () == SQLITE_ROW אז הערכים מועתקים מסוגי העמודות המתאימים. השתמשתי ב- int ובטקסט. אני מציג את התאריך כמספר אבל מרגיש חופשי להמיר אותו לתאריך.

רשימת קוד דוגמה