Namai Vidinės gėlės Atsisiųskite „Aida 64“, skirtą „Windows 7.“. „Aida64 Extreme Edition“ rusiška versija. AIDA64 mobilioji programa

Atsisiųskite „Aida 64“, skirtą „Windows 7.“. „Aida64 Extreme Edition“ rusiška versija. AIDA64 mobilioji programa

Sukurkime paprastą duomenų bazės programą, kurioje būtų rodoma informacija iš lentelės „Turistai“ ir lentelės „Turistinė informacija“ įrašas iš „Microsoft Access“ duomenų bazės, susietas su dabartiniu turistų lentelės įrašu.

Norėdami tai padaryti, sukurkime tuščią „Windows“ programą. Aplinkos išvaizda

raida parodyta 39 paveiksle.

Ryžiai. 39. Tuščia paraiška

39 paveiksle paryškinta komponentų grupė „Duomenys“, kurioje yra duomenų prieigos ir manipuliavimo komponentai.

Duomenų bazės duomenų susiejimą su forma atlieka komponentas „Įrišimo šaltinis“. Perkelkime jį į formą. Įdėjus ją į formą, kūrimo aplinka įgauna tokią formą (40 pav.).

Ryžiai. 40. Komponentų įrišimo šaltinis formoje

Komponentas nėra vizualus, todėl jis rodomas papildomame skydelyje. Pagrindinė komponento savybė yra „DataSource“ ypatybė, nurodanti duomenų šaltinį. Pagal numatytuosius nustatymus nuosavybė tuščia, todėl turite suformuoti jos vertę. Pasirinkus šią savybę, ypatybių lange atsiranda toks langas (41 pav.).

Ryžiai. 41. Duomenų šaltinių sąrašas

Sąrašas šiuo metu tuščias, todėl turite sukurti naują duomenų šaltinį pasirinkę komandą Pridėti projekto duomenų šaltinį, kad sukurtumėte naują duomenų šaltinį ir prisijungtumėte prie jo. Pasirodo toks dialogo langas (42 pav.).

Ryžiai. 42. Duomenų šaltinių sąrašas

Šiame dialogo lange pateikiamas toks duomenų šaltinių pasirinkimas:

Duomenų bazė - duomenų bazė;

Paslauga - paslauga yra tam tikra paslauga, teikianti duomenis. Dažniausiai tai yra žiniatinklio paslauga;

Objektas - objektas, skirtas objektui pasirinkti, kuris sugeneruos duomenis ir objektus dirbti su jais.

Mūsų atveju turite pasirinkti elementą „Duomenų bazė“. Rodomas duomenų ryšio pasirinkimo langas (43 pav.).

Ryžiai. 43. Duomenų ryšio pasirinkimas

Šio dialogo tikslas yra sukurti ryšio eilutę, apibūdinančią ADO variklio ryšio parametrus, tokius kaip duomenų bazės tipas, jos vieta, naudotojų vardai, saugos ypatybės ir kt.

Išskleidžiamajame dialogo lango sąraše yra visi anksčiau sukurti ryšiai. Jei reikiamo ryšio nėra sąraše, turėtumėte naudoti mygtuką „Naujas ryšys“. Paspaudus mygtuką atsiranda toks dialogo langas (44 pav.).

Šiame dialogo lange pasirenkate duomenų šaltinio tipą (šiuo atveju „Microsoft Access“), duomenų bazės pavadinimą (šiuo atveju duomenų bazės failo pavadinimą ir vietą), prisijungimo prie duomenų bazės vartotojo vardą ir slaptažodį. Mygtukas „Išplėstinė“ leidžia nustatyti daugybę parametrų, susijusių su įvairiomis ADO mechanizmo detalėmis. Naudodami mygtuką „Bandyti ryšį“ įsitikinsite, kad įvesti parametrai yra teisingi ir ar ryšys veikia.

Ryžiai. 44. Naujo ryšio sukūrimas

Paskutinis dialogo žingsnis yra pasirinkti tas lenteles ar kitus duomenų bazės objektus, kurių reikia šiame duomenų šaltinyje. Pasirinkimo langas parodytas 45 paveiksle.

Ryžiai. 45. Reikiamų lentelių pasirinkimas

Šiame lange pasirenkamos lentelės „Turistai“ ir „Turistinė informacija“. Kadangi duomenų bazėje nebuvo sukurta jokių kitų objektų, išskyrus lenteles, 45 lentelėje rodomos tik lentelės. Tai užbaigia duomenų šaltinio kūrimą. Spustelėjus „Baigti“, formoje šalia „BindingSource“ rodomas duomenų rinkinys.

Dabar formoje turi būti rodomi aukščiau susieti duomenys. Paprasčiausias būdas rodyti duomenis yra naudoti „DataGridView“ komponentą iš duomenų komponentų grupės. Komponentas yra vizualus ir taip atrodo formoje (46 pav.).

Ryžiai. 46. ​​Komponentas „DataGridView“

Iškart pasirodo komponentų nustatymų langas, kuris nustato jo duomenų redagavimo galimybes: „Įgalinti pridėjimą“, „Įgalinti redagavimą“, „Įgalinti ištrynimą“; galimybė keisti stulpelių seką: „Įgalinti stulpelių pertvarkymą“; taip pat galimybė prijungti prie pirminio konteinerio.

Kad komponentas galėtų rodyti duomenis, išskleidžiamajame sąraše turite pasirinkti duomenų šaltinį. Pasirinkus išskleidžiamąjį sąrašą atsiranda toks dialogo langas (47 pav.).

Ryžiai. 47. DataGridView duomenų šaltinio pasirinkimas

Šiuo atveju kaip duomenų šaltinį pasirinkome lentelę „Turistai“. Šis pasirinkimas pakeičia ekraną taip (48 pav.).

Ryžiai. 48. Komponentas DataGridView rodo lentelės struktūrą

Paveikslėlyje matote, kad yra dar vienas „BindingSource“ komponentas ir „TableAdapter“ komponentas, kuris veikia su „Turistų“ lentele. Atminkite, kad projektavimo ar kūrimo metu lentelės duomenys nerodomi.

Dabar turite pateikti duomenis iš susietos turizmo informacijos lentelės. Norėdami tai padaryti, į formą įdėkite kitą „DataGridView“ komponentą ir pasirinkite kaip duomenų šaltinį (49 pav.).

Ryžiai. 49. Duomenų šaltinio pasirinkimas antrajam „DataGridView“

Čia duomenų šaltinis yra ne pati „Turizmo informacijos“ lentelė, bet privalomasis šaltinis tarp „Turistų“ ir „Turizmo informacijos“ lentelių. Šis pasirinkimas užtikrina, kad iš turizmo informacijos lentelės būtų pasirinktos tik tos eilutės, kurios yra susietos su dabartine turistų lentelės eilute. Tai taip pat užtikrina, kad susiję duomenys būtų tinkamai atnaujinti ir ištrinti. Gautos programos veikimas parodytas 50 paveiksle.

Ryžiai. 50. Duomenų bazės taikymas darbe

Naršyti duomenis naudojant rodyklių klavišus yra nepatogu. Yra „BindingNavigator“ komponentas, palengvinantis naršymą po duomenis. Padėkite jį ant formos (51 pav.).

Ryžiai. 51. BindingNavigator komponentas formoje

Šis komponentas leidžia naršyti tarp lentelės įrašų, pridėti ir ištrinti lentelių eilutes. Komponento funkcionalumą ir išvaizdą galima pritaikyti, nes tai yra „ToolStripContainer“ meniu juosta.

Nuosavybė, kuri apibrėžia lentelę, kurią reikia naršyti, yra ypatybė „BindingSource“. Nustatykite šios nuosavybės vertę kaip „TouristBindingSource“. Veikdamas komponentas atrodo taip (52 pav.).

Ryžiai. 52. „BindingNavigator“ komponentas darbe

Redaguoti duomenis „DataGridView“ komponento ląstelėse su tinkamais nustatymais galima, bet nepatogu ir nėra racionalu. Visų pirma sunku patikrinti įvestas vertes, ar nėra klaidų. Todėl lentelėje „Turistai“ sukursime ekrano formą, leidžiančią rodyti duomenis „TextBox“ komponentuose ir juos redaguoti. Norėdami tai padaryti, ant formos uždėkite „Panel“ tipo konteinerį, o ant jo - tris „TextBox“ komponentus (53 pav.).

Ryžiai. 53. Lentelės „Turistai“ įrašų redagavimo ekrano skydelis

Dabar būtina susieti „TextBox“ komponentus su atitinkamais „Turistų“ lentelės laukais. Norėdami tai padaryti, naudokite ypatybę iš „DataBindings“ grupės - Išplėstinė, parodyta 54 paveiksle.

Ryžiai. 54. Nuosavybė „DataBindings - Advanced“

Pasirinkus šią ypatybę atsiranda dialogo langas, pavaizduotas 55 paveiksle. Šis dialogas leidžia atlikti ne tik duomenų surišimą, bet ir nustatyti įvykį, kurio metu duomenys bus atnaujinami, taip pat formatuoti duomenis, kai jie bus rodomi .

Išskleidžiamajame sąraše „Įrišimas“ esančiam viršutiniam „TextBox“ komponentui pasirinkite duomenų šaltinį „touristBmdmgSource“ ir šaltinio lauką - „Pavardė“. Viduryje ir apačioje esantiems „TextBox“ komponentams pasirinkite tą patį duomenų šaltinį ir atitinkamai laukus „Pavadinimas“ ir „Patroniminis“.

Veikianti sukurta programa atrodo taip (56 pav.).

Ryžiai. 55. Ypatybės "DataBindings - Advanced" dialogo langas

Ryžiai. 56. Duomenų susiejimas su vaizdiniais komponentais

Tačiau atlikus pakeitimus visi nauji duomenys lieka tik formoje. Jie nėra saugomi duomenų bazėje ir, žinoma, jų nebus, kai programa bus iškviesta dar kartą. Taip yra todėl, kad duomenys buvo įkelti į duomenų rinkinį, kuris yra atminties lentelės kopija. Visi veiksmai atliekami naudojant šią kopiją. Kad pakeitimai atsispindėtų duomenų bazėje, turite vykdyti „TableAdapter“ klasės atnaujinimo metodą. Taigi, sukurtoje programoje būtina įdėti mygtuką „Atnaujinti“ ir į įvykio apdorojimo paspaudimą įrašyti šį programos kodą:

turistaiTableAdapteгUpdate (bDTur_firmDataSet); info_about_touristsTableAdapter.Update (bDTur_firmDataSet);

Šis kodas atnaujina duomenų šaltinio pateiktose lentelėse „Turistai“ ir „Turistinė informacija“ esančią informaciją. Atminkite, kad šis metodas yra perkrautas, o jo variantai leidžia atnaujinti ir vieną lentelės eilutę, ir eilučių grupę.

„DbVisualizer“ 9.1.5

„DbVisualizer“ yra duomenų bazės įrankis kūrėjams ir duomenų bazių administratoriams, padedantis kurti ir prižiūrėti jūsų duomenų bazes.

„Firebird“ 2.5.2

„Firebird“ yra santykių duomenų bazė, siūlanti daugybę ANSI SQL standartinių funkcijų, veikiančių „Linux“, „Windows“ ir įvairiose „Unix“ platformose. „Firebird“ siūlo puikų suderinamumą, aukštą našumą ir galingą kalbos palaikymą saugomoms procedūroms ir aktyvikliams.

Reitec.PMM 1.2.1.0

„Reitec.PMM“ yra nemokamas testavimo įrangos valdymo įrankis, užtikrinantis kokybę.

„WowBase 1.1“

Greitai ir lengvai sukurkite savo duomenų bazę.

„MyContacts“ 3.1

Tvarkyti kontaktus, gimtadienius ir datas / užduotis.

„LibreOffice Rus“, skirta „Windows“ 3.6.4

„LibreOffice“ biuro rinkinys yra geriausia nemokama alternatyva „Microsoft Office 2003“, 2007 ir net 2010 m.

„PhpMyAdmin“ 3.5.3

„phpMyAdmin Rus“ yra „MySQL“ duomenų bazės valdymo programa, kurią galima nemokamai atsisiųsti ir naudoti tiek namuose, tiek organizacijoje. Rusiška versija.

„Oracle MySQL“, skirta „Linux“, UNIX, * BSD ir kiti * nix 5.5.28 Final / 6.0.6 Beta

„Oracle MySQL“ - gerai žinomas duomenų bazių serveris. Jis garsėja nepriekaištingu stabilumu ir greičiu.

„Oracle MySQL“, skirta „Windows 5.5.28 Final“ / 6.0.6 Beta

„MySQL“ yra viena populiariausių atvirojo kodo duomenų bazių, kurią galite nemokamai atsisiųsti ir naudoti.

  • „Android“ kūrimas,
  • SQLite
    • Pamoka
    • Atstatymo rėžimas

    Sveiki visi! Mano vardas Olegas ir esu mėgėjas programuotojas „Android“. Mėgėjiškas, nes šiuo metu uždirbu pinigus programuodamas visai kita linkme. Ir tai yra hobis, kuriam skiriu laisvalaikį. Deja, neturiu pažįstamų „Android“ programuotojų ir visas pagrindines žinias semiuosi iš knygų arba iš interneto. Visose tose knygose ir straipsniuose, kuriuos skaitau internete, labai mažai vietos skiriama programos duomenų bazei sukurti, o iš tikrųjų visas aprašymas susijęs su klasės, kuri yra paveldėtoja, sukūrimu „SQLiteOpenHelper“ ir vėlesnis SQL kodo įvedimas į „Java“ kodą. Be to, kad gauname blogai įskaitomą kodą (ir jei mūsų programoje yra daugiau nei 10 lentelių, tai prisiminti visus šiuos ryšius tarp lentelių vis dar yra pragaras), žinoma, iš esmės galite gyventi, bet kažkaip jūs visiškai nenoriu.
    Pamiršau pasakyti svarbiausią dalyką, galime pasakyti, kad čia yra mano rašiklio bandymas. Ir taip mes nuėjome.

    Amžinam klausimui: kodėl?

    Tiesą sakant, nežinau, kodėl knygose ir straipsniuose, skirtuose programavimui „Android“, nėra aprašyti duomenų bazės architektūros projektavimo įrankiai ir bet kokie darbo su duomenų bazėmis modeliai jų kūrimo etape. Atrodytų, kad knygai pridėti vos porą puslapių arba parašyti atskirą straipsnį (kaip aš dabar darau) taip paprasta, kaip nulupti kriaušes - bet ne. Šiame straipsnyje trumpai apžvelgsiu įrankius, kuriuos naudoju savo darbe, ir išsamiau apie kodą, kuris yra atsakingas už pradinį duomenų bazės sukūrimą, kuris, mano požiūriu, atrodo labiau skaitomas ir patogesnis.


    Jei mūsų programoje yra daugiau nei 5 lentelės, būtų malonu naudoti tam tikrą įrankį vizualiam duomenų bazės architektūros dizainui. Kadangi tai man hobis, naudoju visiškai nemokamą įrankį, pavadintą „Oracle SQL Developer Data Modeler“ (galite jį atsisiųsti).

    Ši programa leidžia vizualiai piešti lenteles ir užmegzti ryšius su jomis. Taikant šį projektavimo metodą galima išvengti daugelio projektavimo klaidų duomenų bazės architektūroje (tai jau sakau jums kaip profesionaliam duomenų bazių programuotojui). Tai atrodo taip:

    Sukūrę pačią architektūrą, pereiname prie vargingesnės dalies, kurią sudaro sql kodo kūrimas lentelėms kurti. Norėdami padėti šiuo klausimu, aš jau naudoju įrankį, pavadintą SQLiteStudio (kurį savo ruožtu galima atsisiųsti čia).

    Šis įrankis yra analogiškas tokiems gerai žinomiems produktams kaip „SQL Naviagator“, „Toad“ ir kt. Tačiau, kaip rodo pavadinimas, jis pritaikytas darbui su „SQLite“. Tai leidžia vizualiai sukurti duomenų bazę ir gauti kuriamų lentelių DDL kodą. Beje, tai taip pat leidžia kurti peržiūras, kurias taip pat galite naudoti savo programoje, jei norite. Nežinau, kaip teisingas požiūris į rodinių naudojimą „Android“ programose, bet vienoje iš savo programų aš juos naudojau.

    Tiesą sakant, aš jau nenaudoju jokių trečiųjų šalių įrankių, o tada magija prasideda nuo „Android Studio“. Kaip jau rašiau aukščiau, jei pradėsime įvesti SQL kodą į „Java“ kodą, išvestis bus blogai įskaitoma, taigi ir prastai išplečiama. Todėl aš perkeliu visus SQL teiginius į išorinius failus, esančius kataloge turto... „Android Studio“ atrodo maždaug taip:


    Apie db ir duomenų katalogus

    Katalogo viduje turto sukūriau du katalogus db_01 ir duomenys_01... Skaičiai katalogų pavadinimuose atitinka mano duomenų bazės, su kuria dirbu, versijos numerį. Kataloge db Saugoju SQL scenarijus pačioms lentelėms kurti. Ir kataloge duomenis saugomi pradiniam lentelių pildymui reikalingi duomenys.


    Dabar pažvelkime į mano viduje esantį kodą „DBHelper“ kuriuos naudoju savo projektuose. Pirmiausia klasės kintamieji ir konstruktorius (čia nenuostabu):

    Private static final String TAG = "RoadMap4.DBHelper"; Eilutė mDb = "db_"; Eilutė mData = "duomenys_"; Kontekstas „mContext“; int mVersion; viešasis „DBHelper“ (kontekstinis kontekstas, eilutės pavadinimas, int versija) (super (kontekstas, pavadinimas, nulis, versija); mContext = kontekstas; mVersion = versija;)
    Dabar metodas onCreate ir čia darosi įdomiau:

    @Override public void onCreate (SQLiteDatabase db) (ArrayList lentelės = getSQLTables (); for (String table: tables) (db.execSQL (table);) ArrayList > dataSQL = getSQLDatas (); už („HashMap“ hm: dataSQL) (for (String table: hm.keySet ()) (Log.d (TAG, "insert into" + table + "" + hm.get (table))); long rowId = db.insert (table, null, hm.get (lentelė));)))
    Logiškai mąstant, jis yra padalintas į dvi kilpas, pirmoje cikle gaunu SQL sakinių, skirtų duomenų bazei sukurti, sąrašą, o paskui juos vykdau, antroje cikle jau užpildau anksčiau sukurtas lenteles pradiniais duomenimis. Taigi, pirmas žingsnis:

    Privatus „ArrayList“ getSQLTables () („ArrayList“ lentelės = naujas „ArrayList“<>(); „ArrayList“ failai = naujas „ArrayList“<>(); AssetManager assetManager = mContext.getAssets (); Styga dir = mDb + mVersion; pabandykite (String listFiles = assetManager.list (dir); for (String file: listFiles) (files.add (file);) Collections.sort (files, new QueryFilesComparator ()); BufferedReader bufferedReader; String query; String line; for (Eilutės failas: failai) (Log.d (TAG, "failas db yra" + failas); bufferedReader = naujas BufferedReader (naujas InputStreamReader (assetManager.open (dir + "/" + failas)))); query = ""; while ((line = bufferedReader.readLine ())! = null) (query = query + line;) bufferedReader.close (); tables.add (query);)) catch (IOException e) (e.printStackTrace (); ) grąžinimo lentelės; )
    Čia viskas yra gana paprasta, mes tiesiog perskaitome failų turinį ir sujungiame kiekvieno failo turinį į masyvo elementą. Atminkite, kad renku failų sąrašą, nes lentelėse gali būti užsienio raktų, o tai reiškia, kad lentelės turi būti sukurtos tam tikra tvarka. Failų pavadinimuose naudoju numeraciją, o jos pagalba rūšiuoju.

    Privačios klasės „QueryFilesComparator“ įgyvendina „Comparator“ (@Override public int palyginti (String file1, String file2) (Integer f2 = Integer.parseInt (file1.substring (0, 2))); Integer f1 = Integer.parseInt (file2.substring (0, 2)); return f2 .compareTo (f1);))
    Užpildžius lenteles, viskas smagiau. Mano lentelės užpildytos ne tik sunkiai užkoduotomis reikšmėmis, bet ir vertėmis iš išteklių bei UUID raktais (tikiuosi, kada nors ateisiu į mano programos tinklo versiją, kad mano vartotojai galėtų dirbti su bendrinamais duomenimis). Pradinių duomenų failų struktūra atrodo taip:


    Nepaisant to, kad mano failai turi sql plėtinį, viduje nėra sql kodo, bet šis dalykas:

    Prioritetas
    pri_id: UUID: UUID

    pri_name: string: normalus
    pri_color: color: colorGreen
    pri_default: int: 1
    prioritetai
    pri_id: UUID: UUID
    pri_object: string: object_task
    pri_name: string: hold
    pri_color: color: colorBlue
    pri_default: int: 0
    prioritetai
    pri_id: UUID: UUID
    pri_object: string: object_task
    pri_name: string: svarbu
    pri_color: color: colorRed
    pri_default: int: 0
    prioritetai
    pri_id: UUID: UUID

    pri_name: string: normalus
    pri_color: color: colorGreen
    pri_default: int: 1
    prioritetai
    pri_id: UUID: UUID
    pri_object: string: object_project
    pri_name: string: hold
    pri_color: color: colorBlue
    pri_default: int: 0
    prioritetai
    pri_id: UUID: UUID
    pri_object: string: object_project
    pri_name: string: svarbu
    pri_color: color: colorRed
    pri_default: int: 0

    Failų struktūra yra tokia: aš skambinu funkcijai padalinti (":") eilutės atžvilgiu ir jei gaunu, kad jos dydis yra 1, tai yra lentelės, kurioje turėtų būti įrašyti duomenys, pavadinimas. Priešingu atveju tai yra patys duomenys. Pirmasis laukas yra lentelės lauko pavadinimas. Antrasis laukas yra tipas, pagal kurį nusprendžiu, ką turiu parašyti šiame lauke. Jei tai UUID, tai reiškia, kad turiu sukurti unikalią UUID vertę. Jei eilutė reiškia, kad turiu ištraukti eilutės vertę iš išteklių. Jei tai spalva, tada vėl turite išgauti spalvos kodą iš išteklių. Jei int ar tekstas, aš tiesiog konvertuoju nurodytą reikšmę į int arba String be jokių gestų. Pats kodas atrodo taip:

    Privatus „ArrayList“ > getSQLDatas () („ArrayList“ > duomenys = naujas „ArrayList“<>(); „ArrayList“ failai = naujas „ArrayList“<>(); AssetManager assetManager = mContext.getAssets (); Styga dir = mData + mVersion; pabandyti (String listFiles = assetManager.list (dir); for (String file: listFiles) (files.add (file);) Collections.sort (files, new QueryFilesComparator ()); BufferedReader bufferedReader; String line; int separator = 0 ; ContentValues ​​cv = null; Eilutės laukai; String nameTable = null; String packageName = mContext.getPackageName (); loginė vėliava = false; HashMap hm; for (String file: files) (Log.d (TAG, "file db is" + file); bufferedReader = new BufferedReader (new InputStreamReader (assetManager.open (dir + "/" + file)))); while ((line = bufferedReader.readLine ())! = null) (fields = line.trim (). split (":"); if (fields.length == 1) (if (flag == true) (hm = new HashMap)<>(); hm.put (nameTable, cv); data.add (hm); ) // lentelės pavadinimas nameLentelė = line.trim (); cv = naujos „ContentValues“ (); Tęsti; ) else (if (fields.equals ("UUID"))) (cv.put (laukai, UUID.randomUUID (). toString ());) else if (fields.equals ("color") || fields.equals ( "string")) (int resId = mContext.getResources (). getIdentifier (laukai, laukai, paketo pavadinimas); Log.d (TAG, laukai + "" + resId); jungiklis (laukai) (atvejis "spalva": cv. put (laukai, resId); break; case "string": cv.put (laukai, mContext.getString (resId)); break; default: break;)) else if (fields.equals ("text")) (cv .put (laukai, laukai);) else if (laukai.lygus ("int")) (cv.put (laukai, Integer.parseInt (laukai));)) vėliava = tiesa; ) bufferedReader.close (); )) sugauti (IOException e) (e.printStackTrace ();) grąžinti duomenis; )

    Naujiena svetainėje

    >

    Populiariausias