Το προφίλ μας στο Google Plus
0

SQLite: Μια βάση και στα γρήγορα! [μέρος 1/2]

Πιστεύετε ότι η χρήση μιας βάσης δεδομένων για τις ανάγκες μικρών εφαρμογών αποτελεί περιττή πολυτέλεια; Σκεφτόσαστε μήπως ότι η εγκατάσταση ενός RDBMS σ’ ένα σύστημα με περιορισμένους πόρους, θα του κάτσει βαρύ; Σωστά σκέπτεστε. Ευτυχώς που η SQLite καλύπτει άνετα την απόσταση μεταξύ της ισχύος ενός ολοκληρωμένου RDBMS, και της “ελαφρότητας” που απαιτούν οι σύγχρονες εφαρμογές.

Σχεδόν κάθε φορά που αναπτύσσουμε μια εφαρμογή, ερχόμαστε αντιμέτωποι με το ζήτημα της αποθήκευσης και της ανάκτησης δεδομένων. Μπροστά σ’ αυτό το πρόβλημα ενδέχεται να ακολουθήσουμε τη (φαινομενικά) απλή λύση της χρήσης μεμονωμένων αρχείων. Κάνοντας κάτι τέτοιο, όμως, αναλαμβάνουμε την ευθύνη να στήσουμε το μηχανισμό που θα διαχειρίζεται τα αρχεία και τα δεδομένα. Αυτό μπορεί να ακούγεται απλό, αλλά δεν είναι πάντα. Αν σκοπεύουμε να αποθηκεύουμε πολλά “κομματάκια” δεδομένων, αγνώστου “μήκους” και πλήθους, ο σωστός χειρισμός ενδέχεται ν’ αποδειχθεί μεγάλος μπελάς. Αρκεί να σκεφτεί κανείς τα διάφορα bugs που μπορεί να ξεφυτρώσουν στον κώδικα, προκαλώντας μικρές και τυχαίες αλλοιώσεις στα δεδομένα ή μια συνολική επιβάρυνση στη λειτουργία του προγράμματος (π.χ., εξαιτίας κάποιων memory leaks). Τα παραπάνω προβλήματα πολλαπλασιάζονται όταν στον άγνωστο όγκο δεδομένων προσθέσουμε και τη διασύνδεσή τους με πολύπλοκες σχέσεις. Ειδικά σ’ αυτές τις περιπτώσεις, η χρήση μιας βάσης δεδομένων αποτελεί την ιδανική επιλογή. Λύνει όλα μας τα προβλήματα εύκολα, εξασφαλίζει την ακεραιότητα των δεδομένων, ενώ κατά πάσα πιθανότητα θα βελτιώσει και τις επιδόσεις. Ωραία όλα αυτά, θα πείτε, αλλά πού είναι η παγίδα; Η χρήση μιας βάσης δεδομένων ή, πιο σωστά, ενός RDBMS (Relational Database Management System), προϋποθέτει την εγκατάσταση και τη ρύθμιση του αντίστοιχου server, ο οποίος θα εξυπηρετεί τα αιτήματα προς τη βάση. Μπορεί το (σωστό) στήσιμο τέτοιων υπηρεσιών να μην αποτελεί δύσκολη υπόθεση, σίγουρα όμως δεν ταιριάζει σε μια μικρή εφαρμογή που τρέχει σ’ ένα σύστημα περιορισμένων πόρων και δυνατοτήτων.

Ο Δαβίδ των RDBMS
Όσα είπαμε προηγουμένως για τις βάσεις ισχύουν στις περισσότερες των περιπτώσεων, αλλά όχι πάντα. Η SQLite αποτελεί την εξαίρεση, καθώς πρόκειται για μια βάση δεδομένων που καλύπτει άνετα τις ανάγκες μιας μικρής εφαρμογής, ενώ προσφέρει τα προσόντα και τις ευκολίες που παρέχουν συνήθως τα μεγάλα συστήματα διαχείρισης σχεσιακών βάσεων δεδομένων. Το δεύτερο συνθετικό του ονόματός της, το lite, δεν αναφέρεται στο πλήθος των δυνατοτήτων, αλλά στους πόρους που απαιτεί για τη λειτουργία της. Η SQLite δεν βασίζεται στη γνωστή αρχιτεκτονική client-server, που συναντάμε στα περισσότερα συστήματα του είδους. Πρόκειται για μια βιβλιοθήκη που διαχειρίζεται άμεσα ένα αρχείο δεδομένων, για κάθε βάση που δημιουργούμε. Δεν κάναμε λάθος: Η SQLite διατηρεί ένα μόλις αρχείο, την ίδια στιγμή που οι κλασικές βάσεις δημιουργούν και διαχειρίζονται ένα ολόκληρο σύστημα αρχείων. Αυτή η προσέγγιση προσφέρει αρκετά πλεονεκτήματα σε μια μικρή εφαρμογή, τα οποία σχετίζονται με τις απαιτήσεις σε πόρους και φυσικά με τις επιδόσεις. Επιπρόσθετα, οι διάφορες βάσεις της SQLite μεταφέρονται πανεύκολα, αφού αρκεί η αντιγραφή ενός μόνο αρχείου. Η βιβλιοθήκη SQLite μπορεί να ενσωματωθεί σε οποιαδήποτε εφαρμογή και σε κάθε λειτουργικό σύστημα, ενώ υποστηρίζει και το πρότυπο SQL (για την ακρίβεια το SQL92). Τέλος, αξίζει ν’ αναφέρουμε ότι η εν λόγω βιβλιοθήκη παρέχεται εντελώς ελεύθερα, χωρίς ύπουλους περιορισμούς κι απαλλαγμένη από πατέντες.

Η πλειονότητα των καθιερωμένων RDBMS απαιτεί την ύπαρξη ενός server, σε ρόλο διαμεσολαβητή μεταξύ της εφαρμογής μας και της βάσης δεδομένων. Αυτό δεν ισχύει στην περίπτωση της SQLite!

Η πλειονότητα των καθιερωμένων RDBMS απαιτεί την ύπαρξη ενός server, σε ρόλο διαμεσολαβητή μεταξύ της εφαρμογής μας και της βάσης δεδομένων. Αυτό δεν ισχύει στην περίπτωση της SQLite!

Ανάλαφροι περιορισμοί
Θα έχετε μάλλον εκπλαγεί με το πόσα πολλά μπορεί να κάνει η SQLite και ίσως να αναρωτιέστε γιατί δεν είναι περισσότερο διαδομένη. Για την επίτευξη όσων αναφέραμε, η SQLite κάνει ορισμένες εκπτώσεις σε ζητήματα λειτουργικότητας, οι οποίες την καθιστούν ακατάλληλη για εφαρμογές μεγάλης κλίμακας. Κατ’ αρχάς, το μέγεθος μιας βάσης στην SQLite υπόκειται στους περιορισμούς που θέτει για το μέγεθος των αρχείων το εκάστοτε file system. Ένα άλλο μειονέκτημα σχετίζεται με τα σενάρια χρήσης στα οποία απαιτείται διαβαθμισμένη πρόσβαση στη βάση. Η SQLite δεν επιτρέπει σε ξεχωριστά προγράμματα –ούτε σε επιμέρους υποσυστήματα της ίδιας εφαρμογής– να διαβάζουν τη βάση με διαφορετικά δικαιώματα. Γενικότερα, υποστηρίζει μόνο ένα “κλείδωμα” για κάθε βάση, το οποίο αφορά σε όλους τους πίνακες. Στο συγκεκριμένο ζήτημα, η SQLite ακολουθεί τη λογική “ή όλα ή τίποτα”. Επιπρόσθετα, η SQLite παρουσιάζει μια σχετική ακαμψία σε ό,τι αφορά στη δομή των πινάκων. Έτσι, ενώ είναι πολύ εύκολο να προσθέσουμε νέα πεδία (νέες στήλες) στο τέλος ενός πίνακα, είναι αδύνατο να διαγράψουμε κάποιο από τα προϋπάρχοντα πεδία. Αυτό σημαίνει ότι όταν σχεδιάζουμε βάσεις δεδομένων για την SQLite πρέπει να επιδεικνύουμε μεγάλη προσοχή και προνοητικότητα, ώστε αργότερα να μη χρειάζονται αλλαγές. Πάντως, ακόμα κι αν προκύψει η ανάγκη για μεγάλες αλλαγές σε κάποιον πίνακα, δεν θα έρθει το τέλος του κόσμου. Μπορούμε να φτιάξουμε έναν νέο πίνακα με τη σωστή δομή και να αντιγράψουμε από τον παλιό μόνο τα πεδία που χρειαζόμαστε. Τέλος, ένα ακόμα χαρακτηριστικό που απουσιάζει από το οπλοστάσιο της SQLite είναι η δυνατότητα δημιουργίας ρεπλίκας της βάσης, σε πραγματικό χρόνο.

Θέλουμε να πιστεύουμε ότι οι περιορισμοί που αναφέραμε δεν σας απογοήτευσαν. Η SQLite είναι μικρή, ελαφριά και παρ’ όλο που θα μπορούσε να υποκαταστήσει κάποια από τις “μεγάλες” βάσεις, μπορεί να αξιοποιηθεί σε πάρα πολλές μικρές εφαρμογές.

Στα ενδότερα της SQLite
Οι διαφορές που παρουσιάζει η SQLite έναντι των υπολοίπων RDBMS δεν εξαντλούνται σε όσα είπαμε ήδη. Στα άλλα συστήματα, κάθε στήλη (πεδίο) ενός πίνακα μπορεί να φιλοξενεί δεδομένα συγκεκριμένου τύπου. Για παράδειγμα, μόνο κείμενο (text), μόνο αριθμούς κινητής υποδιαστολής (float), μόνο ακεραίους (integer) και πάει λέγοντας. Οι πίνακες της SQLite παρουσιάζουν μεγαλύτερη ευελιξία σ’ αυτόν τον τομέα. Μια στήλη μπορεί να φιλοξενεί δεδομένα διαφορετικών τύπων, αρκεί αυτοί οι τύποι να ανήκουν στην ίδια οικογένεια. Έτσι, κατά την προσθήκη ενός πεδίου σε έναν πίνακα δεν ορίζουμε κάποιο συγκεκριμένο τύπο αλλά το “βαθμό συγγένειας” (affinity) των δεδομένων που θα φιλοξενούνται. Αυτή η δήλωση δεν είναι δεσμευτική για το μέλλον, αλλά βοηθάει την SQLite να κάνει τις κατάλληλες μετατροπές καθώς εισάγουμε δεδομένα στον πίνακα. Οι επιλογές που προσφέρονται εδώ είναι οι εξής: NULL, INTEGER, REAL, TEXT και BLOB. Νομίζουμε ότι δεν χρειάζεται να δώσουμε ιδιαίτερες εξηγήσεις για τον καθένα. Μόνο ο τύπος BLOB (Binary Large Object) αξίζει ιδιαίτερης αναφοράς, καθώς είναι ιδανικός για την αποθήκευση ολόκληρων αρχείων εικόνας, ήχου ή και προγραμμάτων. Σημειώστε ότι σε κάθε πίνακα υπάρχει ένα πεδίο του οποίου ο τύπος δεν μπορεί να αλλάξει. Πρόκειται για το πεδίο INTEGER PRIMARY KEY, που φιλοξενεί πάντα μοναδικούς ακεραίους αριθμούς.

Δεν ξέρουμε αν το προσέξατε, αλλά η SQLite δεν διαθέτει κάποιον τύπο για την αποθήκευση ημερομηνίας και ώρας. Αυτό σημαίνει ότι μπορούμε να αξιοποιήσουμε τον τύπο TEXT και να προσδιορίσουμε την εκάστοτε χρονική στιγμή με οποιονδήποτε τρόπο μας εξυπηρετεί. Εναλλακτικά, μπορούμε να χρησιμοποιήσουμε τον τύπο INTEGER και να εκφράσουμε την ημερομηνία με τη μορφή ενός timestamp, όπως γίνεται στα συστήματα Unix. Ένας άλλος διαδεδομένος τύπος που απουσιάζει από την SQLite είναι ο Boolean. Η λύση είναι και πάλι απλούστατη, αφού αρκεί να ορίσουμε μια σύμβαση του τύπου
“το 0 αντιστοιχεί στην κατάσταση FALSE και το 1 στην κατάσταση TRUE”.

Με τη βοήθεια της βιβλιοθήκης SQLite οι εφαρμογές επικοινωνούν με τις βάσεις δεδομένων σε τοπικό επίπεδο, χωρίς τη μεσολάβηση κάποιου άλλου προγράμματος ή κάποιας δικτυακής σύνδεσης.

Με τη βοήθεια της βιβλιοθήκης SQLite οι εφαρμογές επικοινωνούν με τις βάσεις δεδομένων σε τοπικό επίπεδο, χωρίς τη μεσολάβηση κάποιου άλλου προγράμματος ή κάποιας δικτυακής σύνδεσης.

Εργασία με την SQLite
Για τη χρήση της SQLite μπορούμε να χρησιμοποιήσουμε τον package manager της διανομής μας (αν χρησιμοποιούμε Linux) ή να μεταβούμε στην περιοχή Downloads του επίσημου site και να κατεβάσουμε το επιθυμητό πακέτο για το λειτουργικό μας. Η SQLite διατίθεται ως βιβλιοθήκη για όλα τα δημοφιλή συστήματα (desktop και mobile), ενώ προσφέρεται και στη μορφή του πηγαίου κώδικα (είναι γραμμένη σε C), για την εύκολη ενσωμάτωση σε δικά μας έργα. Επιπρόσθετα προσφέρεται κι ένα εργαλείο για τη γραμμή εντολών, το οποίο μοιάζει με το “τερματικό” της MySQL. Εμείς κατεβάσαμε το σχετικό ZIP, το αποσυμπιέσαμε κι αφού ανοίξαμε μια κονσόλα εκτελέσαμε το sqlite3 ως εξής:

sqlite3 mybase.db

SQLite version 3.13.0 2016-05-18 10:57:30
Enter ".help" for usage hints.
sqlite>_

Όπως καταλαβαίνετε, το mybase.db αποτελεί το αρχείο με το οποίο θέλουμε να εργαστούμε. Εάν το αρχείο δεν υπάρχει, το πρόγραμμα της sqlite θα το δημιουργήσει αυτόματα. Σημειώστε επίσης ότι η επέκταση “.db” είναι προαιρετική και τη χρησιμοποιήσαμε αποκλειστικά για τη δική μας ευκολία. Θα μπορούσαμε να παραλείψουμε το όνομα του αρχείου, οπότε κάθε εργασία που θα εκτελούσαμε στη συνέχεια θα αποθηκευόταν σε μια προσωρινή βάση δεδομένων, στη μνήμη. Μια ειδοποιός διαφορά σε σχέση με το αντίστοιχο περιβάλλον της MySQL αφορά στη μορφή των εντολών. Στην περίπτωση της SQLite ξεκινούν όλες με μία τελεία. Έτσι, για να εμφανιστεί μια λίστα με τις διαθέσιμες εντολές αρκεί να δώσουμε

.help

Όπως θα διαπιστώσετε, η λίστα που τυπώνεται είναι μακροσκελής και η παράθεσή της εδώ δεν θα προσέφερε απολύτως τίποτα. Στη συνέχεια θα δούμε μερικές μόνο από τις βασικές εντολές, ενώ αργότερα, εξετάζοντας τη δημιουργία μιας μικρής εφαρμογής, θα δούμε περισσότερες.

Το λιτό περιβάλλον του εργαλείου sqlite3. Η εντολή .mode μπορεί να τροποποιήσει δραματικά την έξοδο από την εκτέλεση ερωτημάτων SQL.

Το λιτό περιβάλλον του εργαλείου sqlite3. Η εντολή .mode μπορεί να τροποποιήσει δραματικά την έξοδο από την εκτέλεση ερωτημάτων SQL.

Για να δούμε όλες τις βάσεις με τις οποίες εργαζόμαστε, αρκεί να εκτελέσουμε την εντολή .databases, ενώ για να δημιουργήσουμε άμεσα ένα αντίγραφο του ανοιγμένου αρχείου μπορούμε να χρησιμοποιήσουμε την εντολή .clone. Για να εκτελέσουμε ένα ερώτημα SQL, το οποίο βρίσκεται αποθηκευμένο σε κάποιο αρχείο κειμένου, προσφέρεται η εντολή .read. Αν πάλι εργαζόμαστε με μια βάση δεδομένων που βρίσκεται στη RAM, μπορούμε να τη μεταφέρουμε σε αρχείο με τη βοήθεια της εντολής .save. Ας εξετάσουμε τώρα και κάτι πιο χρήσιμο. Θα δημιουργήσουμε έναν νέο πίνακα! Ο πίνακας ονομάζεται telcat και, όπως υποψιάζεστε, θα χρησιμοποιηθεί σαν ένας απλούστατος τηλεφωνικός κατάλογος. Εκτός από το αναγνωριστικό πεδίο (πρωτεύον κλειδί) ο πίνακας θα περιλαμβάνει και τρία πεδία κειμένου, για το όνομα, το τηλέφωνο και την πόλη κατοικίας κάθε επαφής. Το ερώτημα SQL που δημιουργεί αυτόν τον πίνακα έχει την ακόλουθη μορφή:

sqlite> CREATE TABLE telcat(
   ...>   id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
   ...>   onoma TEXT,
   ...>   tel TEXT,
   ...>   city TEXT
   ...> );
sqlite>

Σημειώστε ότι η εντολή create δεν έχει τελεία. Αυτό συμβαίνει διότι ο κανόνας που αναφέραμε με τις τελείες αφορά μόνο στις εντολές της SQLite και σε εκείνες της SQL. Ερωτήματα όπως το παραπάνω, που έχουν σχετικά μακροσκελή έκφραση και τα οποία θα θέλαμε να χρησιμοποιήσουμε πολλές φορές με ελάχιστες αλλαγές, μπορούμε να τα τοποθετούμε σε αρχεία κειμένου και να τα φορτώνουμε με την εντολή .read. Αν είχαμε δημιουργήσει ένα τέτοιο αρχείο με το όνομα create_table.txt, θα μπορούσαμε να εκτελέσουμε το ερώτημα που περιλαμβάνει ως εξής:

sqlite> .read create_table.txt

Για να βεβαιωθούμε τώρα ότι ο πίνακας δημιουργήθηκε μπορούμε να χρησιμοποιήσουμε την εντολή.tables, η οποία εμφανίζει όλους τους πίνακες της τρέχουσας βάσης δεδομένων. Στην παρούσα φάση θα πρέπει να δούμε μόνο έναν και με το όνομα telcat.

Ας εισάγουμε τώρα και μερικά δεδομένα, αξιοποιώντας πάλι την εντολή .read κι ένα αρχείο κειμένου. Αυτή τη φορά δημιουργούμε το αρχείο data.txt και εισάγουμε τα ακόλουθα:

INSERT INTO telcat (onoma, tel, city) VALUES 
  ('PROKOMMENOS', '0933123456','SALONIKA'), 
  ('TAKIS', '0963678848', 'AVOROS'), 
  ('KOSTAKIS', '231956783', 'PERA RAHOULA') 
;

Στη συνέχεια, από τη γραμμή εντολών της SQLite δίνουμε το εξής:

sqlite> .read data.txt

Αν πάνε όλα καλά, το πρόγραμμα δεν θα εμφανίσει κανένα μήνυμα λάθους ούτε και κάτι άλλο. Η γραμμή εντολών της SQLite είναι αρκετά σιωπηρή και προτιμά να μη μας κουράζει με περιττά μηνύματα, εκτός κι αν συμβαίνει κάτι πολύ σημαντικό! Για να τσεκάρουμε τα δεδομένα που έχουμε εισαγάγει προηγουμένως στον πίνακα, αρκεί να εκτελέσουμε ένα νέο ερώτημα SQL:

sqlite> SELECT * FROM telcat ;
1|PROKOMMENOS |03123456|SALONIKA
2|TAKIS|69345678|AVOROS
3|KOSTAKIS|21567893|PERA RAHOULA

Όπως βλέπετε, κάθε εγγραφή εμφανίζεται σε ξεχωριστή γραμμή, αλλά οι στήλες δεν είναι στοιχημένες. Το αποτέλεσμα που προκύπτει από την εκτέλεση του ερωτήματος μοιάζει χαοτικό, σε αντίθεση με το τακτοποιημένο output που μας έχει συνηθίσει η γραμμή εντολών της MySQL. Φυσικά αυτό δεν αποτελεί ουσιαστικό μειονέκτημα για μια εφαρμογή που χρησιμοποιεί τη βάση, αλλά ανήκει σ’ εκείνες τις ελλείψεις που καθιστούν την SQLite τόσο απλή και μικρή. Πάντως, για όσους συνηθίζουν να εργάζονται από τη γραμμή εντολών, ο τρόπος παρουσίασης των πινάκων μπορεί να βελτιωθεί αρκετά. Αρκεί να τροποποιήσουμε ορισμένες παραμέτρους. Δείτε τις ακόλουθες γραμμές:

sqlite> .header on
sqlite> .mode column
sqlite> .timer on
sqlite>
sqlite> SELECT * FROM telcat ;
id          onoma       tel         city
----------  ----------  ----------  ----------
1           PROKOMMENOS 03123456    SALONIKA
2           TAKIS       69345678    AVOROS
3           KOSTAKIS    21567893    PERA RAHOULA
Run Time: real 0.016 user 0.000000 sys 0.000000

H εντολή .mode καθορίζει τον τρόπο προβολής κι εκτός από την παράμετρο column, μπορεί να δεχτεί τις εξής: ascii, csv, html, insert, line, list, tabs και tcl. Ιδιαίτερα ενδιαφέρουσες είναι οι csv, html και insert. Η πρώτη εμφανίζει τα δεδομένα σε μορφή κειμένου και κάθε πεδίο διακρίνεται από τα άλλα με ένα κόμμα. Η δεύτερη τοποθετεί τα δεδομένα σε πίνακες HTML, ενώ η τρίτη δημιουργεί ερωτήματα SQL που αν τα εκτελούσαμε θα είχαν σαν αποτέλεσμα την εισαγωγή των αντίστοιχων δεδομένων.

Εργαλεία διαχείρισης
Από τη γραμμή εντολών της SQLite μπορούμε να κάνουμε τα πάντα. Για πολλούς χρήστες ωστόσο αυτός ο τρόπος εργασίας είναι κατάλληλος μόνο για μερικούς γρήγορους ελέγχους και για άλλες απλές δουλειές. Αυτό δεν αποτελεί πρόβλημα. Υπάρχουν πάμπολλα εργαλεία για τη διαχείριση βάσεων της SQLite, που διαθέτουν είτε παραθυρικό περιβάλλον είτε web interface. Εμείς, επειδή το phpMyAdmin μάς έχει καλομάθει, αποφασίσαμε να δούμε το αντίστοιχο εργαλείο για την SQLite, το οποίο ονομάζεται phpLiteAdmin.

Αν κατεβάσετε το πακέτο με την πιο πρόσφατη έκδοση του προγράμματος, θα βρείτε εντός του τρία αρχεία. Το ένα περιέχει μερικές γενικές πληροφορίες (readme.md), ενώ το phpliteadmin.php αποτελεί την ίδια την εφαρμογή. Το αρχείο phpliteadmin.config.sample.php αποτελεί ένα προαιρετικό αρχείο ρυθμίσεων. Λέμε ότι είναι προαιρετικό διότι οι διαθέσιμες ρυθμίσεις μπορούν να γίνουν και απευθείας, μέσα στο phpliteadmin.php. Επιλέξαμε να χρησιμοποιήσουμε το
αρχείο ρυθμίσεων, όπως θα έκανε και κάθε σώφρων άνθρωπος κατά την ταπεινή μας γνώμη :D Μέσα στο αρχείο βρήκαμε τη μεταβλητή $password, στην οποία δώσαμε τον επιθυμητό κωδικό για την πρόσβαση στην εφαρμογή. Ο συγκεκριμένος κωδικός αφορά στο phpLiteAdmin και μόνο, αφού ούτως ή άλλως το σύστημα της SQLite δεν υποστηρίζει προστασία με κωδικό. Η μεταβλητή $directory δηλώνει τον κατάλογο εργασίας και είναι ορισμένη με τέτοιον τρόπο, ώστε να παραπέμπει στη θέση του ίδιου του phpLiteAdmin. Περιττό να πούμε ότι αυτό δεν μας άρεσε καθόλου. Για να μπορούμε να χρησιμοποιήσουμε το phpLiteAdmin, το αρχείο phpliteadmin.php πρέπει να βρίσκεται μέσα στο Document Root του web server που χρησιμοποιούμε. Αντιθέτως, τα αρχεία με τις βάσεις δεδομένων είναι φρόνιμο να βρίσκονται σε κάποια θέση έξω από το Document Root. Έτσι, τροποποιήσαμε κατάλληλα την τιμή της μεταβλητής $directory, ώστε ο κατάλογος εργασίας του προγράμματος να βρίσκεται σε κάποια ασφαλή τοποθεσία.

Η επόμενη μεταβλητή που συναντάμε στο αρχείο ρυθμίσεων είναι η $subdirectories, που αν οριστεί σε true επιβάλει την αυτόματη σάρωση των υποκαταλόγων για τον εντοπισμό κι άλλων βάσεων. Οι μεταβλητές που ακολουθούν αφορούν κατά κύριο λόγο στην όψη του προγράμματος και δεν χρειάζεται να πούμε περισσότερα. Τέλος, να σημειώσουμε ότι για να ληφθούν υπόψη οι ρυθμίσεις μας πρέπει να μετονομάσουμε το αρχείο ρυθμίσεων αφαιρώντας από το όνομά του το “.sample” (phpliteadmin.config.php). Για τον τρόπο χρήσης του phpLiteAdmin δεν χρειάζεται να πούμε τίποτα, αφού είναι παρόμοιος με εκείνον του δημοφιλούς phpMyAdmin. Στο επόμενο μέρος του μίνι αφιερώματός μας θα αξιοποιήσουμε την SQLite προγραμματιστικά, μέσα σε μια δική μας εφαρμογή. Έτσι θα αποκτήσουμε μια σφαιρική εικόνα για όσα προσφέρει το εν λόγω RDBMS και θα εμπλουτίσουμε το προγραμματιστικό μας οπλοστάσιο με ένα ακόμα ισχυρό εργαλείο.

Το phpLiteAdmin απλοποιεί σε μεγάλο βαθμό τη διαχείριση μιας βάσης δεδομένων SQLite. Ειδικά αν έχετε συνηθίσει να εργάζεστε με το phpMyAdmin, το περιβάλλον του phpLiteAdmin θα σας φανεί εξαιρετικά απλό και οικείο.

Το phpLiteAdmin απλοποιεί σε μεγάλο βαθμό τη διαχείριση μιας βάσης δεδομένων SQLite. Ειδικά αν έχετε συνηθίσει να εργάζεστε με το phpMyAdmin, το περιβάλλον του phpLiteAdmin θα σας φανεί εξαιρετικά απλό και οικείο.

Οι αλλαγές που μπορούμε να κάνουμε σ' έναν ήδη σχηματισμένο πίνακα, σε μια βάση της SQLite, είναι περιορισμένες. Μέσα από το περιβάλλον του phpLiteAdmin, αυτές οι εργασίες απλοποιούνται ακόμα περισσότερο.

Οι αλλαγές που μπορούμε να κάνουμε σ’ έναν ήδη σχηματισμένο πίνακα, σε μια βάση της SQLite, είναι περιορισμένες. Μέσα από το περιβάλλον του phpLiteAdmin, αυτές οι εργασίες απλοποιούνται ακόμα περισσότερο.

Το phpLiteAdmin συνοδεύεται από διάφορα θέματα που τροποποιούν την εμφάνισή του. Ένα από αυτά είναι φανερά εμπνευσμένο από την όψη του phpMyAdmin.

Το phpLiteAdmin συνοδεύεται από διάφορα θέματα που τροποποιούν την εμφάνισή του. Ένα από αυτά είναι φανερά εμπνευσμένο από την όψη του phpMyAdmin.

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων