[Java] Databse connectie checken geeft in

Pagina: 1
Acties:

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ik probeer een klein tooltje te maken waarmee ik kan checken of er verbinding is met de server. Eigenlijk vrij onschuldig en simpel, loop alleen tegen een probleem aan, dat de verbinding niet static is.

Hoe kan ik dit oplossen. Ik las iets over static weglaten, maar dat lukt niet. Ik zei al, erg simpel alleen lukt het niet.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.sql.Connection;

public class test
{
  private Connection verbinding;
  //private String connURL = "jdbc.mysql.//localhost/oef:";
  //private String user = "user=root, password=";
    String antwoord;

  public static void main(String[] args)
    {
      LoadDriver alpha = new LoadDriver();
      verbinding = alpha.verbinden();
        String blaat = checkConnection(verbinding);
        System.out.println(blaat);
        //return;
    }

  //Controlle of er een connectie is
  public String checkConnection(Connection conn)
    {
        if(conn == null)
        {
          antwoord = "Geen connectie!";
      return antwoord;
        }
        else
        {
          antwoord = ("Verbonden...");
      return antwoord;
    }
    }
}


Error:

> Executing: C:\PROGRAM FILES\CONTEXT\ConExec.exe "C:\Program Files\j2sdk1.4.2_05\bin\javac.exe" "F:\Bar\Test\test\Dialog\Application\test.java"

F:\Bar\Java\Test\test\Dialog\Application\test.java:13: non-static variable verbinding cannot be referenced from a static context
verbinding = alpha.verbinden();
^
F:\Bar\Java\Test\test\Dialog\Application\test.java:14: non-static variable verbinding cannot be referenced from a static context
String blaat = checkConnection(verbinding);
^
F:\Bar\Java\Test\test\Dialog\Application\test.java:14: non-static method checkConnection(java.sql.Connection) cannot be referenced from a static context
String blaat = checkConnection(verbinding);
^
3 errors
> Execution finished.

  • Plecky
  • Registratie: Januari 2004
  • Niet online
Zoals de foutmelding al zegt, je probeert niet-static dingen (methodes, variabelen) aan te roepen vanuit een static context, nl je static main functie.
Dit kan niet, je moet eerst een instantie van het object aanmaken in je main(). In de constructor zet je de zooi die nu in je main() staat.

Zoiets bijvoorbeeld:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) {
     Test test = new Test();
     System.out.println(test.checkConnection());
}

Test() {
     alpha = new LoadDriver(); // Deze wel even als globale variable declareren.
}

public String checkConnection() { 
    if(alpha.verbinden() == null) { 
        return "Geen connectie!"; 
    } else { 
        return "Verbonden..."; 
    } 
}

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
F:\Bar\Java\Test\test\Dialog\Application\test.java:15: invalid method declaration; return type required

Dat is wat ik krijg, ik heb de betreffende variabele als global gedefinieerd. Tenminste neem ik aan dat je alleen alpha als dusdanig bedoelde.

Java:
1
2
3
4
5
public class test
{
  private Connection verbinding;
    String antwoord;
  LoadDriver alpha;

[ Voor 3% gewijzigd door BSeB op 12-10-2004 14:33 ]


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
In een statische methode kan je alleen statische objecten/methodes gebruiken of lokale. Dus laat private Verbinding verbinding weg en declareer hem in de main() functie en 't werkt.

De testverbinding methode dients natuurlijk ook statisch te wezen anders moet je eerst een instantie van de klasse Test maken.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Gert schreef op 12 oktober 2004 @ 13:48:
In een statische methode kan je alleen statische objecten/methodes gebruiken of lokale. Dus laat private Verbinding verbinding weg en declareer hem in de main() functie en 't werkt.

De testverbinding methode dients natuurlijk ook statisch te wezen anders moet je eerst een instantie van de klasse Test maken.
Ik heb die Private niet meer nodig aangezien ik het programmatje had veranderd naar model van bovenstaande poster. Maar dan werkt het dus nog steeds niet.

Ik snap overigens dat ik variabele ook wle dynamische data probeer te vangen in een statische functie. En dat dit omgebouwd dient te worden. Maar de error die ik nu dus heb bestaat eruit dat hij niet weet wat hij moet returnen, Dus of mijn global is verkeerd, of iets anders doe ik fout.

  • Plecky
  • Registratie: Januari 2004
  • Niet online
Ja, dat bedoelde ik idd.
Maar wat staat er op regel 15 waar de compiler zeurt om een returntype?

Ik heb overigens aangenomen dat je klasse Test heet ipv test, klassenamen worden meestal met een hoofdletter geschreven.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.sql.Connection;

public class Verbingstest
{
    String antwoord;
  LoadDriver alpha;


  public static void main(String[] args)
    {
      //Test test = new Test();
    System.out.println(test.checkConnection());
    }
  
    Test()
    {
    alpha = new LoadDriver(); // Deze wel even als globale variable declareren.
    }

  //Controlle of er een connectie is
  public String checkConnection(Connection conn)
    {
        if(alpha.verbinden() == null)
        {
          antwoord = "Geen connectie!";
      return antwoord;
        }
        else
        {
          antwoord = ("Verbonden...");
      return antwoord;
    }
    }
}


Dit is het hele stukkie, Maar hij hangt dus op het gedeelte waarin je Test() aanroept

  • momania
  • Registratie: Mei 2000
  • Laatst online: 21-05 06:42

momania

iPhone 30! Bam!

BSeB schreef op 12 oktober 2004 @ 13:40:
F:\Bar\Java\Test\test\Dialog\Application\test.java:15: invalid method declaration; return type required

Dat is wat ik krijg, ik heb de betreffende variabele als global gedefinieerd. Tenminste neem ik aan dat je alleen alpha als dusdanig bedoelde.

Java:
1
2
3
4
5
public class test
{
  private Connection verbinding;
    String antwoord;
  LoadDriver alpha;
Je hebt nu een class test, maar je constructor heet Test

Dus wordt je method die bedoeld is als contructor nu gezien als gewone method en dan wordt er een return type verwacht.

Je moet je class gewoon via de normale naamgeving Test noemen, en daarna denk ik even een boekje over java erbij pakken en dan met name het stukje 'leren compiler errors snappen'

Neem je whisky mee, is het te weinig... *zucht*


  • Plecky
  • Registratie: Januari 2004
  • Niet online
Je klassenaam is nog steeds niet goed (afgezien van de tikfout), deze moet hetzelfde zijn als de contructor, in dit geval Test.

Zie http://java.sun.com/docs/.../javaOO/constructors.html

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Daarnaast moet het bestand de naam van de public class hebben, dus VerbindingsTest.java.
En de constructor heeft altijd de naam van de klasse.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ik snap nu het idee achter constructors wel en krijg het ook werkend zolang het niet gebruikt maakt van globals. Nu wil ik wle globals gebruiken. Dit is overigens een simpel voorbeeldje, want als ik dit snap, dan kan ik dat ook toepassen met die database test.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class TestConstructor
{
  int n;

    public static void main (String args[])
    {
        Object clazz= new TestConstructor();

        //System.out.println(clazz.n);
  }
  
  TestConstructor()
    {
      //n=23;
        System.out.println("SubClassMetConstructor");
  }
}


En deze code werkt dus niet. Hij blijft hangen op mijn global geloof ik. Overigens werkt de bovenstaande versie wle zonder global, dit betekend dat het alleen aan die int n ligt.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class TestConstructor
{
  int n;

    public static void main (String args[])
    {
        Object clazz= new TestConstructor();

        System.out.println(clazz.n);
  }
  
  TestConstructor()
    {
      n=23;
        //System.out.println("SubClassMetConstructor");
  }
}


Ik heb de handleidingen al gelezen. Ook heb ik op GoT veel gelezen. Maar kan niet vinden hoe dit op te lossen.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
BSeB schreef op 13 oktober 2004 @ 09:07:
Java:
1
        Object clazz= new TestConstructor();
Zie jij hier dat Object een variabele n heeft welke publiek beschikbaar is? Welke classe heeft dat wel? Waarom zeg je dan niet tegen de compiler dat 'clazz' van dat type is?

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Dit is topic 7 van Saiya_Jin_Vegeta waarin hem gevraagd wordt om eerst eens een boek over Java open te slaan 8)7

"Beauty is the ultimate defence against complexity." David Gelernter


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ik wil niet vervelend zjin, maar ik heb allang een boek over Java opengeslagen

Java Elements
Principles of Programming in Java
Duane A. Bailey
Duane W. Bailey

ISBN:0-07-116353-0
www.mhhe.com

En natuurlijk de verschillende tuts op Javanet. En op gathering. Ik nam aan dat als je een vraag hebt je hem in ieder geval kon stellen. Als ik er niks voor zou willen doen zou ik wel vragen goh, wie kan er voor mij deze code goed zetten.

[ Voor 38% gewijzigd door BSeB op 13-10-2004 09:37 ]


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Dat boek van Bailey is het meest brakke Java boek dat er op de markt is.

"Beauty is the ultimate defence against complexity." David Gelernter


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Hmz, ok, dat is de eerste keer dat ik dat hoor :( dus ben ik niet blij mee. Maar als jij me een goed boek/boeken kunt aanraden, dan zal ik die binnenkort is gaan kopen.

Ik vind het erg interesant om bezig in Java te zijn alleen sommige dingen ontbreken me gewoon en ik lees erg veel erover, maar niet alle antwoorden zijn zo snel gevonden.

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Java elements wordt hier gebruikt voor studenten die dan in 1 kwartaal een klein beetje Java moeten leren. Het viel me alleen op dat van de aantal stukjes die ik erin heb gelezen er al een aantal dingen stonden die niet zo inteligent waren.

Verder:
Java heeft geen 'globals', je hebt alleen fields. Dat zijn die variabelen die niet in een methode staan. Als zo'n variabele (of methode) static is, dan hoort hij niet bij object instanties maar bij de klasse. Alle objecten delen dan 1 instantie van die variabele.
Bijvoorbeeld je hebt de klasse Test met 2 variabelen:
int teller = 0;
static int staticTeller = 0;
Beide variabelen zijn berijkbaar vanuit alle methoden in de klasse Test, maar als je in een static methode zit dan kan je niet bij teller.
Als je de klasse Test hebt geinstantieerd onder de naam testObj door te doen: Test testObj = new Test(); Dan kan je bij de variabelen op zo'n manier:
Test.staticTeller = 4; // merk op dat je de klasse naam gebruikt
testObj.teller = 2;
Ofdat je dit kan doen hangt af van waar je code staat. Staat deze code zelf in de klasse Test dan kan dit altijd. Ben je er buiten dan hangt dat af de 'access-modifiers'. Deze kunnen public, private en protected zijn. Als je niks opgeeft dan zijn ze protected.

De main methode is altijd static. Dat betekend dat je niet zomaar bij de niet static variabelen kan komen zonder dat je het object waarin je main() staat hebt aangemaakt.

Eigenlijk heb ik alleen maar herhaalt wat er al is gezegd.

PS. Ik heb de beginselen van Java geleerd uit 2 dictaten een aantal jaren terug en veel zelf proberen. Ook leren lezen wat de compiler me probeert te vertelen helpt vaak.

[ Voor 7% gewijzigd door Macros op 13-10-2004 10:08 ]

"Beauty is the ultimate defence against complexity." David Gelernter


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
BSeB schreef op 13 oktober 2004 @ 09:51:
Hmz, ok, dat is de eerste keer dat ik dat hoor :( dus ben ik niet blij mee. Maar als jij me een goed boek/boeken kunt aanraden, dan zal ik die binnenkort is gaan kopen.

Ik vind het erg interesant om bezig in Java te zijn alleen sommige dingen ontbreken me gewoon en ik lees erg veel erover, maar niet alle antwoorden zijn zo snel gevonden.
Niet kopen als het ook gratis kan ;) Hier op de UU zijn we erg trots op ons dictaat imperatief programmeren. Hier te krijgen: http://www.cs.uu.nl/docs/vakken/imp/literatuur.html

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
David Flanagan, Java in a nutshell, a desktop quick reference, 4rd edition, uitgeverij O'Reilly
en eventueel ook het aparte deel over de Java Foundation Classes

Zijn deze 2 boeken dan ook een aanrader? Ben nu overigens die pdf aan het binnenhalen. Ben benieuwd

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:40

Robtimus

me Robtimus no like you

Ik ben, als toch redelijk ervaren Java programmeur, die eerste aan het lezen (2nd edition, dus maar tot Java 1.1), gewoon uit verveling ;)
Daar heb je denk ik wel wat aan, zeker als je al programmeerervaring hebt. Let er wel op dat ze regelmatig vergelijkingen met C en C++ maken, al kun je ook zonder kennis van die talen vrij goed meekomen in hoofdstuk 3 denk ik (verder ben ik nog niet).

Het enige nadeel is dat het af en toe vrij beknopt is, dus ik weet niet hoe een relatieve beginneling dat deel begrijpt.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik wil niet al te harde kritiek uiten op de topicstarter, maar wel wat tips meegeven, want je begrip van OO is wat aan de lage kant.

De eerste principes die je moet kennen en begrijpen is wat een class is en wat een object is. En vooral belangrijk is het verschil hiertussen. Als je dat namelijk begrijpt is het verschil tussen static en non-static namelijk veel beter te begrijpen.

Ook belangrijk om te begrijpen is hoe inheritance werkt, iets wat binnen OO veelvuldig wordt gebruikt.

Dus ik zou naast je boeken over Java ook eens een boek over OO programmeren erbij pakken en die eerst eens gaan lezen. Er zal je dan een boel duidelijk worden.

En als je dat OO-"geneuzel" niet wilt, schakel dan over naar een andere programmeertaal. 3e generatie talen als C en Pascal of eventueel Visual Basic zijn dan beter geschikt.

  • Plecky
  • Registratie: Januari 2004
  • Niet online
De Java tutorials van Sun zijn ook best te doen hoor en leren je in ieder geval basale dingen als objecten instantieren.

Om terug te komen op je vraag,
Java:
1
2
Object clazz= new TestConstructor();
System.out.println(clazz.n);

werkt niet omdat een object van type Object (want zo declareer jij clazz) geen zichtbare variable n heeft.

Dit:
Java:
1
2
TestConstructor clazz= new TestConstructor();
System.out.println(clazz.n);

zou moeten werken, en nu hou ik op tot je tenminste deze tutorials doorleest en je naamgeving een beetje in de gaten houdt :)

[ Voor 2% gewijzigd door Plecky op 13-10-2004 13:45 . Reden: BB code coutje ]


  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 01-05 18:22

jAnO!

lalalavanillevla

BSeB schreef op 13 oktober 2004 @ 09:51:
Hmz, ok, dat is de eerste keer dat ik dat hoor :( dus ben ik niet blij mee. Maar als jij me een goed boek/boeken kunt aanraden, dan zal ik die binnenkort is gaan kopen.

Ik vind het erg interesant om bezig in Java te zijn alleen sommige dingen ontbreken me gewoon en ik lees erg veel erover, maar niet alle antwoorden zijn zo snel gevonden.
Volgens mij heb ik je vorige week al een boek aangeraden. nl Thinking in JAVA van Eckel. Vooral de bijgeleverde cd is geweldig, want daarop staan van de eerste 8 hoofdstukken presentaties met mp3 commentaar. Daarin wordt precies uitgelegd waarmee jij nu aan het worstelen bent... nl. de basis.

Wat is een object? ALLES IS EEN OBJECT!!! (nou ja, niet alles maar dat verteld ie ook wel)

De basics staan ook geweldig duidelijk in het certificeringsboek van Bates en Sierra, maar dat is dus gericht op certificering.

check www.javaranch.com

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

In SmallTalk is wel alles een object, maar daar explodeert mijn brein ook wel eens van ;)

"Beauty is the ultimate defence against complexity." David Gelernter

Pagina: 1