webForumDet fria alternativet

Mysql igen!?

11 svar · 355 visningar · startad av Sunix

SunixMedlem sedan juli 2004310 inlägg
#1

Tja!

Jo, jag försöker koppla en applet till en MySQL DB.
Appleten ligger på samma dator som MySQL databasen.
Och jag undrar om man inte kan använda denna kod ->

 try{
        Class.forName("org.gjt.mm.mysql.Driver").newInstance();
        Connection Conn = DriverManager.getConnection("jdbc:mysql:///databas?user=anv&password=ujujujuj");
        PreparedStatement Stmt = null;
        } catch (ClassNotFoundException cnfe)
        {
            System.err.println(cnfe.toString());
        }
ViktorMedlem sedan aug. 20021 752 inlägg
#2

Du har glömt adressen till servern där databasen finns, altså samma adress som till sidan där appleten finns och det är även ett / för mycket

Connection Conn = DriverManager.getConnection("jdbc:mysql://**URL_TO_DATABASE/**databas?user=anv&password=ujujujuj");

/Viktor

SunixMedlem sedan juli 2004310 inlägg
#3

jag känner mig himla tjatig och jobbig på detta forum!!

Men-

Jag får dessa fel:

applt.java [10:1] unreported exception java.lang.InstantiationException; must be caught or declared to be thrown
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
^
applt.java [11:1] unreported exception java.sql.SQLException; must be caught or declared to be thrown
Connection Conn = DriverManager.getConnection("jdbc:mysql://10.0.1.137/steget?user=anv&password=ujujujuj");
^
2 errors
Errors compiling applt.

Adressen till sidan är: 10.0.1.137/JavaApplet/applt.html

applt.java [11:1] unreported exception java.lang.InstantiationException; must be caught or declared to be thrown
        Class.forName("org.gjt.mm.mysql.Driver").newInstance();
                                                            ^
applt.java [12:1] unreported exception java.sql.SQLException; must be caught or declared to be thrown
        Connection Conn = DriverManager.getConnection("jdbc:mysql://url/steget?user=steget&password=ujujujuj");
                                                     ^
2 errors
Errors compiling applt.

Måste jag ha 3 try-satser

PhorpherMedlem sedan feb. 20002 300 inlägg
#4

Kompilatorn säger att du har glömt bort att fånga (catch) upp två olika exceptions. Dessa är InstantiationException och SQLException.
Just nu fångar du bara upp ClassNotFoundException och det räcker inte. Vill du ha samma beteende oavsett vad som går fel (dvs. vilket exception som kastas) så kan du byta ut din:

catch (ClassNotFoundException cnfe) // Fånga enbart upp ClassNotFoundException
...

mot

catch (Exception e) // Fånga upp alla exceptions!
...

Vill du däremot hantera felen på olika sätt så får du rada upp flera catch-satser efter varandra där du hanterar dem en efter en.

SunixMedlem sedan juli 2004310 inlägg
#5

Jippiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii:)

Tack!

ps. kommer säkert fler frågor!!!! ds.

SunixMedlem sedan juli 2004310 inlägg
#6

Nehep! jag måste erkänna att jag inte har en aaaning om vad jag håller på med !!! (Antagligen tydligt för alla).

Här kommer lite kod om nån skulle vilja hjälpa mig.


import java.sql.*;
import java.awt.*;
import java.applet.*;

public class applt extends java.applet.Applet 
{

    public void init() {
        setBackground(Color.WHITE);
    }
    
    public void paint(Graphics page)
    {
        Conn c = new Conn();
        String a = c.conis("Select * from stkl");
        page.setColor(Color.BLUE);
        page.drawString(a, 25,25);
    }
}

class Conn
{
        private String url;
        private String t;
        
        public Conn()
        {
            url = "10.0.1.137";
            t = null;
        }
        
        public String conis(String sql)
        {
            try{
                Class.forName("org.gjt.mm.mysql.Driver").newInstance();
                Connection Conn = DriverManager.getConnection("jdbc:mysql://url/steget?user=steget&password=ujujujuj");
                PreparedStatement Stmt = null;
            
                Stmt =  Conn.prepareStatement(sql);
                ResultSet rslt1 = Stmt.executeQuery();
        
                while(rslt1.next())
                {
                    t = rslt1.getString("STKLBEN");
                }
            } catch (Exception e){}
            
            return t;
        }
}

Nåt borde väl skrivas ut ??

ViktorMedlem sedan aug. 20021 752 inlägg
#7

Skriv ALLTID ut felmedelandena som kommer, hoppa inte över det.

catch(Exception e)
{
	e.printStackTrace(System.err);
}

Om du hoppar över att skriva ut felmedelandena så blir det grymt svårt att hitta fel när de uppstår. Lägg till koden ovan i ditt catch block och kör sedan din applet igen och välj sedan "Tools"->"Sun Java Console" från menyerna i Internet Explorer. Om du kör Mozilla så finns det något Java Debug alternativ i någon meny. När du fått fram det fönstret så borde du hitta något fel medelande där.

/Viktor

SunixMedlem sedan juli 2004310 inlägg
#8

hmm, allt är fel!!

Den här koden funkar för mig i en jspfil.
Då kommer jag åt MySQL.
MySQL.jar finns i \jre\lib\ext (Drivrutin för MySQL)

Här kommer felmeddelandet:

java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver

at sun.applet.AppletClassLoader.findClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at sun.applet.AppletClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClassInternal(Unknown Source)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Unknown Source)

at Conn.conis(applt.java:35)

at applt.paint(applt.java:15)

at sun.awt.RepaintArea.paint(Unknown Source)

at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

Caused by: java.io.IOException: open HTTP connection failed.

at sun.applet.AppletClassLoader.getBytes(Unknown Source)

at sun.applet.AppletClassLoader.access$100(Unknown Source)

at sun.applet.AppletClassLoader$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

... 20 more

java.lang.NullPointerException: string is null

at sun.java2d.SunGraphics2D.drawString(Unknown Source)

at applt.paint(applt.java:17)

at sun.awt.RepaintArea.paint(Unknown Source)

at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver

at sun.applet.AppletClassLoader.findClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at sun.applet.AppletClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClassInternal(Unknown Source)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Unknown Source)

at Conn.conis(applt.java:35)

at applt.paint(applt.java:15)

at sun.awt.RepaintArea.paint(Unknown Source)

at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

Caused by: java.io.IOException: open HTTP connection failed.

at sun.applet.AppletClassLoader.getBytes(Unknown Source)

at sun.applet.AppletClassLoader.access$100(Unknown Source)

at sun.applet.AppletClassLoader$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

... 20 more

java.lang.NullPointerException: string is null

at sun.java2d.SunGraphics2D.drawString(Unknown Source)

at applt.paint(applt.java:17)

at sun.awt.RepaintArea.paint(Unknown Source)

at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

Suck! att allt ska va så krångligt!
Appleten hittar inte classen org.gjt.mm.mysql.Driver och en massa annat. Kan man inte använda samma saker i en applet som i en jspfil eller servlet ?

ViktorMedlem sedan aug. 20021 752 inlägg
#9

Ok, jag tror problemet är att mysql ligger i din ext katalog för din JRE som används för program, inte den som används för applets i din browser, kolla om du har två eller fler JRE kataloger (Java installationer) och se till att den ligger i alla.

Problem kommer det dock bli om någon som inte har mysql försöker använda din applet, det kan lösas på två sätt, ett bra och ett dåligt :)

Dåligt sätt, se till så att mysql alltid laddas ner med ditt program. Om du kör med JAR filer så packar du upp mysql och sedan packar ner alla filer och kataloger med ditt egna program i en stor JAR fil som du sedan använder som vanligt.
Om du inte kör med JAR filer så packar du upp mysql filen i samma katalog där du har din applet (i din codebase) så kommer den att laddas ner vid behov. Du kan packa upp JAR filer med WinZip.

Bra sätt, använd inte SQL i din applet. Skapa en server applikation som alltid körs på servern och som sköter all databas kontakt. Kontakten mellan servern och appleten sker genom Sockets. Om du kör SQL i din Applet så kan vem som hellst ta reda på ditt lösenord och användarnamn för din databas genom att dekompilera din applet.

/Viktor

SunixMedlem sedan juli 2004310 inlägg
#10

Men kan en som surfar till en sida på min webbserver köra appleten i sin IE och koppla upp och hämta data från min MySQL-DBserver ?

Det enda felet jag har kvar är detta:

java.sql.SQLException: Unable to connect to any hosts due to exception: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3306 connect,resolve)

at com.mysql.jdbc.Connection.createNewIO(Connection.java:1622)

at com.mysql.jdbc.Connection.\<init\>(Connection.java:491)

at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346)

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at Conn.conis(applt.java:36)

at applt.paint(applt.java:15)

at sun.awt.RepaintArea.paint(Unknown Source)

at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

java.sql.SQLException: Unable to connect to any hosts due to exception: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3306 connect,resolve)

at com.mysql.jdbc.Connection.createNewIO(Connection.java:1622)

at com.mysql.jdbc.Connection.\<init\>(Connection.java:491)

at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346)

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at Conn.conis(applt.java:36)

at applt.paint(applt.java:15)

at sun.awt.RepaintArea.paint(Unknown Source)

at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

Rättighet att ansluta till min MySQL-server

ViktorMedlem sedan aug. 20021 752 inlägg
#11

Prova att ansluta med localhost istället för IP adressen.

/Viktor

SunixMedlem sedan juli 2004310 inlägg
#12

Ja jag har gjort det. Både 127.0.0.1 och 10.0.1.137 och localhost Allt möjligt.
Men jag tror jag ger upp det här :( jag har läst att det finns en policyfil som stoppar som jag har försökt att ändra men det funkar inte i alla fall. Så nu tar jag en kall öl och läser en bok istället!

Tack för allt!

140 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)