DB anbindung + auslesen

JumpFrog

Mitglied
hey leute,

ich hasse es alleine stehen gelassen zu werden und dann einem noch aufgezwungen wird mit spezieller Software zu arbeiten. Naja ok...

also wie müssen den Microsoft SQLServer nutzen:mad: darin befinden, dank der super tollen Import funktion, die Tabellen die gebracht werden und nun sollen wir ein JAVA programm schreiben um auf all die Tabellen + inhalte zuzugreifen.

zunächst mal der einfache quelltext:

Code:
public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		Connection con = null;
		try {
			con = DriverManager.getConnection(
					"jdbc:sqlserver://<url>:1234",
					"sa", "sa");
			Statement stmt = con.createStatement();

			ResultSet rs = stmt.executeQuery("SELECT * FROM Time");

			while (rs.next()) {
				System.out.printf("%s,%s %s%n", rs.getString(1));
			}
			rs.close();
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			if (con != null)
				try {
					con.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
		}
	}

Mit hilfe von Squirrl kann ich ohne Probleme auf die Datenbank namens Stundenplan zugreifen und die tabellen manipulieren. Somit sollte es kein rechtliches Problem sein. Eher etwas im Quellcode. Nur leider weiß ich nicht was, da jeder etwas anderes schreibt...

Und zu guter letzt noch Die Fehlermeldung:

com.microsoft.sqlserver.jdbc.SQLServerException: Ungültiger Objektname 'Time'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:775)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:676)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:611)
at de.fh.zwickau.Main.main(Main.java:40)

vielleicht kann mir jemand sagen was ich falsch mache. Ich jedenfalls bekomme es nur durch Stundenlanges Probieren raus, und bei nun fast 30 Grad im Zimmer macht das auf dauer keinen Spaß mehr... :(

Danke für eure hilfe.

LG Jumpfrog
 
Hi

ich glaube, time ist ein reservierter Ausdruck (weil schon anders verwendet)
und kann/sollte nicht als Tabellenname verwendet werden.
 
Danke für deine Antwort, aber daran scheint es nicht zu liegen.

sowohl:

com.microsoft.sqlserver.jdbc.SQLServerException: Ungültiger Objektname 'db0.Zyklus'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:775)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:676)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:611)
at de.fh.zwickau.Main.main(Main.java:40)

als auch:

com.microsoft.sqlserver.jdbc.SQLServerException: Ungültiger Objektname 'Zyklus'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:775)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:676)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:611)
at de.fh.zwickau.Main.main(Main.java:40)

habe ich bekommen wenn ich auf die Tabelle Zyklus zugreifen will und ich glaube nicht das Zyklus auch noch ein reservierter Namen ist
 
Stimmt, Zyklus ist nicht reserviert.

Nächster Versuch:
Der Datenbankname ist nicht angegeben.

jdbc:sqlserver://<url>:1234;databaseName=hiereinsetzen
 
Code:
con = DriverManager.getConnection(
					"jdbc:sqlserver://<url>:1234;databaseName=Stundenplan",
					"sa", "sa");

Es kommt die selbe Exception... :-/

Quelltext mäßig schätze ich das alles richtig ist... liegt es vielleicht an der Rechte Vergabe... wobei jeder user mit dem ich zugreifen will mind. dbowner ist...
 
Hallo,

das Problem hatte ich auchmal (bei mir lag es, dass ich das DB Schema nicht richtig angegeben hatte). An den Rechten sollte es nicht liegen. Denn er hat eine Verbindung aufgebaut und führt die SQL aus. So wie das dort oben steht, findet er das Objekt nicht. Das kann bspw. eine Tabelle sein. Bist du sicher das deine Verbindungsparameter bzgl. IP und DB Schema stimmen? Tippfehler?

Der nächste Schritt der mir einfällt, wäre dass du dir mal die Metadaten ausgibst, ob du überhaupt auf der richtigen DB bist.

bye
 
Hey tuney,

Ich habe keine Verbindungsparameter angegeben gehabt außer das eine mal hier im Forum. als StandartDB für den Benutzer sollte ja auch die "Stundenplan" DB eingestellt sein. Somit macht es eigentlich die angabe von DB wie es oben zu sehen ist überflüßig. (zumindest aus meiner Logik heraus)

Ich habe gerade versucht mir Metadaten ausgeben zu lassen, aber schlau werde ich aus den ausgaben auch nicht. Kannst du mir vielleicht sagen was ich da schreiben müsste?

LG Jumpfrog

EDIT: OK, Problem erledigt... an den Tabellen wurde durch den blöden microsoft importer ein $ am ende rangehangen, welchen ich immer gekonnt übersehen habe... :-/ Danke für eure Hilfe :)
 
Zuletzt bearbeitet:
Hallo Jumpfrog,

prima das sich das erledigt hat. Vielleicht noch als Tipp. Für MS DBs gibt es das SQL Server Database Management Studio. Dort hat man m.E. den besten Überblick (Welche Instanzen am Laufen sind und wo welche Table zu finden ist). Bei mir damals war die DB allerdings in einem gesicherten Netzwerk, so dass ich von außen nicht darauf zugreifen konnte mit dem Tool. Also hab ich den Netzwerkadmin gefragt ob er mir die Informationen nochmal zuschicken kann. Dann hatte ich gesehen, dass ich auf der falschen DB war. Sowas kosten immer verdammt viel Nerven & Zeit.

bye
 
Zurück