Samenvatting Java

advertisement
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
Download