
getAllProducts במחלקה Database, שמחזירה ArrayList<Product>.getReadableDatabase(), כי רק קוראים.rawQuery("select * from products", null). הכוכבית אומרת כל העמודות. אפשר לבחור עמודות מסוימות, למשל select name או name, price, ואפשר לסנן רשומות עם where.while (cursor.moveToNext()). הפונקציה גם מזיזה את המצביע שורה קדימה (בפעם הראשונה אל השורה הראשונה, כי הוא מתחיל לפניה) וגם מחזירה false כשנגמרו הרשומות.cursor.getColumnIndex("id"), "name" ו-"price". אין להניח שהעמודות ממוקמות בסדר מסוים, כי הוא עשוי להשתנות.getInt(idIndex), getString(nameIndex) ו-getDouble(priceIndex). בונים Product עם הבנאי שמקבל id, name ו-price ומוסיפים לרשימה.Cursor ואת החיבור, ומחזירים את הרשימה.ArrayList ריק, קוראים ל-database.getAllProducts().id 2 חסר, כי המוצר נמחק קודם.הטקסט המלא של הדקות הראשונות בהרצאה «חיבור למסד נתונים SQLite - חלק 7» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הפעולה האחרונה שנשארה לנו בארבעת פעולות ה-קרוד, קריאייט ריד, אפדייט דיליט, זאת פעולת ה-ריד.
אנחנו רוצים שברגע שהאפליקציה עולה, לקרוא את כל המידע מהדאטאבייס ולהציג אותו באפליקציה. כאן אנחנו צריכים לגשת שוב פעם למחלקה שבנינו, דאטאבייס, וליצור כאן פונקציה שמחזירה את כל המוצרים מהדאטאבייס.
הפונקציה הזאת תחזיר לנו הריי-ליסט של פרודקט, נקרא לה get all products ושאילתת הsql תהיה כזאת שמחזירה לנו את כל המוצרים. טוב, בואו נבנה כאן arraylist של product, נקרא לו product, נבנה אובייקט arraylist חדש, ניקש ונבנה sqlite למעשה, sqlite database db אבל הפעם get readable database אנחנו לא רוצים לכתוב אנחנו רק
רוצים לקרוא מה database ואנחנו רוצים לגשת לדיבי ולקרוא לפונקציה שנקראת row query זאת פונקציה שכבר ראינו שמה שהיא עושה היא מחזירה לנו מידע על ידי שאילתת סלקט וניגש ונעשה שאילתת סלקט כוכבית from product הכוכבית מתארת את כל העמודות.
אם היינו רוצים נניח רק עמודה אחת לדוגמה רק את הניים, אבל היינו יכולים סלקט ניים. אם היינו רוצים רק ניים ופרייס היינו פשוט שמים את זה עם פסיקים.
ברגע שאנחנו מציינים כוכבית זה אומר שאנחנו רוצים את כל העמודות וכמובן את כל הרשומות, אם לא היינו רוצים את כל הרשומות, היינו צריכים לעשות פה איזשהו תנאי where שמתאר אילו רשומות ברצוננו להביא.
זאת שפת sql שאמרנו כדאי לסגור אותה אם עובדים עם מסדי נתונים. כאן אנחנו צריכים להעביר עוד null כי זה פרמטר שהוא לא בשימוש כרגע, ומה שהפונקציה עושה זה היא מחזירה cursor אז בואו נקבל את זה.
עכשיו, קורסור זה משהו שעבדנו איתו כבר פה למעלה, כאשר רצינו לבחור ולהביא מהדאטאבייס את האידנטיטי שהתווספת, הקוד של האוטו אינקרמנט שהדאטאבייס יצר עבור המוצר שלנו, וקורסור למעשה זה מה שאנחנו מקבלים כאשר אנחנו רוצים לבחור ולהחזיר כל מידע מהדאטאבייס.
במקרה הזה אנחנו רוצים להביא את כל טבלת המוצרים. אז כאמור הקורסור זה בעצם כמו פוינטר כזה חץ קטן שמצביע כל רגע ורגע על רשומה אחת ויחידה שנמצאת בתוך הטבלה הזאת שמוחזרת לנו מהטבלה הזאת ומה שאנחנו רוצים לעשות זה קודם כל להזיז אותו אחד קדימה ואז להתחיל לקרוא את המידע אבל אין לנו שורה אחת יש לנו טבלה עם הרבה שורות
אז אנחנו צריכים לבצע איזושהי לולאה בכדי לקרוא את כל המידע. מה שאנחנו עושים בלולאה זה רצים על cursor.move2next. move2next זאת פונקציה שעושה שני דברים.
א', היא קודם כל מזיזה את הפוינטר שורה אחת קדימה. ואמרנו שכאשר הפונקציה row query מחזירה לנו cursor, הוא מצביע על הרשומה הווירטואלית שנמצאת לפני הרשומה הראשונה בכלל.
אז קודם כל move to next מקפיצה אותנו לשורה הראשונה בהתחלה. הדבר השני שהיא עושה זה מחזירה בולען שמציין האם יש רשומה חוקית או שאין כי הגענו לסוף. אז אם היא מחזירה true זה אומר שיש רשומה עם מידע ואנחנו רוצים להמשיך ולקרוא את המידע.
ואז בתוך ה-while אנחנו פשוט רוצים לקרוא את הנתונים. איך אנחנו קוראים את הנתונים? מה שאנחנו עושים זה יוצרים בואו ניקח int id כי אנחנו רוצים גם את ה-id גם את ה-name וגם את ה-price פונים לקורסור ואומרים לו מה אנחנו רוצים, גט אינט או גט סטרינג או כל דבר.
עכשיו, כל פונקציה כזאת של גט מקבלת את המיקום של העמודה. אז אפשר להגיד ש-id יהיה מיקום 0, name יהיה מיקום 1 ו-price יהיה מיקום 2, כי ככה בעצם רשמנו את זה פה, ה-id היה הראשון, ה-name היה השני, ה-price שלישי.
אבל זה בהחלט לא נכון להניח את זה. א', אנחנו לא באמת יודעים שזה המצב וב' אולי בהמשך נשנה את המיקומים שלהם.
לכן אנחנו שנייה לפני שאנחנו קוראים לגט אינט ונותנים את הקולום אינדקס אנחנו רוצים לדעת רגע מה האינדקסים שלהם. את זה אנחנו לא צריכים לעשות בתוך הלולאה כי אנחנו צריכים רק פעם אחת לקבל את ה-ID אינדקס.
מהו האינדקס המיקום של הרשומה או ליתר דיוק העמודה של ה-id, זה יהיה cursor.getcolumnindex ואז הוא שואל אותנו איזה בדיוק עמודה אתם רוצים, זה יהיה ה-id, אחלה, בואו נשכפל את זה ל-name index ופה אנחנו כמובן רושמים name ובואו נשכפל את זה ל-price index ואנחנו רוצים את עמודת
ה-price ועכשיו אנחנו יכולים