CliMate: Laboration 3 dataselektion Human Centered Systems Inst. för datavetenskap Linköpings universitet
Översikt UI för sökning sökfält och felhantering Select i Java och Join Frågeobjekt Svarshantering Skriva ut på fil
Laboration 3: uppgift 1 Skapa inmatningsfält för sökning i databas Inmatade värden ska kontrolleras Förslagsvis rödfärgade fält
UI representation av frågor dropdown gömmer snabbknappar radiobutton vid få val undvik koder som fritext datum och tid organisera logiskt
CliMate: grafiken metadata måste editeras för att få text titlarna i exempelkoden. Rekomenderad layout manager är GridLayout elementen flyter ut om plats finns Generiska lyssnare på min och max fält finns JProgressBar ska användas på samma sätt som i labb 2 update lyssnare ska lyssna på ObservationReport håller först sökvärden; sen ResultSet och skriver på fil
Swings Layout hantering JPanel p = new JPanel(); p.setlayout(new GridLayout(0,2)); p.add(button1); p.add(label2); p.add(button3);...etc
CliMate: enkel felhantering sökdata format testas för varje fält java.text.simpledateformat#parse testar datum (se javadoc) Pop up visas för första hittat fel förbättrad (frivillig) variant: hitta alla fel direkt Alt: skriv ut felen vid fälten istället för pop up
Sekvensdiagram för Sök : från presentation till databas searchb: SearchDb SearchDb Observation Database Select JButton Action Worker Report Service Statement action Performed new start select select execute Query setnumberof Processed... selectresult... selectresult... Swing tråden SwingWorker tråden
ObservationReport Observable liksom FileCollection Lyssna på progress vid sparande till fil Har fält som motsvarar sökfälten i UI metoderna setupperbound, setlowerbound report objektet vet inte vilka sökkriterier som finns inför konstant i klassen för varje fält Sök i databas ingen egen metod görs av write metoden Utskrift på fil jmf. FileCollection har hand om inläsning
Laboration 3: uppgift 2 Sök i databas baserat på inmatade sökvärden Två tabeller används för att hämta svar
SQL SELECT SELECT [ALL DISTINCT] columnname1 [,columnname2] FROM tablename1 [,tablename2] [WHERE condition] [ and or condition...] [GROUP BY column list] [HAVING "conditions] [ORDER BY "column list" [ASC DESC] ] Enklaste fallet: SELECT * FROM tablename WHERE condition; Villkor: = likhet < mindre än > större än <= mindre än eller lika >= större än eller lika <> inte lika LIKE substrängs likhet med % REGEXP reguljära uttryck (MySQL)
Enkelt exempel på SQL utryck SELECT city, region FROM towns WHERE population > 15000 tabell towns city region population Linköping Östergötland 120 000 Handeln Stockholm 25 000 Grums Värmland 10 000 resultatmängd city region Linköping Östergötland Handeln Stockholm
SQL select med JDBC String query = "SELECT city, region FROM towns WHERE population > 15000 ; ResultSet rs = stmt.executequery(query); while (rs.next()) { String city = rs.getstring("city"); String region = rs.getstring("region"); System.out.println(city + " " + region); } stmt.close(); Linköping Östergötland Handeln tockholm
Exempel på SQL utryck: inner join SELECT suppliers.id, suppliers.name, orders.date FROM suppliers, orders WHERE suppliers.id = orders.su_id; tabell suppliers tabell orders resultatmängd id name id su_id date id name date 10000 Ericsson 10001 Nokia 10002 Telia 10003 Vodafone 500125 10000 2003/05/12 500126 10002 2003/05/13 10000 Ericsson 2003/05/12 10002 Telia 2003/05/13
SQL select i JDBC String query = "SELECT suppliers.id, suppliers.name, orders.date + FROM suppliers, orders + WHERE suppliers.id = orders.su_id"; ResultSet rs = stmt.executequery(query); while (rs.next()) { int id = rs.getint("id"); String name = rs.getstring("name") Date date = rs.getdate( date ); System.out.println(id + : + name + : + date); } stmt.close(); 10000:Ericsson:2003/05/12 10002:Telia:2003/05/13
Query Object/Method (Fowler) Jmf. Update Object/Method (labb 2) Kapsla in SQL kod undvik konkret metadata/program i löpande källkod används i transaktionskript metoderna DataMapper använder dessa metoder för att bygga upp sitt SQLstatement och sen Men Implementera bara vad du behöver liten overhead försök inte implementera hela SQL/Select Hitta en bra abstraktionsnivå...svårt men värdefullt
SelectStatement addfield: metod som tar ett Field objekt. Innehåller både fältnamn och tabellen för fältet tilldelar query = "SELECT " + col + " FROM " + table + " WHERE " addupperlimit/addlowerlimit: lägger dit ny ekvation i where delen och AND om ekvationer redan finns execute: skickar skapad fråga till databasen
Laboration 3: uppgift 3 Uppgift 3: Spara databassvaret på fil filens namn ska efterfrågats spara ner i block använd progressbar jobba med SelectionResult
Skiss på förlopp Klick på spara Visa upp JFileChooser Spara på fil Uppdatera progressbar
Spara på fil: paketet java.io Java klientprogram Java Ström Datakälla Enkelriktad sekvensiell trafik write Tecken strömmar XxxWriter Byte strömmar XxxxOutputStream Smidig hantering av objekt och dataformat PrintXxx t ex stöd för println som avslutar med \n
Skriva till teckenströmmar java.io.printwriter Kan hantera både byte och char strömmar Stöd för utskrifter av olika datatyper t ex print och println close() stänger strömmen Titta i javadoc!
Exempel: skriv ut till fil import java.io.*;... String[] filedata = {"ett", "litet", "test"}; String filename = outfile.txt ; try { PrintWriter out = new PrintWriter(fileName); for (String row : filedata) { out.println(row); } out.close(); } catch (IOException e) { System.err.println("Exception thrown!"); e.printstacktrace(); System.exit( 1); // exit with abnormal value } Skapar/ skriver över filen ett litet test outfile.txt
Summering Användargränssnitt för sökning fält med interaktivt stöd, t ex felingenkänning Arbeta (indirekt) med SQL SELECT QueryObject i climate.database gömmer Sql koden Iterera (indirekt) över ett ResultSet och spara på fil