Toon posts:

Java: connectie naar MSSQL via ODBC

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik krijg een access fout. Op het moment dat ik deze code uitvoere in eclipse, werkt het. Maar op het moment dat ik deze als stand a-lone wil gaan draaien, krijg ik deze foutmelding:

"Got an exception
access denied (java.lang.RuntimePermission accessClassInPackage.sun.jdbc.odbc.In
tracom)"


Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Wacht w = new Wacht();
    String url = "jdbc:odbc:[i]ODBCNaam[/i]";
    Connection conn = DriverManager.getConnection(url,w.Naam(),w.Wachtwoord());

    Statement stmt = conn.createStatement();
    ResultSet rs;

    rs = stmt.executeQuery("select u.companyid,c.companyname,u.userid,u.username from users u inner join company c on c.companyid = u.companyid where u.companyid like '%" + cid + "%' order by u.username");

    while (rs.next()){
        cld = cld + rs.getString(1);
        cld = cld + " - " + rs.getString(2);
                    cld = cld + " Userid: " + rs.getString(3);
        cld = cld + " - " + rs.getString(4)+ "\n";
    }
    informatie.setText(cld + "Einde resultaat");
    cld = "";
    conn.close();
}


Hebben jullie enige idee waarom dit is? Is het mogelijk om hard het MS-SQL adres in te voeren.
Alvast bedankt.

[ Voor 0% gewijzigd door RobIII op 22-03-2007 18:35 . Reden: Code tags gefixed ]


Verwijderd

Ik zou even naar hibernate kijken www.hibernate.org, want dan hoef je nog weinig zorgen te maken hoe je sql statements werkend hoeft te krijgen, want de tabellen in je database kunnen dan direct worden gemapped naar je objecten.

Verwijderd

Topicstarter
Ik ga kijken

  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
Verwijderd schreef op donderdag 22 maart 2007 @ 16:40:
Ik zou even naar hibernate kijken www.hibernate.org, want dan hoef je nog weinig zorgen te maken hoe je sql statements werkend hoeft te krijgen, want de tabellen in je database kunnen dan direct worden gemapped naar je objecten.
Als hij zelfs al niet even een simpele ODBC aan de gang krijgt raad jij meteen een o/r mapper aan? Lijkt me een beetje onlogisch.

@ts, draai je dat als applet soms?

[ Voor 3% gewijzigd door Y0ur1 op 22-03-2007 16:48 ]


Verwijderd

Topicstarter
Klopt, ik draai em als Applet.

Als ik deze vanuit eclipse draait ie als een zonnetje, maar standalone doet komt ie met de melding.

  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
Verwijderd schreef op donderdag 22 maart 2007 @ 16:52:
Klopt, ik draai em als Applet.

Als ik deze vanuit eclipse draait ie als een zonnetje, maar standalone doet komt ie met de melding.
Dan zul je even moeten kijken naar je permissies en je policy files... Je applet draait in een sandbox en mag standaard bijna niks.

Verwijderd

Topicstarter
Verwijderd schreef op donderdag 22 maart 2007 @ 16:40:
Ik zou even naar hibernate kijken www.hibernate.org, want dan hoef je nog weinig zorgen te maken hoe je sql statements werkend hoeft te krijgen, want de tabellen in je database kunnen dan direct worden gemapped naar je objecten.
Volgens mij is dit ook wat. Ik ga em morgen proberen.

Alvast bedankt voor jullie antwoorden.

  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
Verwijderd schreef op donderdag 22 maart 2007 @ 16:55:
[...]


Volgens mij is dit ook wat. Ik ga em morgen proberen.

Alvast bedankt voor jullie antwoorden.
Is zeker wat, maar voor simpele dingen wil je echt geen o/r mapper gaan gebruiken, vooral niet als je er nog nooit mee hebt gewerkt.

Verwijderd

Wat betreft applets: deze kunnen alleen maar verbinding maken naar de plek waar ze vandaan komen. Als je ze draait op je eigen machine, kunnen ze alleen verbinding maken naar Localhost, je eigen pc dus. Als je ze daarna op een website zet, kunnen ze ook alleen verbinding maken naar localhost, maar dan is localhost niet meer je eigen pc, maar de webserver waar de applet op draait.

Als ik jou was, zou ik Hibernate even laten zitten tot je iets meer gevorderd bent in Java.

Tot die tijd zou ik ook even nadenken of je misschien wat tijd wilt besteden aan het scheiden van verantwoordelijkheden. Google eens op MVC (Model View Controller), of in het geval van Swing/Applets, MVP (Model View Presenter). Daarnaast is het (o.a. voor jezelf) wellicht handiger om iets logischere namen te gebruiken voor je objecten.
Ik heb nog nooit van een Wacht gehoord, maar ik doe het wel eens als ik bij de bushalte sta. Daar heb ik echter geen username noch een wachtwoord voor nodig ;)

Sorry dat ik een beetje flauw bent, maar je snapt vast waar ik heen wilt: Wellicht is het handiger om namen te kiezen die iets beter de lading dekken, zoals Gebruiker, aangezien een gebruiker vaak wel een naam en wachtwoord hebben. Dit geld voor je objectnamen (Wacht), maar ook voor je variabelen (w, cId, u). Er is niets mis mee om een variabele 'wachtwoord' te hebben.

Ik hoop dat je hier iets mee kunt. Succes in ieder geval!

[ Voor 15% gewijzigd door Verwijderd op 22-03-2007 17:13 ]


Verwijderd

Nog een andere tip om je code leesbaar te houden ( en het kan zijn dat je dat hier beust weg hebt gelaten): Commentaar!

Gebruik commentaar, beschrijf wat je objecten inhouden, beschrijf wat je doet. Zeker als je hier post is het voor ons makkelijker en als je later nog eens terugkijkt weet je ook wat het allemaal gedaan heeft.

Dat hibernate lijkt mij helemaal niks en is volgens mij verdomd onveilig en verhinderd daarnaast de interoperabiliteit. Maar ik heb er nooit gebruik van gemaakt... puur gebaseerd op de beschijving van de poster.

Wat betreft je probleem: is inderdaad waarschijnlijk een probleem met het feit dat applets erg beperkte rechten hebben.

  • Janoz
  • Registratie: Oktober 2000
  • Nu online

Janoz

Moderator Devschuur®

!litemod

Kan ik hieruit opmaken dat je een applet aan het maken bent die een database verbinding opzet? Dat je dus eigenlijk een website hebt waarop je een applet plaatst die met de database communiseerd? In dat geval heb ik twee woorden voor je:

niet doen

De structuur die je op dat moment gebruikt zorgt ervoor dat je je database compleet voor de buitenwereld open moet zetten (anders kan het applet er niet bij) en je deelt vervolgens ook nog inlogcredentials uit (deze zitten immers in de source van het applet).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • ReverendBizarre
  • Registratie: December 2001
  • Laatst online: 24-03-2021
Zoals een aantal mensen al hebben gemeld mag je met een applet geen verbindingen leggen met hosts anders dan de host waar de applet vandaan gedownload is. Als je hier omheen wilt zal je je applet moeten signen. De gebruiker zal dan moeten aangeven of hij de applet vertrouwt of niet en alleen als daar ja op is geantwoord mag de applet externe connecties maken en het bestandssysteem aanspreken en dat soort dingen. Hier is wat info to vinden over hoe je dat kan doen:

http://java.sun.com/devel...Articles/Security/Signed/

  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
CAIRATH schreef op donderdag 22 maart 2007 @ 17:28:
Zoals een aantal mensen al hebben gemeld mag je met een applet geen verbindingen leggen met hosts anders dan de host waar de applet vandaan gedownload is. Als je hier omheen wilt zal je je applet moeten signen. De gebruiker zal dan moeten aangeven of hij de applet vertrouwt of niet en alleen als daar ja op is geantwoord mag de applet externe connecties maken en het bestandssysteem aanspreken en dat soort dingen. Hier is wat info to vinden over hoe je dat kan doen:

http://java.sun.com/devel...Articles/Security/Signed/
Of dus op de betreffende computer een policy file aanmaken voor dat domein

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 01-12 19:51

Robtimus

me Robtimus no like you

Verwijderd schreef op donderdag 22 maart 2007 @ 16:36:
Is het mogelijk om hard het MS-SQL adres in te voeren.
Dan moet je van microsoft.com de JDBC drivers downloaden. Vervolgens maak je met de volgende code een connectie aan:

SQL Server 2000 driver (werkt ook met SQL Server 7 en 2005):
Java:
1
2
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection c = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port;DatabaseName=db", "user", "pass");


SQL Server 2005 driver (werkt ook met SQL Server 2000):
Java:
1
2
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection c = DriverManager.getConnection("jdbc:sqlserver://host:port;DatabaseName=db", "user", "pass");

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


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 09:47
Hier zijn type vier JDBC drivers te vinden, je weet zelf wel of je 2000 of 2005 draait:
http://msdn.microsoft.com/data/jdbc/

Mijn tip, gebruik die ODBC bridge NIET als je het kan voorkomen. Het is buggy, langzaam en irritant om te configureren.

En zoals al gemeld. Ik hoop voor je dat dit een intranet applicatie is. Want anders heb je zo duistervolk in je database draaien en als ze daar zijn, dan is het een eitje om de hele server over te nemen.

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 01-12 19:51

Robtimus

me Robtimus no like you

The - DDD schreef op donderdag 22 maart 2007 @ 22:43:
Mijn tip, gebruik die ODBC bridge NIET als je het kan voorkomen. Het is buggy, langzaam en irritant om te configureren.
offtopic:
Inderdaad. Ooit eens een linked server naar een Oracle DB moeten maken. Omdat we tot die tijd altijd al werkten met een Oracle ODBC connectie dacht ik die te gebruiken. Resultaat: alle nummers werden 0 in de result sets...
Daarna maar een linked server direct naar de Oracle machine gemaakt en het probleem was weg.

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


Verwijderd

Topicstarter
Jullie allemaal heel erg bedankt voor jullie opmerkingen en commentaar.
Ik ben nog redelijk een newbie wat java(programmeren) betreft, ;) en ik waardeer het dat jullie tijd in mijn vraag hebben gestoken. _/-\o_ _/-\o_

ps. Het betreft idd een intranet applet.... :)

[ Voor 10% gewijzigd door Verwijderd op 23-03-2007 09:17 ]

Pagina: 1