Să creăm o aplicație simplă de bază de date care afișează informații din tabelul „Turisti” și o înregistrare a tabelului „Informații turistice” dintr-o bază de date Microsoft Access asociată cu înregistrarea curentă a tabelului Turisti.
Pentru a face acest lucru, să creăm o aplicație Windows goală. Aspectul mediului
dezvoltarea este prezentată în Figura 39.
Orez. 39. Aplicație goală
În Figura 39, este evidențiat grupul de componente „Date”, care conține componente pentru accesarea și manipularea datelor.
Legarea datelor bazei de date la formular este realizată de componenta „Binding Source”. Să-l transferăm în formular. După plasarea acestuia pe formular, mediul de dezvoltare ia următoarea formă (Fig. 40).
Orez. 40. Sursa de legare a componentelor din formular
Componenta nu este vizuală, deci este afișată într-un panou suplimentar. Proprietatea principală a componentei este proprietatea DataSource, care indică sursa de date. În mod implicit, proprietatea este goală, deci trebuie să-i formați valoarea. Când această proprietate este selectată, următoarea fereastră apare în fereastra de proprietăți (Fig. 41).
Orez. 41. Lista surselor de date
Lista este în prezent goală, deci trebuie să creați o nouă sursă de date alegând comanda Adăugare sursă de date a proiectului pentru a crea o nouă sursă de date și a vă conecta la aceasta. Apare următoarea casetă de dialog (fig. 42).
Orez. 42. Lista surselor de date
Acest dialog oferă următoarea selecție a surselor de date:
Baza de date - Baza de date;
Serviciu - Un serviciu este un fel de serviciu care oferă date. Cel mai adesea acesta este un serviciu Web;
Obiect - Un obiect pentru selectarea unui obiect care va genera date și obiecte cu care să lucreze.
În cazul nostru, trebuie să selectați elementul „Baza de date”. Apare o fereastră pentru selectarea unei conexiuni de date (Fig. 43).
Orez. 43. Alegerea unei conexiuni de date
Scopul acestui dialog este de a crea un șir de conexiune care va descrie parametrii de conexiune pentru motorul ADO, cum ar fi tipul bazei de date, locația sa, numele de utilizator, caracteristicile de securitate etc.
Lista derulantă a dialogului conține toate conexiunile create anterior. Dacă conexiunea necesară nu este în listă, atunci ar trebui să utilizați butonul „Conexiune nouă”. Apăsarea butonului duce la apariția următorului dialog (Fig. 44).
În acest dialog, selectați tipul sursei de date (în acest caz Microsoft Access), numele bazei de date (în acest caz, numele și locația fișierului bazei de date), numele de utilizator și parola utilizate pentru conectarea la baza de date. Butonul „Avansat” vă permite să setați un număr mare de parametri legați de diferite părți ale mecanismului ADO. Utilizarea butonului „Testare conexiune” vă va asigura că parametrii introduși sunt corecți și că conexiunea funcționează.
Orez. 44. Crearea unei noi conexiuni
Ultimul pas al dialogului este să selectați acele tabele sau alte obiecte de bază de date care sunt necesare în această sursă de date. Fereastra de selecție este prezentată în Figura 45.
Orez. 45. Selectarea tabelelor necesare
În această fereastră sunt selectate tabelele „Turiști” și „Informații turistice”. Deoarece în baza de date nu au fost create alte obiecte decât tabele, numai tabelele sunt afișate în Figura 45. Aceasta finalizează crearea sursei de date. Când faceți clic pe Finalizare, un set de date apare lângă BindingSource pe formular.
Acum datele conectate mai sus trebuie să fie afișate pe formular. Cea mai simplă modalitate de afișare a datelor este utilizarea componentei DataGridView din grupul de componente Date. Componenta este vizuală și arată astfel în formular (Fig. 46).
Orez. 46. Component DataGridView
Apare imediat fereastra de setări a componentelor, care determină capacitățile sale de editare a datelor: „Enable Adding”, „Enable Editing”, „Enable Deleting”; capacitatea de a schimba succesiunea coloanelor: „Activați reordonarea coloanelor”; și, de asemenea, capacitatea de a andoca în containerul părinte.
Pentru ca componenta să afișeze date, trebuie să selectați o sursă de date în lista derulantă. Alegerea listei derulante duce la apariția următorului dialog (Fig. 47).
Orez. 47. Selectarea unei surse de date pentru DataGridView
În acest caz, am selectat tabelul „Turiști” ca sursă de date. Această selecție modifică afișajul după cum urmează (Fig. 48).
Orez. 48. Component DataGridView afișează structura tabelului
În figură, puteți vedea că există o altă componentă BindingSource și o componentă TableAdapter care funcționează cu tabelul Turisti. Vă rugăm să rețineți că în timpul proiectării sau în timpul dezvoltării, datele din tabel nu sunt afișate.
Acum trebuie să afișați datele din tabelul de informații turistice conectat. Pentru aceasta, plasați o altă componentă DataGridView pe formular și selectați următoarele ca sursă de date (Fig. 49).
Orez. 49. Selectarea unei surse de date pentru al doilea DataGridView
Aici, sursa de date nu este tabelul „Informații turistice” în sine, ci sursa obligatorie dintre tabelele „Turisti” și „Informații turistice”. Această selecție asigură că numai acele rânduri sunt selectate din tabelul Informații turistice care sunt asociate cu rândul curent din tabelul Turisti. De asemenea, se asigură că datele asociate sunt actualizate și șterse corect. Funcționarea aplicației rezultate este prezentată în Figura 50.
Orez. 50. Aplicația bazei de date la locul de muncă
Navigarea prin date folosind tastele săgeată este incomodă. Există o componentă BindingNavigator pentru a simplifica navigarea prin date. Așezați-l pe formular (fig. 51).
Orez. 51. Componenta BindingNavigator din formular
Această componentă vă permite să navigați între înregistrările tabelului, să adăugați și să ștergeți rânduri de tabel. Funcționalitatea și aspectul componentei sunt personalizabile, deoarece este o bară de meniu ToolStripContainer.
Proprietatea care definește tabelul care urmează să fie navigat este proprietatea BindingSource. Setați valoarea acestei proprietăți la TouristBindingSource. În funcțiune, componenta arată astfel (Fig. 52).
Orez. 52. Componenta BindingNavigator la locul de muncă
Editarea datelor în celulele componentei DataGridView cu setări adecvate este posibilă, dar incomodă și nu rațională. În special, este dificil să verificați valorile introduse pentru erori. Prin urmare, pentru tabelul „Turiști”, vom crea un formular de ecran care permite afișarea datelor în componentele TextBox și editarea acestora. Pentru a face acest lucru, plasați un container de tip Panou pe formular și pe acesta trei componente TextBox după cum urmează (Fig. 53).
Orez. 53. Panou ecran pentru editarea înregistrărilor tabelului „Turiști”
Acum este necesar să legați componentele TextBox la câmpurile corespunzătoare din tabelul „Turisti”. Pentru a face acest lucru, utilizați proprietatea din grupul DataBindings - Advanced, prezentată în Figura 54.
Orez. 54. Proprietatea "DataBindings - Advanced"
Selectarea acestei proprietăți duce la apariția dialogului prezentat în Figura 55. Acest dialog vă permite să efectuați nu numai legarea datelor, ci și să setați un eveniment în cadrul căruia datele vor fi actualizate, precum și formatarea datelor atunci când sunt afișate. .
Pentru componenta de top TextBox din lista derulantă Binding, selectați sursa de date „turiștiBmdmgSursă” și câmpul sursă - „Numele de familie”. Pentru componentele TextBox din mijloc și din partea de jos, selectați aceeași sursă de date și respectiv câmpurile „Nume” și „Patronim”.
Aplicația dezvoltată în funcțiune arată după cum urmează (Fig. 56).
Orez. 55. Casetă de dialog pentru proprietatea „DataBindings - Advanced”
Orez. 56. Legarea datelor la componentele vizuale
Cu toate acestea, când se fac modificări, toate datele noi rămân doar în formular. Nu sunt stocate în baza de date și, bineînțeles, nu vor fi prezente atunci când aplicația este apelată din nou. Acest lucru se datorează faptului că datele au fost încărcate într-un DataSet, care este o copie a tabelului în memorie. Toate acțiunile sunt efectuate cu această copie. Pentru ca modificările să fie reflectate în baza de date, trebuie să executați metoda de actualizare a clasei TableAdapter. Astfel, în aplicația dezvoltată este necesar să plasați butonul Actualizare și să scrieți următorul cod de program în gestionarul de evenimente Click:
turiștiTabelAdapteGUpdate (bDTur_firmDataSet); info_about_touristsTableAdapter.Update (bDTur_firmDataSet);
Acest cod actualizează informațiile din tabelele „Turiști” și „Informații turistice” furnizate de sursa de date. Rețineți că această metodă este supraîncărcată, iar variantele sale vă permit să actualizați atât un singur rând al unui tabel, cât și un grup de rânduri.
DbVisualizer 9.1.5
DbVisualizer este un instrument de baze de date pentru dezvoltatori și administratori de baze de date, care vă ajută atât la dezvoltarea, cât și la întreținerea bazelor de date.
Firebird 2.5.2
Firebird este o bază de date relațională care oferă multe caracteristici standard ANSI SQL care rulează pe Linux, Windows și o varietate de platforme Unix. Firebird oferă concurență excelentă, performanță ridicată și suport puternic de limbaj pentru proceduri și declanșatoare stocate.
Reitec.PMM 1.2.1.0
Reitec.PMM este un instrument gratuit pentru gestionarea echipamentelor de testare ca parte a asigurării calității.
WowBase 1.1
Creați-vă propria bază de date rapid și ușor.
MyContacts 3.1
Gestionarea contactelor, zilelor de naștere și a datelor / sarcinilor.
LibreOffice Rus pentru Windows 3.6.4
Suita de birou LibreOffice este cea mai bună alternativă gratuită pentru Microsoft Office 2003, 2007 și chiar 2010.
PhpMyAdmin 3.5.3
phpMyAdmin Rus este un program pentru gestionarea unei baze de date MySQL, care poate fi descărcată și utilizată gratuit - atât acasă, cât și în organizație. Versiunea rusă.
Oracle MySQL pentru Linux, UNIX, * BSD și altele * nix 5.5.28 Final / 6.0.6 Beta
Oracle MySQL - Un server de baze de date bine cunoscut. Faimos pentru stabilitatea și viteza impecabilă.
Oracle MySQL pentru Windows 5.5.28 Final / 6.0.6 Beta
MySQL este una dintre cele mai populare baze de date open source pe care le puteți descărca și utiliza gratuit.
- Tutorial
- Mod de recuperare
Bună ziua tuturor! Numele meu este Oleg și sunt programator amator pentru Android. Un amator pentru că în acest moment câștig bani programând într-o direcție complet diferită. Și acesta este un hobby căruia îi dedic timpul liber. Din păcate, nu am programatori Android familiari și îmi extrag toate cunoștințele de bază fie din cărți, fie de pe Internet. În toate acele cărți și articole de pe Internet pe care le-am citit, foarte puțin spațiu este alocat pentru crearea unei baze de date pentru aplicație și, de fapt, întreaga descriere se reduce la crearea unei clase care este moștenitor SQLiteOpenHelperși injectarea ulterioară a codului SQL în codul Java. În afară de faptul că obținem un cod slab lizibil (și dacă apar mai mult de 10 tabele în aplicația noastră, atunci amintirea tuturor acestor relații între tabele este încă iad), atunci, în principiu, poți trăi, desigur, dar cumva tu absolut nu vreau.
Am uitat să spun cel mai important lucru, putem spune că acesta este testul meu de stilou aici. Și așa am mers.
Cu privire la veșnica întrebare: de ce?
De ce, în cărțile și articolele dedicate programării pentru Android, nu sunt descrise instrumentele pentru proiectarea arhitecturii bazelor de date și niciun model pentru lucrul cu bazele de date în etapa de creare a acestora, sincer nu știu. S-ar părea să adauge doar câteva pagini la o carte sau să scrie un articol separat (așa cum fac acum) la fel de ușor ca decojirea perelor - dar nu. În acest articol, voi parcurge pe scurt instrumentele pe care le folosesc în munca mea și mai detaliat asupra codului care este responsabil pentru crearea inițială a bazei de date, care, din punctul meu de vedere, arată mai ușor de citit și mai convenabil.
Dacă aplicația noastră are mai mult de 5 tabele, atunci ar fi bine să folosim un instrument pentru proiectarea vizuală a arhitecturii bazei de date. Deoarece acesta este un hobby pentru mine, folosesc un instrument absolut gratuit numit Oracle SQL Developer Data Modeler (îl puteți descărca).
Acest program vă permite să desenați vizual tabele și să construiți relații cu acestea. Multe greșeli de proiectare în arhitectura bazelor de date pot fi evitate cu această abordare de proiectare (vă spun deja asta ca programator de baze de date profesionale). Arată cam așa:
După ce am proiectat arhitectura în sine, trecem la partea mai plictisitoare, care constă în crearea codului sql pentru crearea tabelelor. Pentru a ajuta în această chestiune, folosesc deja un instrument numit SQLiteStudio (care la rândul său poate fi descărcat de aici).
Acest instrument este similar cu produse cunoscute precum SQL Naviagator, Toad etc. Dar, după cum sugerează și numele, este adaptat pentru a lucra cu SQLite. Vă permite să creați vizual o bază de date și să obțineți codul DDL al tabelelor care sunt create. Apropo, vă permite, de asemenea, să creați Vizualizări, pe care le puteți utiliza și în aplicația dvs., dacă doriți. Nu știu cât de corectă este abordarea utilizării vizualizărilor în programele Android, dar într-una dintre aplicațiile mele le-am folosit.
De fapt, nu mai folosesc instrumente terțe și apoi magia începe cu Android Studio. Așa cum am scris mai sus, dacă începeți să injectați cod SQL în codul Java, atunci ieșirea va fi slab lizibilă și, prin urmare, codul extensibil slab. Prin urmare, transfer toate instrucțiunile SQL în fișiere externe care se află în director active... În Android Studio, arată cam așa:
Despre directoarele de date și date
În interiorul directorului active Am creat două directoare db_01și date_01... Numerele din numele directoarelor corespund cu numărul versiunii bazei mele de date cu care lucrez. În director db Stoc scripturile SQL pentru crearea tabelelor. Și în director date datele necesare pentru umplerea inițială a tabelelor sunt stocate.
Acum să aruncăm o privire la codul din interiorul meu DBHelper pe care le folosesc în proiectele mele. Mai întâi variabilele de clasă și constructorul (fără surprize aici):
Șir final static privat TAG = "RoadMap4.DBHelper"; Șir mDb = "db_"; Șir mData = "date_"; Context mContext; int mVersion; public DBHelper (context context, nume șir, versiune int) (super (context, nume, nul, versiune); mContext = context; mVersion = versiune;)
Acum metoda onCreateși aici devine mai interesant:
@Override public void onCreate (SQLiteDatabase db) (ArrayList
În mod logic, este împărțit în două bucle, în prima buclă obțin o listă de instrucțiuni SQL pentru crearea unei baze de date și apoi le execut, în a doua buclă deja completez tabelele create anterior cu date inițiale. Și așa, primul pas:
Private ArrayList
Totul este destul de simplu aici, doar citim conținutul fișierelor și concatenăm conținutul fiecărui fișier într-un element matrice. Vă rugăm să rețineți că sortez lista de fișiere, deoarece tabelele pot avea chei străine, ceea ce înseamnă că tabelele trebuie create într-o anumită ordine. Folosesc numerotarea în numele fișierelor și cu ajutorul acesteia fac sortarea.
Clasa privată QueryFilesComparator implementează Comparator
Odată cu completarea tabelelor, totul este mai distractiv. Tabelele mele sunt umplute nu numai cu valori codificate, ci și cu valori din resurse și chei UUID (sper ca într-o zi să ajung la versiunea de rețea a programului meu, astfel încât utilizatorii mei să poată lucra cu date partajate). Structura fișierelor de date inițiale arată astfel:
În ciuda faptului că fișierele mele au extensia sql, nu există cod sql în interior, dar acest lucru:
Priorități
pri_id: UUID: UUID
pri_name: șir: normal
pri_color: color: colorGreen
pri_default: int: 1
priorități
pri_id: UUID: UUID
pri_object: șir: obiect_task
pri_name: string: hold
pri_color: color: colorBlue
pri_default: int: 0
priorități
pri_id: UUID: UUID
pri_object: șir: obiect_task
pri_name: șir: important
pri_color: color: colorRed
pri_default: int: 0
priorități
pri_id: UUID: UUID
pri_name: șir: normal
pri_color: color: colorGreen
pri_default: int: 1
priorități
pri_id: UUID: UUID
pri_object: șir: obiect_proiect
pri_name: string: hold
pri_color: color: colorBlue
pri_default: int: 0
priorități
pri_id: UUID: UUID
pri_object: șir: obiect_proiect
pri_name: șir: important
pri_color: color: colorRed
pri_default: int: 0
Structura fișierului este astfel: fac un apel funcțional Despică (":")în legătură cu o linie și dacă obțin că dimensiunea sa este 1, atunci acesta este numele tabelului în care ar trebui să fie scrise datele. În caz contrar, sunt datele în sine. Primul câmp este numele câmpului din tabel. Al doilea câmp este tipul prin care stabilesc ce trebuie să scriu chiar în acest câmp. Dacă este un UUID, înseamnă că trebuie să generez o valoare UUID unică. Dacă șir înseamnă că trebuie să extrag valoarea șirului din resurse. Dacă culoare, atunci din nou, trebuie să extrageți codul de culoare din resurse. Dacă int sau text, atunci convertesc valoarea dată în int sau șir fără niciun gest. Codul în sine arată astfel:
Private ArrayList