Informatica II – Overzicht Java Code by: Nirves HOOFDSTUK 1 //COMMENT Commentaar /************ BLOCK COMMENT ************/ Geblokt commentaar (!) Volgende commentaar moet zeker aanwezig zijn: - Aan het begin: naam van de programmeur, datum waarop het programma werd geschreven, datum van de laatste aanpassingen, programmeur van de laatste wijzigingen; doel van het programma (probleemstelling, gebruikte algoritmes); - Bij de declaratie van constanten en variabelen: betekenis en doel?; - Toelichting per onderdeel v/h programma; - De belangrijkste procedures (zeker main()) toelichten; - Wanneer een programmablok gesloten wordt met “}”, steeds vermelden wat je afsluit; (!) Commentaar toevoegen tijdens het programmeren, niet erna. import packagename.classname; Importeren van externe klassen. (!) “*“ kan men gebruiken als wildcard om alle klassen uit een zeker pakket te halen, bvb. “import javax.swing.*” importeert alle klassen uit het “swing” pakket. public class ClassName { begin klasse beëindig klasse } Declaratie v/e klasse (kan ook private of protected) (!) De naam van het .java-bestand moet hetzelfde zijn als de classname van de publieke klasse! (!) Klassenamen steeds met een hoofdletter laten beginnen! public static void main(String args[]) { begin methode Declaratie v/e methode Programma instructie 1; (zie h7) Programma instructie 2; … Beëindig methode } (!) Programma-instructies scheiden met puntkomma’s! (!) Argumenten vermelden, kan ook leeg zijn (main()) (!) Methode-namen steeds met kleine letter! 1 Informatica II – Overzicht Java Code by: Nirves HOOFDSTUK 2 Levenscyclus v/e programma: - Probleem definiëren (IPO-schema) - Oplossing plannen (methodes, klassendiagramma) - Stapsgewijze verfijning (pseudo-code) - Coderen (java-code, commentaar niet vergeten!) - Testen, debuggen (syntax,logic en run-time errors opsporen) HOOFDSTUK 3 Data members definëren: final <data type> <IDENTIFIER> = waarde Constante definiëren. (!): identifier in hoofdletters Vb. final double TAX_RATE = 0.07; <data type> <identifier> = initiële waarde Variabele definiëren. (!): identifier kleine letters Vb. int startingValue = 5; Data types: byte, short, int, long, float, double, char, String, boolean. (!):chars: enkele aanhalingstekens (‘ ‘). Strings: dubbele aanhalingstekens (“ “). Binnen een klasse: private (final) <data type> <identifier> public (final) <data type> <identifier> (!): Meestal variabelen private en methodes public (zie verder). Class Declaration Format class Classname { //DATA MEMBERS private variable 1; ... private variable n; //METHOD MEMBERS public method 1() { statements } ... public method n() { statements } }//END CLASS (kan ook protected) (kan ook private) 2 Informatica II – Overzicht Java Code by: Nirves Output Methoden: Io.writeInfo(“blablabla”) System.out.println(“blablabla”) System.out.print(“blablabla”) \n \\ \’ \” \b \r \t (!):nieuwe lijn na blablabla (!):geen nieuwe lijn nieuwe lijn (opm: backslash!) backslash enkel aanhalingsteken dubbel aanhalingsteken backspace carriage return horizontale tab import java.text.NumberFormat Numberformat currency = Numberformat.getCurrencyInstance(); currency.format(getal) → Formateren van een getal als “$ #,###.##” Vb. io.writeInfo(“De winst bedraagt: “ + currency.format(winst)); Intput Methoden: io.readInt(“blablabla?”) io.readDouble(“blablabla?”) io.readChar(“blablabla?”) io.readString(“blablabla?”) io.readBool(“blablabla?”) Vb. value = io.readDouble(“Geef een waarde in”); Standaard Methoden: Wiskundige: zie kaft boek, vb. Math.sqrt() Tekst: zie kaft boek, vb.: int stringLenght = 0; String teacher = “Grace Hopper”; stringLenght = teacher.lenght() (!): Java is case-sensitive: s.Lenght ≠ s.lenght HOOFDSTUK 4 value = Math.floor(value*100+.5)/100 Afronden tot op 0.01 value = Math.floor(value*1000+.5)/1000 Afronden tot op 0.001 Verder: wiskundige shit, zie toepassingen p.135 e.v. Naam bestand = naam publieke klasse bij uitvoerend deel public class Bestandsnaam { Naam klasse begin (class Xxxxx) = naam item in de main() Xxxxx item = new Xxxxx(); item.getData; ... 3 Informatica II – Overzicht Java Code by: Nirves HOOFDSTUK 5 Boolean Operations Rational: == (gelijk aan) != (verschillend van) < (kleiner dan) <= (kleiner of gelijk aan) > (groter dan) >= (groter of gelijk aan Logical: ! NOT || OR && AND if Statement if(test expression) { statement 1; ... statement n; }//END IF opm.: om strings te vgl: if(s1.compareTo(s2) < 0) { statement 1; ... statement n; }//END IF if/else Statement if(test expression) { statement 1; ... statement n; }//END IF else(test expression) { statement 1; ... statement n; }//END ELSE Switch Statement (zie p. 175 ivm. break) switch(selector value) { case value1 : case 1 statements; break; case value2 : case 2 statements; break; ... case valueN : case N statements; <optioneel> break; default : default statements; }//END SWITCH voorbeeld p. 182-184 4 Informatica II – Overzicht Java Code by: Nirves HOOFDSTUK 6 Pretest Loop Posttest Loop while(test expression) { statement 1; ... statement n; }//END WHILE do { statement 1; ... statement n; }//END DO/WHILE while(test expression) Fixed Repitition for(int count=initial_value; count_test_expression; ++count/-count) { statement 1; ... statement n; }//END FOR vb. for(int i = 1; i < 11; ++count) vbn. p.212-218 (loopt 10x) Een loop verlaten while(test expression) { statement; ... if(test expresiion) break; ... statement; }//END WHILE break haalt u meteen uit de loop, naar de volgende lijn na “end while”. vb. p220. for(int count=initial_value; count_test_expression; ++count/-count) { statement; ... continue slaat slechts 1 loop if(test expresiion) over en doet verder met de forcontinue; structuur. vb. p221. ... statement; }//END FOR 5 Informatica II – Overzicht Java Code by: Nirves HOOFDSTUK 7 Non-Void Methods: sturen 1 enkele waarde terug //METHOD HEADER vb. p236 <modifier> <return type> <method_name>(parameter list) public char ↓ private double data-types vermelden! protected int... {//BEGIN METHOD BODY <lokale variabelen declareren> method statement; ... method statement; return <single value> }//END METHOD BODY geen data-types vermelden! ↑ - Aanroepen: object_name.method_name(arguments) vb. double grossPay = 0.0; grossPay = myPay.returnGrossPay(8.0,32); -ofsystem.out.println(myPay.returnGrossPay(8.0,32)); -ofStaugIO io = new StaugIO(); io.writeNumber(myPay.returnGrossPay(8.0,32)); Void Methods: sturen geen waarde terug <modifier> void <method_name>(parameter list) vb. public void displayHeading() { System.out.println(“\tNAME\tSTREET ADRESS\tCITY”); System.our.println(“\t____\t_____________\t____”); }//END DISPLAYHEADING - Aanroepen: myObject.displayHeading(); - Om binnen een void-method de controle terug aan het programma te geven zet je “return;” (bvb. binnen een if). vb. p250. Overzicht klasse: p251 Methoden Overladen - Verschillende methodenn met zelfde naam maar verschillende parameters (aantal of datatypes). De methode doet andere bewerkingen afhankelijk van de ingelezen argumenten. - vb. p253. 6 Informatica II – Overzicht Java Code by: Nirves Recursie vb. public double balance(int n) { if(n == 0) return deposit; else return (1 + rate / 12 / 100) * balance(n - 1); }//END BALANCE HOOFDSTUK 8 UML ClassName –varabele:adt=beginwaarde –CONSTANTE:adt=beginwaarde +methodName() +methodName(in inputvar:adt) out inout +methiodname():adt +methodName(in inputvar:adt)=adt – voor private + voor public # voor protected void zonder parameters void met parameters non-void zonder parameters non-void met parameters vb. p284 Constructors public ClassName(parameters) geen return-type, ook niet void; enkele om waarden te initialiseren of bestanden te openen; naam constructor = naam klasse! vb. public SavingsAccount(double bal) { balance = bal; }//END SavingsAccount() aanroepen: SavingsAccount myAccount = new SavingsAccount(1000.00); kan overladen worden wanneer een parameter v/e methode (dus ook bij contructors) dezelfde naam heeft als een private member: this gebruiken. this.naam verwijst dan naar de private member. (vb. p393) vb. p300-304 winPercent = (double)wins/(wins + losses) * 100; → zet de data tijdelijk om in double ipv int (wat 0 zou geven). //CAST 7 Informatica II – Overzicht Java Code by: Nirves Packages: zie p.307 ev. package naamVanDePackage public class NaamVanDeKlasse { inhoud van de klasse } (kleine letter!) (Hoofdletter!) HOOFDSTUK 9 Building a Class Family - Superklasse op de normale manier maken als onderdeel van een package, data member moeten protected (ipv. private). - Subklasse: class subclass_name extends superclass_name { Subclass data members ... Subclass method members ... }//END CLASS - Binnen de constructor: super(argumenten); → roept de constructor v/d superklasse op en vult argumenten in bij parameters. - Importeren van de package in het programma met de main(): import.packageName.*; Polymorfisme en dynamic binding - Als nooit objecten van een superklasse mogen gemaakt worden: public abstract class ClassName - Als een methode algemeen in voor alle subklassen maar de statements erin verschillen per subklasse (vb. weeklyPay() op p339), dan declareer je ze in de superklasse als abstract, met enkel de header (zie vb. p339). HOOFDSTUK 10 1-Dimensionale Tabel declaratie: adt arrayName[] = new adt[size]; (!) De table begint bij 0, dus de hoogst mogelijke index zal gelijk zijn aan (SIZE-1)! 8 Informatica II – Overzicht Java Code by: Nirves initialisatie: adt arrayName[] = {waarde1,waarde2,…,waardeN}; (!) Bij char: ‘waarde’, bij String: “waarde” elementen invoeren: o directe methode: arrayName[index] = waarde; o via loop: for(int index = 0; index < size; ++index) arrayName[index] = io.readInt(“Geef integer”); elementen kopiëren: o directe methode: variabele = arrayName[index]; (!) variabele zelfde adt als array! arrayName[i] = arrayName[j]; (!) enkel slot i wordt gewijzigd. o via loop: zie vb. p358 Tabellen van Objecten ClassName arrayName[] = new ClassName[size] for(int i=0; i<size; ++i) { arrayName[i] = new Classname() arrayName[i].methodName[] ... }//END FOR → zie vb. p366 Tabellen doorgeven aan een methode public void methodName(adt array[]) methodName(name) (vierkante haakjes!) (bij oproepen methode via argument: geen [ ]) (!) De array zelf wordt gewijzigd in de methode! Om dit te voorkomen werk je met een tijdelijke array (zie p370). Individuele waarden doorgeven: public void methodName(arrayName[i]) Sorteeralgoritmes: zie p.372 e.v. 9 Informatica II – Overzicht Java Code by: Nirves HOOFDSTUK 11 JFrame Overzicht events: p399 Overzicht listeners: p400 Overzicht GUI components: p405 import javax.swing.*; import java.awt.event.*; //FOR swing CLASSES //FOR EVENT HANDLERS //INHERITS AND CUSTOMIZES FRAME CLASS TO ADD DESIRED FEATURES class SimpleFrame extends JFrame { //CONSTRUCTOR public SimpleFrame(String title) { //CALL SUPERCLASS CONSTRUCTOR super(title); //ADD LISTENER addWindowListener(new WindowHandler()); }//END SimpleFrame() CONSTRUCTOR //WINDOW EVENT HANDLER CLASS private class WindowHandler extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); }//END windowClosing() }//END WindowHandler CLASS }//END SimpleFrame CLASS //APPLICATION CLASS TO TEST SimpleFrame CLASS public class FrameTest { public static void main(String[] args) {//DEFINE FRAME OBJECT SimpleFrame window = new SimpleFrame(“Frametitle”); //SET FRAME SIZE window.setSize(500,300); //MAKE FRAME VISIBLE window.show(); }//END main() }//END FrameSet 10 Informatica II – Overzicht Java Code Containers en Buttons by: Nirves (vb. p406-407) 1. Importeer awt (bovenaan) import java.awt.*; 2. Declareer object (in class, vóór constructor) private JButton button; 2. Maak container voor GUI componenten (in constructor) Container container = getContentPane(); 3. Maak GUI componenten (in constructor) en voeg toe aan container (in constructor) button = new Jbutton("Tekst"); container.add(button); 4. Listener toevoegen (in constructor) button.addActionListener(newButtonHandler()); 5. Maak eventhandler class (in class, ná constructor) private class ButtonHandler implements ActionListener { public void actionPerformed(ActionEvent e) { JOptionPane.showOptionDialog (null,“boodschap”, “Frametitel”,optionPane.INFORMATION_MESSAGE); }//END actionPerformed }//END ButtonHandler CLASS 6. Applicatie: zelfde als boven JOptionPane klasse (p409) JOptionPane.showMessageDialog(null,“boodschap”, “Frametitel”,optionPane.INFORMATION_MESSAGE); JOptionPane.showInputDialog("Geef tekst in"); Tooltips en sneltoetsen button.setToolTipText("Tekst voor de tooltip"); button.setMnemonic(‘karakter’); Layout managers en Panels (p412) Statements toevoegen aan de constructor. FlowLayout: container.setLayout(new FlowLayout(...)); FlowLayout() → centered, gaps = 5 pxl FlowLayout(int alignment) FlowLayout(int alignment, int hGap, int vGap) vb. container.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 20)); Meer knoppen: vb. p414 11 Informatica II – Overzicht Java Code by: Nirves GridLayout: GridLayout() → 1 rij GridLayout(int rows, int cols) GridlLayout(int rows, int cols, int hGap, int vGap) vb. container.setLayout(new GridLayout(2,3,10,10)); BorderLayout: BorderLayout() BorderLayout(int hGap, int vGap) vb. container.setLayout(new BorderLayout(10,10)) → objecten een plaats geven bij het toevoegen aan de container: container.add(nameLabel,“Plaats”); “Plaats” = North, East, South, West, Center Eigen Layout Maken (zie vb. p422-423) container.setLayout(null); button.setLocation(int x ,int y); button.setSize(int l ,int h); JPanel: zie vb. p424-426 JLabel: JLabel nameLabel = new JLabel("text"); nameLable.setForeground(Color.black); container.add(nameLabel); zie vb. p429 JTextField & JTextArea: constructors p. 431, vb. p. 432-434 * panel.add(new JScrollPane(textArea); * textArea.setText(“__________”); textAre.append(“___: ” textField.getText()); * new String(passwordField.getPassword) Text Events: vb. p436-438 12 Informatica II – Overzicht Java Code by: Nirves HOOFDSTUK 12 Combobox (JComboBox) om slechts 1 item aan te duiden In klasse (bovenaan): //DECLARATIE private JComboBox naamBox In constructor: //ARRAY VOOR INHOUD String boxItems[] = {“Optie1”, “Optie2”, …} //DEFINITIE naamBox = new JComboBox(boxItems); //IN CONTAINER container.add(naamBox); Geselecteerd item vinden: naamBox.getSelectedItem()); Om selectie onmiddelijk te detecteren: //LISTENER naamBox.addActionListener(new BoxHandler()); //EVENT HANDLER private class BoxHandler implements ActionListener { //PROCESS EVENT public void actionPerformed(ActionEvent e) { //CHECK COMBOBOX EVENT if (e.getSource() == naamBox) { ... }//END IF }//END actionPerformed() }//END BoxHandler Vbn. p.455-459 Listbox (JList) om meerdere items aan te duiden In klasse (bovenaan): private JList naamList In constructor: //ARRAY VOOR INHOUD String listItems[] = {“Optie1”, “Optie2”, …} 13 Informatica II – Overzicht Java Code by: Nirves //DEFINITIE naamList = new JList(listItems); //SET VISIBLE ITEMS naamList.setVisibleRowCount(3); //IN CONTAINER (met scrollbar) container.add(new JScrollPane(naamList)); Geselecteerd item vinden: //INDEX VD GESELECTEERDE OPTIES int selectedIndices[] = naamList.getSelectedIndices(); //OPHALEN VD OPTIES for (int i = 0; i < selectedIndices.lenght; ++i) { ...listItems[selectedIndices[i]]...; }//END FOR Om selectie onmiddelijk te detecteren: //LISTENER naamList.addActionListener(new ListHandler()); //EVENT HANDLER private class ListHandler implements ListSelectionListener { //PROCESS EVENT public void valueChanged(ListSelectionEvent e) { ...zie hierboven... }//END valueChanged() }//END ListHandler vbn. p.461-468 Checkbox (JCheckBox) om meerdere items aan te duiden In klasse (bovenaan): //DECLARATIE private JCheckBox naamBox In constructor: //DEFINITIE naamBox = new JCheckBox(“Optie"); //IN CONTAINER container.add(naamBox); 14 Informatica II – Overzicht Java Code Is box geselecteerd? naamBox.isSelected() by: Nirves methode die true/false antwoord Met een actionlistener: zie vb. p469-472 //LISTENER CheckBoxHandler checkHanler = new CheckBoxHandler(); naamBox.addItemListener(new checkHandler()); //EVENT HANDLER private class CheckBoxHandler()implements ItemListener { //PROCESS EVENT public void itemStateChanged(ItemEvent e) { //CHECK COMBOBOX EVENT if (e.getSource() instanceof JCheckBox) { if (naamBox.isSelected()) {...}//END IF }//END IF }//END itemStateChanged() }//END BoxHandler Radiobox (JRadioButton) om slechts 1 item aan te duiden In klasse (bovenaan): private JRadioButton naam In constructor: //MAAK BUTTONGROEP ButtonGroup = naamGroep = new ButtonGroup(); //DEFINITIE KNOPKES naamKnop = new JRadioButton(“Optie"); //KNOPPEN IN GROEP naamGroep.add(naamKnop); //IN CONTAINER container.add(naamKnop); Is box geselecteerd? naamKnop.isSelected() methode die true/false antwoord Met een actionlistener: slechts voor 1 knop/groep een listener maken! //LISTENER naamKnop.addItemListener(new RadioButtonHandler()); →verder analoog aan checkbox (met if-structuur), vb. p474-475 15 Informatica II – Overzicht Java Code by: Nirves (Sub)Menu’s (JMenu, JMenuItem, JMenuBar) zie vbn. p478-479 en 484-487 Stappen indien geen submenus: 1. definieer een array voor de verschillende opties van hoofdmenu’s private JMenuItem menuItems[]; 2. definieer hoofdmenu-object en stel sneltoets in ( in de constructor). JMenu menuNaam = new JMenu(“Titel”); menuNaam.setMnemonic(‘T’); 3. definieer string voor de menu’s String arrayNaam[] = {“Optie1”, “Optie2”,…} 4. array-objecten initialiseren voor menu’s. menuItems = new JMenuItem[arrayNaam.lenght]; 5. menu-items initialiseren, in menu teken en listeners op zetten. for (int i = 0; i < arrayNaam.lenght; ++i) { menuItems[i] = new JMenuItem(arrayNaam[i]); menuNaam.add(arrayNaam[i]); menuItems[i].addActionlistener(new MenuHandler()); }//END FOR 6. menubar definiëren, menu toevoegen en bar gereedzetten (menu mag nooit in een container!). JMenuBar bar = new JMenuBar(); bar.add(menuNaam); setJMenuBar(bar) 7. eventhandler: //MENU HANDLER CLASS private class MenuHandler()implements ActionListener { //PROCESS MENU EVENT public void ActionPerformed(ActionEvent e) { //MENUITEMS ARRAY DOORLOPEN for(int i = 0; i < menuItems.lenght; ++i) { if (e.getSource() == menuItems[i]) {...}//END IF }//END IF }//END actionPerformed() }//END MenuHandler Met submenu’s: zie p.484-488 Kleuren: zie p.483 Lettertypes: zie p.489-490 16 Informatica II – Overzicht Java Code by: Nirves Overzicht gebruikte Methodes: p.491 Meer Layout Managers BoxLayout (zie vb. p.492-495) Box naamVanDeBox = Box.createHorizontalBox(); Box naamVanDeBox = Box.createVerticalBox(); naamVanDeBox.add(areaNaam); naamVanDeBox.add(naamVanAndereBox); conatiner.add(naamVanDeBox); CardLayout (zie vb. p.495-503) Voor constructor: private CardLayout mgrObject; private JPanel panelNaam; In constructor: //LAYOUT VD PANEL INSTELLEN mgrObject = new CardLayout(); panelNaam = new JPanel(); panelNaam.setLayout(mgrObject); //CARDS MAKEN JPanel kaartNaam = new JPanel(); ... panelNaam.add(kaartNaam, “identifier”); //CARD RANDOM ACCES MAKEN mgrObject.addLayoutComponent(kaartNaam, “identifier”); //CARDS IN CONTAINER container.add(panelNaam, “Center”); Methoden binnen eventhandler: mgrObject.first(panelNaam); mgrObject.last(panelNaam); mgrObject.next(panelNaam); mgrObject.previous(panelNaam); mgrObject.show(panelNaam); 17 Informatica II – Overzicht Java Code by: Nirves HOOFDSTUK 14 File Streams via java.io package: FileInputStream: Openen binaire input stream naar file FileOutputStream: Openen binaire ouput stream naar file DataInputStream: Lezen van binaire data van een stream DataOutputStream: Schrijven binaire data naar een stroom FileReader: Openen tekst stream voor input verbonden met file FileWriter: Openen tekst stream voor output verbonden met file BufferedReader: Voorziet input buffering BufferedWriter: Voorziet output buffering PrintWriter: Schrijven van tekst data naar output stream Binaire Files Openen public void openInputFile(vb.dat) { FileInputStream in = new FileInputStream(vb.dat) DataInputStream inFile = new DataInputStream(in); }//END openInputFile public void openOutputFile(vb.dat) { FileOutputStream out = new FileOutputStream(vb.dat); DataOutputStream outFile = new DataOutputStream(out); }//END openOutputFile verkorte schrijfwijze mogelijk: public void openOutputFile(vb.dat) { DataOutputStream outFile = new DataOutputStream(new FileOutputStream(vb.dat)); }//END openOutputFile public void openInputFile(vb.dat) { DataInputStream inFile = new DataInputStream(new FileInputStream(s)); }//END openInputFile Exception Handling try { //Statements that might throw exceptions catch(ExceptionClass exceptionObject) { //Statements to handle exceptions finally { //Statements that will always execute } } } 18 Informatica II – Overzicht Java Code by: Nirves public void openOutputFile(vb.dat) {//PROBEREN FILE TE OPENEN try { DataOutputStream outFile = new DataOutputStream(new FileOutputStream(s)); textArea.setText(“File Open”) }//END try(); //FOUT OPVANGEN catch(IOException io) { textArea.setText(“\n\nFile not Found Error\n” + io.toString()); }//END catch() }//END openOutputFile →Fouten die java kan herkennen: zie p.555 Schrijven/Lezen van en naar binaries Schrijven: →WriteStudentFile: zie p.559 outFile.writeUTF(String); zie p560 voor niet-strings te schrijven →(!): moet binnen try/catch blok mogelijke exceptions: NumberFormatException, IOException,… Lezen: →ReadStudentFile: zie p.561 inFile.readUTF(); zie p562 voor niet-strings te lezen →(!): moet binnen try/catch blok mogelijke exceptions: NullPointerException, EOFException, NumberFormatException, IOException,… Sluiten binaire files Outputfile: outFile.flush(); schrijft van buffer naar file outFile.close(); sluit file →(!): moet binnen try/catch blok mogelijke exceptions: NullPointerException, IOException,… Inputfile: inFile.close(); sluit file →(!): moet binnen try/catch blok mogelijke exceptions: NullPointerException, IOException,… Eindresultaat writestudent: p.564-568 Eindresultaat readstudent: p.569-572 19 Informatica II – Overzicht Java Code by: Nirves Tekstfiles openen public void openOutputTextFile(vb.txt) { try { PrintWriter outFile = new PrintWriter( (new BufferedWriter(new FileWriter(vb.txt)))); fileNameField.setText(“File Open”) } catch(IOException io) { textArea.setText(“\n\nFile not Found Error\n” + io.toString()); } }//END openOutputTextFile public void openInputTextFile(vb.txt) { try { BufferedReader inFile = new BufferedReader(new FileReader(vb.txt)); fileNameField.setText(“File Open”) } catch(IOException io) {...} } Schrijven/Lezen van en naar tekstfiles Schrijven: outFile.print(String); cursor blijft op zelfde lijn outFile.println(String); cursor neemt nieuwe lijn →(!): moet binnen try/catch blok mogelijke exceptions: IOException,… Lezen: inFile.read(); leest één karakter inFile.readLine(); leest één lijn while((line = inFile.readLine()) != null); leest tot er niets meer te lezen is →(!): moet binnen try/catch blok mogelijke exceptions: NullPointerException, EOFException, IOException,… 20 Informatica II – Overzicht Java Code by: Nirves Sluiten tekstfiles outFile.flush(); outFile.close(); inFile.close(); vb.writestudent: p.578-582 vb.readstudent: p.582-586 JDBC Stap1: Laden van een driver → via java.sql package private void loadDriver() {//TRY LOADING SUN DRIVER try {//LOAD SUN DRIVER Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }//END try //DRIVER NOT FOUND, REPORT ERROR catch (ClassNotFoundException err) { System.out.println("Could not load driver"); System.exit(1); }//END catch }//END loadDriver() Stap2: DB-verbinding → via getConnection-methode private void connectDatabase() { try {//CONNECT TO DATABASE String dir = System.getProperty("user.dir"); String dbFile = “vb.mdb"; String protocol ="jdbc"; String subProtocol = "odbc"; String subName = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" + dir + "/" + dbFile; String URL = protocol + ":" + subProtocol + ":" + subName; naamConnection = DriverManager.getConnection(URL); }//END try catch(SQLException error) { System.err.println("Error connecting to database: " + error.toString()); }//END catch }//END connectDatabase() 21 Informatica II – Overzicht Java Code Stap3: Database-operaties: by: Nirves → via Statement-klasse Definiëren Statement object voor een bepaalde connectie: Statement naamStmt = naamConnection.createStatement(); Zoekmethodes: Niet-zoekmethodes: executeQuery() ExecuteUpdate() Volgende lijn: next() (resultaat is true/false) Result Set methodes: getBoolean(int kolomIndex) getDouble(int kolomIndex) getFloat(int kolomIndex) getInt(int kolomIndex) getString(int kolomIndex) getBoolean(String kolomNaam) getDouble(String kolomNaam) getFloat(String kolomNaam) getInt(String kolomNaam) getString(String kolomNaam) → Records ophalen: public void readRecord() {//TRY TO READ DB try {//CREATE A STATEMENT OBJECT FOR THE ALUMNI CONNECTION Statement naamStmt = naamConnection.createStatement(); //EXECUTE AN SQL STATEMENT TO RETURN A RESULT SET naamResultset = naamStmt.executeQuery("SELECT ... FROM ...;"); //LOOP THROUGH RESULTSET WITH NEXT while(naamResultset.next()) { ...bewerkingen hier... naamResultset.getString("kolomNaam"); ... }//END while }//END try catch (SQLException error) { System.err.println("Error reading database names"); }//END catch }//readRecord() → toevoegen record: INSERT INTO [tabelnaam] ([kolomnaam1], [kolomnaam2], …) VALUES ([value1], [value2], …) 22 Informatica II – Overzicht Java Code by: Nirves → wijzigen record: UPDATE [tabelnaam] SET [kolomnaam1] = [waarde1], [kolomnaam2] = [waarde2], … WHERE [criteria] → verwijderen record: DELETE FROM [tabelnaam] WHERE [criteria] public void writeStudentRecord() { //TRY TO WRITE STUDENT RECORD TO FILE try { Statement studentStatement = studentConnection.createStatement(); String name = nameField.getText(); String number = numberField.getText(); String GPA = gpaField.getText(); String insertSql = "INSERT INTO Student(studentNumber,name, GPA)" + "VALUES (“ + number + "," + name + "," + GPA + ")"; studentStatement.executeUpdate(insertSql); int selectedIndices[] = majorsList.getSelectedIndices(); //WRITE LIST ITEMS TO FILE for (int i = 0; i < selectedIndices.length; ++i) { Statement studentMajorStatement = studentConnection.createStatement(); String insertSql2= "INSERT INTO StudentMajor(studentNumber, Major)" + "VALUES(" + number + "," + listItems[selectedIndices[i]] + ")"; studentMajorStatement.executeUpdate(insertSql2); }//END FOR }//END try() TO WRITE RECORD //CATCH NUMBER FORMAT EXCEPTION FOR GPA FIELD catch (NumberFormatException nfe) { studentArea.append("\n\nWRITE FILE ERROR\n" + "MAKE SURE GPA IS CORRECT\n" + nfe.toString()); }//END NumberFormatcatch() 23 Informatica II – Overzicht Java Code by: Nirves //CATCH ANY EXCEPTIONS WRITING TO FILE catch (SQLException io) { studentArea.append("\nWRITE FILE ERROR\n" + io.toString()); } //END IO catch() //CLEAR TEXT FIELDS numberField.setText(""); nameField.setText(""); gpaField.setText(""); }//writeStudentRecord Stap4: Sluiten van de verbinding naamConnection.close(); 24