Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Antwort
 
Themen-Optionen
Alt 11.11.2005, 16:38   Nach oben    #1
Zero83
Neuer Benutzer
 
Registriert seit: 07.10.2005
Beiträge: 23
Standard Datenbankverbindung mit JSP anders als Java??

hallo zusammen
...ich versuche gerade verzweifelt auf meine MySQL-Datenbank zu zugreifen.
Das frustrierende daran ist, das der selbe Code in einem Servlet wunderbar funktioniert!
Es handelt sich dabei um folgende Zeile:
Code:
con = DriverManager.getConnection("jdbc:mysql://localhost/spiele?user=root&password=");
...die erzeugt eine ArrayIndexOutOfBoundException im unten aufgeführten Programm!
Ich sitz den ganzen Tag schon vor dieser Zeile und hoffe es kann mir jemand einen Hinweis geben, bevor ich noch überschnappe...
Danke

...der Code
PHP-Code:
import java.sql.*;
import java.io.*;

public class 
sqltest
{

 public static 
void main(String[] args)
 {
  
Connection con=null;
  try {
   Class.
forName("com.mysql.jdbc.Driver").newInstance();
   
con DriverManager.getConnection("jdbc:mysql://localhost/spiele?user=root&password=");
   
System.out.println("Verbindung hergestellt");

  } catch (
Exception e) {
   
System.out.println("Fehler1"+e);
  }
  
finally {
   try {
    if(
con!=null) {
     
con.close();
    }
   } catch(
Exception e2) {
    
System.out.println("Fehler2"+e2);
   }
  }

 }

Zero83 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.11.2005, 18:32   Nach oben    #2
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Heeey *streichel*, sowas ist doch kein Problem.
Nicht die Flinte ins Korn werfen.
Scheint ein wenig anders zu sein als bei JSPs.

Das Problem scheint zu sein, dass du mit einem Programm auf den Port der Datenbank zugreifen musst.
Die Datenbank muss also auf jeden Fall extern erreichbar und auf einem Port geöffnet sein!

Das ganze sollte dann so aussehen (mySQL-Standart-Port

PHP-Code:
con DriverManager.getConnection("jdbc:mysql://localhost:3306/spiele","root",""); 
3306 = Der Port auf dem mySQL normalerweise von außen erreichbar ist.
spiele = deine Datenbank
root = dein Benutzer
"" = das Passwort für den Benutzer (in deinem Fall ja leer)

Aber vorsicht!
Es ist nicht gerade sinnvoll bei einer Datenbank die auf einem Port geöffnet ist einen root.-user ohne Passwort einzurichten!
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.11.2005, 19:50   Nach oben    #3
Zero83
Neuer Benutzer
 
Registriert seit: 07.10.2005
Beiträge: 23
Standard

Hey danke für die schnelle Antwort..
..leider hab ich das so schon erfolgslos versucht.

ich habe sogar mit netstat überprüft ob der service auch auf port 3306 läuft ...was er ja auch tut ..und übers servletmit und ohne portangabe super klappt.
..leider klappt es mit servlet-aufrufen aus applets nicht so ganz.
darum soll meine serverapplikation die Datenbankabfrage übernehmen.
Zero83 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.11.2005, 22:47   Nach oben    #4
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Dann gib mir mal bitte ein bisschen mehr infos.

1. Was genau ist es für ein Programm? (Applet / Applikatio)
2. Liegt die Datenbank auf dem selben Rechner?

Wie genau sieht dein Code jetzt aus mit der Änderung wie ich sie gesagt habe?
Was genau ist die Fehlermeldung? (Bitte in den catch-Block ein e.printStackTrace() einbauen und die Fehlermeldung hier posten.

Oh, und nimm mal bitte das .newInstance() hinter dem Class.forName heraus bitte.
Da gabs bei mir auch mal Probleme mit.
Sollte auch ohne problemlos funktionieren.

Danke
Sparrow
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2005, 12:34   Nach oben    #5
Zero83
Neuer Benutzer
 
Registriert seit: 07.10.2005
Beiträge: 23
Standard

1.
hmm also mal ganz abgesehen davon ...das ganze ist eine Art Spielserver bzw. ein Chat-Server, der auch das koordinierte ausstauschen von Steuerbefehlen für ein beliebiges Multiplayer Spiel übernimmt.
Das ganze ist im Entwicklungsstadium lauft alles lokal auf meinem Rechner.

Auf dem Server:
-von mir programmierte Java Server Application
-Tomcat
-MySQL-Server

Client:
-Applet
-HTML-Output

Das ganze soll ein abgeschlossenes Modul geben, so dass man ohne grossen Aufwand ein neues Spiel dazuprogrammieren kann.

Im Hauptchat/Treffpunkt-Applet sollte nun eine Spielauswahl rein, die ist in der Datenbank gespeichert. Möglichkeiten:
1. Parameterübergabe an Applets --> Problem viele Daten, keine Möglichkeit Arrays zu übergeben!?
2. Spiele über URL-Aufruf über ein Servlet laden --> klappt aber hohe Fehlerrate
3. SQL-Abfrage über Applet --> scheint mir zu problematisch

Darum bin ich auf die 4.Lösung gekommen das ganze von der Serverapplication übernehmen zu lassen.
ja also das ganze ist in jedem fall im Moment auf das unten aufgeführte Listing reduziert. Ausser du hättest grade noch eine 5.Lösung parat. Würde mich aber trotzdem interessieren wie man so ne SQL-Connection über "Java ohne ServerPages" macht.

2.
Ja der SQL-Server läuft auf der gleichen Maschine wie alles andere


Fehlermeldung:

java.sql.SQLException: Error during query: Unexpected Exception: java.lang.Array
IndexOutOfBoundsException message given: null
at com.mysql.jdbc.Connection.execSQL(Connection.java: 1913)
at com.mysql.jdbc.Connection.execSQL(Connection.java: 1842)
at com.mysql.jdbc.Statement.executeQuery(Statement.ja va:1064)
at com.mysql.jdbc.Connection.initializePropsFromServe r(Connection.java:979)
at com.mysql.jdbc.Connection.connectionInit(Connectio n.java:905)
at com.mysql.jdbc.Driver.connect(Driver.java:311)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at sqltest.main(sqltest.java:13)

Source:
PHP-Code:
import java.sql.*;
import java.io.*;

public class 
sqltest
{
 public static 
void main(String[] args)
 {
  
Connection con=null;
  try {
   Class.
forName("com.mysql.jdbc.Driver");
   
con DriverManager.getConnection("jdbc:mysql://localhost:3306/spiele","root","");
   
System.out.println("Verbindung hergestellt");
  } catch (
Exception e) {
   
e.printStackTrace();
  }
  
finally {
   try {
    if(
con!=null) {
     
con.close();
    }
   } catch(
Exception e2) {
    
System.out.println("Fehler2"+e2);
   }
  }
 }

Danke und Gruss
Zero83 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2005, 15:29   Nach oben    #6
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Also deine Lösung scheint schin in Ordnung.
Das Applet solle eigentlich die Applikation auf dem Server konnektieren können, solange das Applet vom selben Server geladen auf der auch die Applikation läuft.
Außerdem ist so der Sicherheitsaspekt gegeben.
Du kannst Abfragen vom Applet zur Applikation schicken, die Applikation führt dann die Abfrage der Datenbank durch und schickt das Ergebnis zurück.
Das hat den Vorteil, dass du der Firewall auf dem Rechner sagen kannst, dass der Port der Datenbank nur über den selben Rechner (also von deiner Applikation) erreichbar ist. Das ist auf jeden Fall die sicherste Lösung.

Die Datenbank direkt aus einem Applet anzusprechen halte ich eher für seeeeehr gefährlich.
ich habe bisher immer den selben Weg genommen wie du.
Irgendwo hier gibts auch einen Thread zu mir zu dem Thema Java->Datenbank->Sicherheit.

So, jetzt zu deinem aktuellen Problem.
Es scheint so als wäre nicht die Zeile mit der Connection das Problem, sondern irgendwo scheint es eine Abfrage zu geben. Die Fehlermeldung sagt ja deutlich "Exception during query" -> "Fehler während einer Abfrage"

Hier mal ein Beispielcode von mir wie eine Datenbank verbunden wird und eine Tabelle angelegt wird.
Ich hoffe der funktioniert bei dir.
Ich nehme hierfür einfach mal die Datenbank "test", die legt mySQL ja normalerweise direkt an. Wenn nicht ändere die Datenbank im Code oder leg eine entsprechende an.

Hier also der Code:
PHP-Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

// Beispielcode Anbinden eine mySQl Datenbank
// sparrow für JForum.de

// Dsingned in: > JDK 1.5.0_xx
// Needed Library: mysqlconnector-java > 3.2.0


public class Dabatest {

    public static 
void main(String[] args) {
        try {
            Class.
forName("com.mysql.jdbc.Driver");
            
Connection con DriverManager.getConnection("jdbc:mysql://localhost:3306/test""root""");
            
Statement stmnt con.createStatement();
            
stmnt.executeUpdate("CREATE TABLE sparrow (id INT, name VARCHAR(30));");
            
stmnt.executeUpdate("INSERT INTO sparrow (id, name) VALUES (1, 'Erster');");
            
stmnt.executeUpdate("INSERT INTO sparrow (id, name) VALUES (2, 'Zweiter');");
            
ResultSet rs stmnt.executeQuery("SELECT * FROM sparrow");
            
show(rs);
            
stmnt.executeUpdate("DROP TABLE sparrow");
            
stmnt.close();
            
con.close();
        } catch (
Exception e) {
            
e.printStackTrace();
        }
    }
    
    private static 
void show(ResultSet rsthrows SQLException {
        if (
rs.isBeforeFirst()) {
            
rs.next();
        }
        
System.out.println("ID\tNAME");
        while (!
rs.isAfterLast()) {
            
String out rs.getInt("id") +"\t" rs.getString("name");
            
System.out.println(out);
            
rs.next();
        }
    }


Der Code legt also die Tabelle sparrow an, fügt 2 Zeilen an, führt eine Abfrage aus, gibt diese auf dem Bildschirm aus und löscht anschließend die Tabelle wieder.

Wenn der Code bei dir geht, dann funktioniert deine SQL-Anbindung auch.
Vielleicht kommen wir so ja auf die Spur des Fehlers.
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.11.2005, 10:58   Nach oben    #7
Zero83
Neuer Benutzer
 
Registriert seit: 07.10.2005
Beiträge: 23
Standard

Hey Sparrow

..ich hab mich am Samstag entschlossen meinen Rechner mal kurz neu aufzusetzen ..ich meld mich dann ..wenn ich wieder soweit bin.

Mal kurz zum "Exception during query" ..ich dachte zuerst auch das hätte was mit der SQL-Abfrage zu tun ....bis ich dann Zeile für Zeile auskommentiert habe bis nur noch das unten aufgeführte sqltest.java übrigblieb.

Treiber laden geht übrigens ...wenn der nicht vorhanden ist meldet er:
"no suitable driver"

deinen code werde ich in ungefähr einer stunde testen ..wenn bei mir alles wieder installiert ist

Danke und Gruss
Zero83 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.11.2005, 12:35   Nach oben    #8
Zero83
Neuer Benutzer
 
Registriert seit: 07.10.2005
Beiträge: 23
Standard

*schäm* ..es funktioniert alles!!
auch die Fehlermeldungen sind nun gleich viel aussagender:
SQLException: Unknown database 'spiele'
...leider hab ich bei der Neuinstallation meine Datenbank gekippt!!
jedenfalls ...ich glaub jetzt funktioniert alles
..das ganze lag wahrscheinlich an der CLASSPATH-Variable des System.

Mein Tomcat hat wahrscheinlich auf ein anderes Klassenverzeichnis zugegriffen als das mit "java file" aufgerufene Programme.

Naja zumindest läuft jetzt nach der Neuinstallation meine Sound-Karte und mein DVD brenner wieder

Ist mir mir echt peinlich deine und meine Zeit für so Schnickschnack geopfert zu haben :rolleyes: ..tschuldigung

So aber mein Projekt neigt nun aber doch hoffentlich langsam dem Ende zu ..und mein Ausflug ins JavaLand somit vorerst auch ..zeit mich richtiger Arbeit zu widmen..ich such mir mal n'Job

aber ... :cool: ich komme wieder
evt. ...hab da an 3D-Zeugs gedacht ...OpenGL, DirectX oder so ...weist du vieleicht gerade wie's da mit der Performance aussieht ..in einem Applet
..oder denkst du es wäre besser auf eine Client-Applikation ..oder gar auf C++ oder sowas zurück zu greifen?

ja also danke jedenfalls nochmal
Gruss
Zero83 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.11.2005, 18:45   Nach oben    #9
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Was genau hast du denn vor?
Mit ein wenig mehr Infos würdest du mir da schon helfen.

Quatsch mich doch einfach mal im ICQ an.
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Developers-guide.net Projekt sucht willige Java Programmierer beny_mcde Projekte unserer Mitglieder 11 10.08.2006 13:03
Oracle-DB-Zugriff via JSP macht Probleme bene23 Enterprise Java 4 08.11.2005 14:37
[BUCH] Java ist auch eine Insel kampet Literatur 5 22.02.2005 14:40
Zwist um Java als Open Source kampet Nachrichten 0 05.07.2004 03:37


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:46 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

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 35 36 37 38 39 40 41 42 43 44