Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben



Hasonló dokumentumok
Access adatbázis elérése OLE DB-n keresztül

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Adatbázisok webalkalmazásokban

Java Programozás 11. Ea: MVC modell

Java Programozás 3. Gy: Java GUI. Swing, AWT

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Programozási technológia

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

Vizuális, eseményvezérelt programozás I.

Java Programozás 5. Gy: Java alapok. Adatkezelő 1.rész

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Java felhasználói felület

B I T M A N B I v: T M A N

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Vizuális programozás gyakorlat

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

BME MOGI Gépészeti informatika 4.

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

A WEB programozása - JSP1 dr.gál Tibor őszi félév

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

Programozási technológia

Swing GUI készítése NetBeans IDE segítségével

Entity Framework alapú adatbáziselérés

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő A PHP programozási nyelv JDBC, ODBC

JavaServer Pages (JSP) (folytatás)

Swing. (A javax.swing csomag)

A Java nyelv. VI. Adatbázis-kezelés Javaban, Példaprogram Az elôzô részben láthattuk, hogy a Java ideális programozási nyelv perszisztens objektumok

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

Szoftvertechnológia alapjai Java előadások

libgdx alapok, első alkalmazás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

MySQL kontra MongoDB programozás. SQL és NoSQL megközelítés egy konkrét példán keresztül

Java programozási nyelv 8. rész Grafikus felhasználói felület

INFORMATIKAI ALAPISMERETEK

Java Database Connectivity (JDBC)

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Java Programozás 7. Gy: Java alapok. Adatkezelő 3.rész

Segítség a megoldáshoz: 1. Készítse el a Window-t az ábrának és az osztálydiagramnak megfelelően.


Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

JAVA PROGRAMOZÁS 5.ELŐADÁS

Grafikus felületek készítése 1.

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

INFORMATIKAI ALAPISMERETEK

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Webszolgáltatás és XML alapú adatbázis. 1. Az adatbázis megtervezése

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Webszolgáltatások készítése.net alapokon -

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Adatbázis-kezelés ODBC driverrel

Objektumorientált programozás C# nyelven III.

Mérési adatgyűjtés és adatfeldolgozás 2. előadás

Objektumorientált programozás C# nyelven

Java és web programozás

Objektumorientált programozás C# nyelven

BME MOGI Gépészeti informatika 7.

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Alap számológép alkalmazás

117. AA Megoldó Alfréd AA 117.

Objektumorientált programozás C# nyelven

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

Segédanyag: Java alkalmazások gyakorlat

Java és web programozás

Programozás 2., II. kötet Windows form alkalmazások

I. 288.: Utcai WiFi térkép

Tartalomjegyzék. Bevezetés...2

ZH mintapélda. Feladat. Felület

Entity Framework + LINQ oktatási segédlet

A.NET keretrendszer (.NET Framework) három alapvetõ összetevõbõl áll:

Java programozási nyelv 7. rész Java osztálykönyvtár 1.

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

BME MOGI Gépészeti informatika 6.

C#, OOP. Osztályok tervezése C#-ban

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Java Programozás 10. Ea: JDBC. SQLite alapokon

I. fejezet Hello Világ! Programozás tankönyv. II. Fejezet. Helló Világ! avagy a Miért?-ek elkezdődnek

Gyakorlati vizsgatevékenység B

RIA Rich Internet Application

Példaprogramok Android alá (Lista, mentés, visszatöltés, pattogó android figura) Android alapok. Android játékfejlesztés.

BME MOGI Gépészeti informatika 13.

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

7. Előadás. Makrók alkalmazása. Salamon Júlia. Előadás I. éves mérnök hallgatók számára

VISUAL BASIC ALAPISMERETEK

Kétdimenziós rajzolás WPF-ben

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

Eddig még nem használt vezérlőket is megismerünk: PlaceHolder, RadioButtonList.

Segédanyag: Java alkalmazások gyakorlat

ASP.NET 2.0 (Whidbey)

FELÜLET...13 PROJEKTTERV...14

Java és web programozás

Kalapácsvetés 2016 szöveges

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Átírás:

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben Java GUI készítése, Oracle kapcsolódás JDBC-vel A jelen anyagban egy egyszerűsített megközelítéssel vizsgáljuk egy adatbázis alapú alkalmazás Java implementációját. Számos olyan konvenciót (pl. MVC) nem tartunk be, amelyek egy nagyobb projektnél létfontosságúak a siker szempontjából ezekért lásd bővebben az Alkalmazásfejlesztés kurzust. Eclipse-ben új projektet hozunk létre. Ezen belül új osztályt veszünk fel. Ezután importálunk néhány szükséges csomagot: import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; Ezután létrehozzuk a komponenseket egy feliratot és egy gombot, GridLayout segítségével elrendezzük azokat, beállítjuk, hogy az ablak bezárásakor érjen véget a program futása. EsemenyKezelo néven létrehozunk egy osztályt, amivel a gombra kattintást kezeljük le. Létrehozásakor átadunk egy referenciát az űrlapot tartalmazó korábbi osztályra, hogy vissza tudjon hatni majd az űrlapunkra. import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class OracleExample private JFrame ablak; private JLabel lbl; private JButton btn; private JPanel pnl; private EsemenyKezelo k; public OracleExample() ablak = new JFrame("Ez a foablak"); lbl = new JLabel("Ez egy minta felirat"); btn = new JButton("Próba"); pnl = new JPanel(); k = new EsemenyKezelo(this); btn.addactionlistener(k); pnl.setlayout(new GridLayout(2,1)); pnl.add(lbl); pnl.add(btn); ablak.add(pnl); ablak.setdefaultcloseoperation(jframe.exit_on_close); ablak.pack(); ablak.setvisible(true); 1

public void setlbltext(string s) lbl.settext(s); public static void main(string[] args) OracleExample oci = new OracleExample(); Valamint az EsemenyKezelo osztály (implementálja az ActionListener interfészt, valamint az actionperformed() metódust:) import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class EsemenyKezelo implements ActionListener OracleExample c; private int sz; public EsemenyKezelo(OracleExample e) c = e; sz = 0; public void actionperformed(actionevent e) sz = sz + 1; c.setlbltext(integer.tostring(sz, 10)); Ezzel létrehoztunk egy igen egyszerű ablakos alkalmazást, amiben kezdetben egy felirat látható, valamint egy gomb, amire kattintáskor a számláló (EsemenyKezelo sz tagváltozója) inkrementálódik, és ez megjelenik az ablakban, a feliratban is: A következő feladat, hogy kapcsolatot létesítsünk az Oracle-lel, kiolvassuk az EMP táblából az átlagbért, és megjelenítsük azt a feliratban, gombra kattintás után. Az adatbázishoz való kapcsolódáshoz a JDBC-t használjuk. Szükséges beszerezni egy megfelelő illesztőprogramot ehhez az Oracle honlapjáról kell letöltenünk a mi szoftververziónknak megfelelő kiadást. Célszerű a thin drivert keresni. 2

Ha megvan a driver, szükséges lesz még azt a rendszerünkön regisztrálni is; ehhez a CLASSPATH környezeti változót kell kiegészítenünk a letöltött JAR fájl abszolút elérési útvonalának megadásával (némiképp körülményes és problémás út), vagy Eclipse-ben hozzá kell adnunk a letöltött JAR fájlt a projekthez (ekkor a fordításkor kényelmesen csatolódik a driver is; hasonló célt szolgál a java parancs classpath opciója.) Project > Properties > Java Build Path > Add External JARs... Létrehozunk egy osztályt DbConnection néven, ebben lesz egy connect() metódus a kapcsolat nyitására lekerdez() metódus az átlagfizetés lekérésére disconnect() metódus a kapcsolat zárására. import java.sql.*; public class DbConnection Connection c; boolean islive = false; public DbConnection() public boolean connect() try DriverManager.registerDriver(new oracle.jdbc.driver.oracledriver()); String url = "jdbc:oracle:thin:@localhost:1521:xe"; c = DriverManager.getConnection(url, "teszt", "jelszo"); System.out.println("ok"); catch (Exception e) e.printstacktrace(); islive = true; return true; public String lekerdez() if(islive) try Statement stmt = c.createstatement(); ResultSet rs = stmt.executequery("select AVG(SAL) FROM EMP"); if (rs.next()) return rs.getstring(1); else return ""; catch (SQLException e) 3

e.printstacktrace(); return " "; public boolean disconnect() if (islive=true) try c.close(); catch (SQLException e) e.printstacktrace(); islive = false; return true; Kissé módosítunk az EsemenyKezelo osztályon. Ahhoz, hogy a lekérdezett számértéket (kb. 2073 USD) megjelenítse, létrehozunk egy DbConnection objektumot benne, megnyitjuk a kapcsolatot, és a lekerdez() metódust hívjuk. import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class EsemenyKezelo implements ActionListener OracleExample c; private int sz; private DbConnection dbc; public EsemenyKezelo(OracleExample e) c = e; sz = 0; dbc = new DbConnection(); dbc.connect(); public void actionperformed(actionevent e) sz = sz + 1; c.setlbltext(integer.tostring(sz, 10) + " " + dbc.lekerdez()); További probléma lehet egy valós alkalmazásban az adatok bevitele az adatbázisba (UPDATE), vagy azok törlése (DELETE.) Ehhez egyrészről fel kell vennünk a GUI-n szövegbeviteli mező(ke)t, valamint a Statement objektumunk executeupdate() metódusát használjuk. 4

C# GUI készítése, Oracle kapcsolódás.net eszközökkel A Microsoft Visual Studio-t használjuk (a példákban a 2010-es verzió szerepel.) File > New > Project segítségével Visual C# Windows Forms Application-t hozunk létre OracleExample néven. A projekt létrehozása után egy grafikus szerkesztőfelületet kapunk egy üres űrlappal, amire fogd és vidd módszerrel kihelyezhetünk komponenseket (a korábbi Java programhoz hasonlóan itt is egy címkét Label és egy gombot Button helyezünk el.) Az egyes komponensekre egyszer kattintva a Properties fülön beállíthatók azok tulajdonságai (lásd oldalt.) Beállítjuk a Text tulajdonságokat. Ezután a gomb eseménykezelőjét írjuk meg (a Properties fülön a villám ikonra kattintva előhozható a teljes lista, ill. a gombra duplán kattintva automatikusan a Click eseményt írhatjuk meg.) A szerkesztőfelülethez jutunk: 5

namespace OracleExample public partial class Form1 : Form public Form1() InitializeComponent(); private void button1_click(object sender, EventArgs e) Amint látható, létre is jött egy csonk az eseménykezelésre. Vegyünk fel az osztályban egy tagváltozót (int), és csináljuk meg a számlálást itt is: namespace OracleExample public partial class Form1 : Form private int sz = 0; public Form1() InitializeComponent(); private void button1_click(object sender, EventArgs e) sz++; label1.text = sz.tostring(); Próbáljuk ki az alkalmazást: A következő feladat az Oracle kapcsolódás, hogy lekérdezzük a dolgozók átlagbérét. A.NET keretrendszer támogatja az Oracle-t, így nem szükséges külön drivert letölteni és regisztrálni (nincs is a JDBC DriverManager-hez hasonló szerepű összetevő, más szemléletű az architektúra.) Elegendő az adatbázis-kapcsolat létrehozására szolgáló osztály elején importálni két csomagot (a példában az egyszerűség kedvéért most mindent egy helyre ömlesztünk:) using System.Data; using System.Data.OleDb; 6

Ezután egy OleDbConnection objektumot hozunk létre. Meg kell adnunk egy kapcsolatleíró sztringet, ami elmagyarázza a rendszernek, hogy Oracle adatbázishoz kapcsolódunk, valamint hogy hol érhető el az adatbázis. (Megjegyzés. Adatforrásokat egy C# alkalmazáshoz varázsló segítségével is hozzá lehet adni, ennek ismertetésétől most eltekintünk.) Az átlagbér lekéréséhez egy OleDbCommand létrehozása szükséges. A megoldás: namespace OracleExample public partial class Form1 : Form private int sz = 0; private OleDbConnection dbc; private OleDbCommand cmd; private double avgber; public Form1() InitializeComponent(); private void button1_click(object sender, EventArgs e) sz++; label1.text = sz.tostring(); try String conn_str = "Provider=MSDAORA;Data Source=( DESCRIPTION = " + (ADDRESS_LIST = ( ADDRESS = ( PROTOCOL = TCP )( HOST = localhost)" + "( PORT = 1521 ) ) )( CONNECT_DATA = ( SERVER = DEDICATED ) " + (SID = xe ) );" + "User Id=teszt; Password = jelszo;"; dbc = new OleDbConnection(conn_str); dbc.open(); cmd = dbc.createcommand(); cmd.commandtext = "SELECT AVG(SAL) FROM EMP"; OleDbDataReader r = cmd.executereader(); r.read(); avgber = double.parse(r[0].tostring()); label1.text = sz.tostring() + " " + avgber.tostring(); dbc.close(); catch (Exception err) Console.WriteLine(err.ToString()); Adatbázisok lekérdezéséhez hasznos lehet a DataGridView komponens (húzással kihelyezhető.) Ez táblázatos formában képes egy adatforrást megjeleníteni. Az adatok lekéréséhez szükséges lesz (a kapcsolat korábban látott megnyitása után) egy OleDbDataAdapter létrehozása. Ebből ki kell nyernünk az adathalmazt egy DataSet-be, onnan kiválasztjuk a megfelelő táblát (DataTable), majd a létrehozott DataGridView adatforrásaként megadjuk azt. A korábbi button1_click(..) metódust így egészítjük ki: 7

private void button1_click(object sender, EventArgs e) sz++; label1.text = sz.tostring(); try String conn_str = "Provider=MSDAORA;Data Source=( DESCRIPTION =" + (ADDRESS_LIST = ( ADDRESS = ( PROTOCOL = TCP )( HOST = localhost)" + "( PORT = 1521 ) ) )( CONNECT_DATA = ( SERVER = DEDICATED ) " + (SID = xe ) );" + "User Id=teszt; Password = jelszo;"; dbc = new OleDbConnection(conn_str); dbc.open(); cmd = dbc.createcommand(); cmd.commandtext = "SELECT AVG(SAL) FROM EMP"; OleDbDataReader r = cmd.executereader(); r.read(); avgber = double.parse(r[0].tostring()); label1.text = sz.tostring() + " " + avgber.tostring(); OleDbDataAdapter da = new OleDbDataAdapter("SELECT AVG(SAL) FROM " + "EMP", dbc); DataSet ds = new DataSet(); DataTable dt = new DataTable(); ds.reset(); da.fill(ds); dt = ds.tables[0]; datagridview1.datasource = dt; dbc.close(); catch (Exception err) Console.WriteLine(err.ToString()); Ezután az eredmény: 8