# Keine Datenbankverbindung möglich



## Kenan89 (24. Feb 2012)

Hallo,
dieses Thema existiert bereits im Themenbereich DataTier, da ich es aus versehen da rein gepostet habe.
Vor einigen Tagen habe ich auch darum gebeten, es hier her zu verschieben. Naja, da mein Thema eigentlich hier herein gehört poste ich es noch einmal. Der im Data Tier kann gelöscht werden.

So mein Problem ist, dass ich keine Verbindung zum postgres herstellen kann. Tomcat ist installiert und normale JSP Seiten lassen sich auch ausführen im Browser.

Meine Entwicklungsumgebnung ist Eclipse. 
Ich verwende folgendes:
Postgresql Version 8.4
jdbcDriver4
jdk 1.6

Der Code an sich müsste passen, denn ich kann mit dem gleichen Code an dem Rechner meines Kumpels eine Datenbankverbindung herstellen und wir haben die gleichen Versionen. Falls es Probleme gibt mit den Rechten unter Windows 7, wie kann ich das beheben.

Ich bin leider ratlos.

Wer Zeit und Lust hat, kann sich ja meinen Code kopieren, sich die oben genannten Komponenten runterladen und mein Problem rekonstruieren. 

Hier der Code, des index.jspmehr Seite gibt es momentan auch nicht. Es geht nur darum eine Connection aufzubauen)

```
<%@page import="java.sql.*, java.net.InetAddress" %>

<div style="background-color: yellow">
DB-Connection:
</div>

<%

		Connection conn = null;
		
		String userName = "deinUsername";  //ich benutze den postgres User
		String userPW = "deinPasswort";
		String conURL = "jdbc:postgresql://localhost:5433/deineDatenbank";
		
		
		try{
			Class.forName("org.postgresql.Driver");
			conn = DriverManager.getConnection(conURL, userName, userPW);
			

			out.println("Verbindung");
		}
		catch(Exception e){
			out.println("Keine Verbindung");
			e.printStackTrace();
		}
		finally{
	


		try{
			if(conn!=null){
				conn.close();
			}
		}
		catch(SQLException e){
			conn = null;
		}
	

		}

%>
```

EDIT: 
Ich kriege aufgrund vom stackTrace folgende Exception: org.postgresql.util.PSQLException
Er sagt, das meine Datenbank nicht existiert, obwohl sie im postgres eingetragen ist.

Danke im voraus für Hilfen.


----------



## L-ectron-X (25. Feb 2012)

Wenn diese Exception geworfen wird, kann er bereits die Klassen des Treibers laden.
Die genaue Meldung wäre interessant.


----------



## Kenan89 (26. Feb 2012)

Alles hier erscheint in roter Schrift in der Console. Er sagt dass er keine passende Property zu meinen Projekten findet?


```
26.02.2012 08:52:05 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files (x86)\Java\jdk1.6.0_10\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files (x86)/Java/jdk1.6.0_10/bin/../jre/bin/client;C:/Program Files (x86)/Java/jdk1.6.0_10/bin/../jre/bin;C:/Program Files (x86)/Java/jdk1.6.0_10/bin/../jre/lib/i386;C:\Program Files (x86)\PC Connectivity Solution\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Java\jdk1.6.0_10\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Common Files\Ulead Systems\MPEG;C:\Program Files (x86)\Common Files\Ulead Systems\DVD;C:\Users\xy\Pictures\Downloads\eclipse;
26.02.2012 08:52:06 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNUNG: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Testt' did not find a matching property.
26.02.2012 08:52:06 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNUNG: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:FitnessManagerVersion1.0' did not find a matching property.
26.02.2012 08:52:06 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNUNG: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:KontaktManagement' did not find a matching property.
26.02.2012 08:52:06 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
26.02.2012 08:52:06 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 875 ms
26.02.2012 08:52:06 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
26.02.2012 08:52:06 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.35
26.02.2012 08:52:06 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
26.02.2012 08:52:06 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
26.02.2012 08:52:06 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/34  config=null
26.02.2012 08:52:06 org.apache.catalina.startup.Catalina start
INFO: Server startup in 604 ms
```


----------



## L-ectron-X (26. Feb 2012)

> ```
> Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:
> ```


Kannst du damit was anfangen?
Sieht so aus, als ob noch eine Bibliothek fehlt bzw. nicht im Classpath liegt.


----------



## Kenan89 (26. Feb 2012)

Leider bringt mich diese Info nicht weiter. Ich habe eigentlich mit Build Path den richtigen Driver eingefügt. Ich habe danach manuel noch mal in den lib Ordner im WEB INF Ordner noch einmal den Driver hereinkopiert.


----------



## DanZ (26. Feb 2012)

Die Meldung ist auch nicht wichtig - die ist Standard bei Tomcat.

Viel interessanter wäre der Stacktrace beim Verbindungsfehler. Bist du sicher das der Name der Datenbank richtig geschrieben ist(Groß/Kleinschreibung etc.)?


----------



## JohannisderKaeufer (27. Feb 2012)

Wenn man google anstrengt und nach "postgresql default port" sucht, stößt man auf 5432.

Daher meine Frage auf welchem Port läuft die DB?

In deinem anderen Thread erwähnst du auch den Port 5432, in deinem Codebeispiel ist es nun die 5433.


----------



## maki (27. Feb 2012)

> Hallo,
> dieses Thema existiert bereits im Themenbereich DataTier, da ich es aus versehen da rein gepostet habe.
> Vor einigen Tagen habe ich auch darum gebeten, es hier her zu verschieben. Naja, da mein Thema eigentlich hier herein gehört poste ich es noch einmal. Der im Data Tier kann gelöscht werden.


Vor einigen Tagen hatte ich dir bereits erklärt dass dein Problem KEIN WebApp Problem ist und deswegen NICHT ins Unterforum "Web Tier" hingehört!

*verschoben*

Hoffentlich verstehst du das diesmal besser anstatt nochmal einen neuen Thread zu diesem Thema aufzumachen..


----------



## Kenan89 (11. Mrz 2012)

Okay Windows musste ich formatieren wegen einem Virus und habe jetzt alles neu und frisch.
Ich zähle mal auf: 

JDK 6
(als Systemvariable JAVA_HOME hinzugefügt)
(Test jsp Seiten laufen unter dem webapps Ordner)
Eclipse EE Indigo

postgres9 installiert
postgresql-9.0-802.jdbc4.jar

(Dann steht bei mir im Eclipse bei JRE System Library in eckigen Klammer: [JavaSE-1.6])

Meine Datenbank: testen(name der db) mit localhost: 5432

Mein Code: 

```
<%@page import="java.sql.*" %>

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
		Connection conn = null;
		
		String userName = "postgres";
		String userPW = "pw";
		String conURL = "jdbc:postgresql://localhost:5432/testen";
		
		try{
			Class.forName("org.postgresql.Driver");
			conn = DriverManager.getConnection(conURL, userName, userPW);
                        out.println("klappt");
			conn.close();
		}
		catch(Exception e){
			out.println("Hmm");
			
		}
		
%>
</body>
</html>
```

Meine Fehlermeldung in der Eclipse Konsole:


> org.postgresql.util.PSQLException: FATAL: Datenbank ?testen? existiert nicht
> at org.postgresql.core.v3.ConnectionFactoryImpl.readStartupMessages(ConnectionFactoryImpl.java:469)
> at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:112)
> at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
> ...



Er sagt DB testen existiert nicht obwohl sie vorhanden ist in pgAdmin. Der jdbc treiber 4 ist ja auch nicht falsch für postgres version 9..

Danke für Hilfen im voraus. Da Windows neu installiert ist hoffe ich, dass der Fehler schnell behoben wird.


----------



## Camino (11. Mrz 2012)

Hmm, irgendwo was falsch geschrieben? Datenbank unter einem anderen Benutzer angelegt? Zugriffsrechte in der pg_hba.conf?


----------



## Kenan89 (12. Mrz 2012)

> Hmm, irgendwo was falsch geschrieben? Datenbank unter einem anderen Benutzer angelegt? Zugriffsrechte in der pg_hba.conf?



Falsch geschrieben ist nichts.
Datenbank habe ich unter dem postgres User angelegt.
Folglich müsste es doch von den Rechten her im pg_hba.conf passen, oder?

Das einzige was ich nicht gemacht habe ist, dass ich postgresql
nicht als Admin installiert habe, aber das macht er ja automatisch und
das sollte doch nicht die Fehlerquelle sein.


----------



## Camino (12. Mrz 2012)

Kenan89 hat gesagt.:


> Er sagt DB testen existiert nicht obwohl sie vorhanden ist in pgAdmin.



Kommst du denn mit pgAdmin oder psql in die DB rein?


----------



## Kenan89 (12. Mrz 2012)

ja


----------



## Camino (13. Mrz 2012)

Dann fällt mir leider auch nichts mehr ein, woran es liegen könnte. Vielleicht kommt ja noch ein Datenbank-Experte vorbei...


----------



## Kenan89 (14. Mrz 2012)

Trotzdem danke für die bisherige Hilfe


----------



## parabool (14. Mrz 2012)

Versuche es mal mit 127.0.0.1 statt mit localhost.


----------



## Schrubber (14. Mrz 2012)

Verhält sich dein postgresql so wie alles andere? Dann würd ich sagen:
über Use versuchen?




```
String conURL = "jdbc:postgresql://localhost:5432/";
```

Und dann halt sowas wie


```
Statement stm = conn.createStatement();
stm.executeUpdate("use testen");
```


----------



## Kenan89 (17. Mrz 2012)

Leider funktionierte keins von beiden Varianten.

Ich habe das Gefühl er verbindet sich nicht mit postgres. Obwohl Treiber stimmt.

Man ist das nervig


----------



## Kenan89 (19. Mrz 2012)

Was mir jetzt gerade noch einfällt: Ich habe Windows 7 64 Bit, habe aber Eclipse 32 Bit und postgres 32 Bit installiert. Kann es die ursache meines Problems sein? Kann es leider nicht testen, da ich nicht zu Hause bin.


----------



## Camino (20. Mrz 2012)

Kenan89 hat gesagt.:


> Was mir jetzt gerade noch einfällt: Ich habe Windows 7 64 Bit, habe aber Eclipse 32 Bit und postgres 32 Bit installiert. Kann es die ursache meines Problems sein? Kann es leider nicht testen, da ich nicht zu Hause bin.



Ich hab zwar von allen die 64bit-Versionen, denke aber nicht, dass es daran liegt. Meiner Meinung nach müssten die 32bit und 64bit auch zusammen funktionieren. Vielleicht ist ja bei der Installation oder der Erstellung der Datenbank irgendwas schief gelaufen? Versuch doch mal mit psql und verschiedenen Angaben (User, PW, Datenbank...) in die Datenbank reinzukommen. Vielleicht gibt es ja von psql aus Möglichkeiten, mehr Infos über die angelegten Datenbanken rauszufinden, z.B. wo und wie genau die Datenbank angelegt wurde. Oder du erstellst nochmal einen neuen Benutzer und legst die Datenbank neu unter diesem User an.


----------



## areafo (21. Mrz 2012)

Es liegt definitiv an dem 64 Bit Aufruf. Versuch mal ein DSN Namen im C:\Windows\SysWOW64\odbcad32.exe zu definieren und mach darüber den Aufruf.

Alle jdbc Aufrufe gehen ohne Parameter immer an die 64 Bit Treiber im System und nicht an die vorhanden 32 Bit Treiber.

Wir betreuen hier 90 Tausend Windows 7 64 Bit Maschinen. Ich weiss wovon ich rede


----------



## maki (21. Mrz 2012)

areafo hat gesagt.:


> Es liegt definitiv an dem 64 Bit Aufruf. Versuch mal ein DSN Namen im C:\Windows\SysWOW64\odbcad32.exe zu definieren und mach darüber den Aufruf.
> 
> Alle jdbc Aufrufe gehen ohne Parameter immer an die 64 Bit Treiber im System und nicht an die vorhanden 32 Bit Treiber.


Du sprichst von ODBC Datenquellen, JDBC type 4 Treiber nutzen kein ODBC oder sonstirgendwelche nativen Bibliotheken.
Auch wäre die Fehlermeldung eine andere.


----------



## areafo (21. Mrz 2012)

Ja maki. Er sagt er hat den Treiber im System installiert. Nicht das er Ihn nur verwendet. JDBC ist ja ODBC für Java und mit dem Type 4 Treiber hast du natürlich recht.

Hab mich da oben etwas falsch ausgedrückt.

Es ging um den Aufruf der aus der VM über JDBC auf ODBC ins System geht und da geht es in einem 64 Bit System immer in die 64 Bit Node wenn nicht anders definiert.


----------



## Camino (21. Mrz 2012)

areafo hat gesagt.:


> Er sagt er hat den Treiber im System installiert. Nicht das er Ihn nur verwendet.



Nanu, wo steht denn das? Ich hab mir die Postings nochmal durchgelesen und nichts dazu gefunden...


----------



## areafo (21. Mrz 2012)

Kenan89 hat gesagt.:


> Was mir jetzt gerade noch einfällt: Ich habe Windows 7 64 Bit, habe aber Eclipse 32 Bit und postgres 32 Bit installiert. Kann es die ursache meines Problems sein? Kann es leider nicht testen, da ich nicht zu Hause bin.


 da?


----------



## Camino (21. Mrz 2012)

Vom Treiber steht da aber nix... :bahnhof:


----------



## areafo (21. Mrz 2012)

Naja. Die Infos sind noch zu mau bis auf die Exception. Er hat einen Postgres Fat oder Instant Client auf einem Windows 64 Bit System in 32 Bit installiert. Ich sehe dieses Problem unabhängig von Java jeden Tag an Oracle Fat Clients usw.

Ich kann nur darauf hinweisen. Die Details direkt beim TS kennen wir hier alle nicht. Maki hat recht und ich kann nur mein Wissen beisteuern ^^

Edit:
Der Treiber wird ja auch geladen nur ob die Datenbank existiert nicht Meldung

Hätte vielleicht die zweite gepostete Exception genauer lesen sollen.


----------



## maki (21. Mrz 2012)

> Die Details direkt beim TS kennen wir hier alle nicht.


Eben areafo 

Deine Ausführung bez. des installiertem Clients (mit dem es zu funzen scheint und welcher vielleciht über ODBC arbeitet) hat mich auf eine andere Idee gebracht...

Würde dem TS mal raten sich den SQuirreL SQL Client zu holen und damit zu versuchen auf die DB zu kommen, den SQuirreL ist auch pures Java, wenn es damit geht, sollte es grundsätzlich auch in jedem anderen Java Programm funzen.
Wenn mit SQuirreL nciht funzt ist wahrscheinlich etwas grundsätzliches falsch entweder an der Db Konfig (Rechte, Ports, etc. ) oder daran wie er versucht von Java aus darauf zuzugreifen.


----------



## Kenan89 (23. Mrz 2012)

Ich installiere heute die korrekten 64 Bit Versionen und dann hoffe ich, dass es sich erledigt hat.

Übrigens habe ich nur 32 Bit Versionen installiert, weil ich Eclipse 64 Bit installiert habe und dann eine Fehlermeldung bekommen hab. Dann dachte ich, installier gleich postgres auch 32 Bit.


----------



## Kenan89 (6. Apr 2012)

Also nach langer Zeit habe ich es endlich versucht. Ich habe postgres für windows 7 64 bit installiert, postgresql 9.0 (der JDBC Driver) heruntergeladen, pgAdmin gestartet, einen neuen lokalen Server eingerichtet und versucht nur zu connecten. Leider sagt er, die Datenbank existiert nicht. 

Noch mal zur Erinnerung:
Ich habe Java SE 1.6
postgresql-9.0-802.jdbc4.jar
postgres für Windows 7 64 bit

Mein Code: 

```
<%@page import="java.sql.*" %>

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
		Connection conn = null;
		
		String userName = "postgres";
		String userPW = "xx";
		String conURL = "jdbc:postgresql://localhost:5432/kemal";
		
		try{
			Class.forName("org.postgresql.Driver");
			conn = DriverManager.getConnection(conURL, userName, userPW);
			out.println("OK");
			conn.close();
		}
		catch(Exception e){
                        out.println("Fehler");
			e.printStackTrace();
			
			
		}
		
%>
</body>
</html>
```

Es erscheint in der Konsole in Eclpse eine PSQLException und da wird mir gesagt, die Datenbank existiert nicht.


----------



## Camino (7. Apr 2012)

Du hattest gesagt, mit psql kommst du in die Datenbank rein. Wie lautet denn der exakte Befehl, mit dem du auf der Konsole in psql reingehst? Also mit welchen Angaben für User und Datenbank? Und wenn du dann in psql drin bist, kannst du dir die Datenbanken auflisten lassen. Ist die gewünschte Datenbank dann dort dabei? Wie hast du die Datenbank überhaupt erstellt und angelegt?


----------



## Kenan89 (7. Apr 2012)

Asoo.
Ich gehe immer mit pgAdmin rein und erstelle sie mit der grafischen Oberfläche.
Ich gehe so vor: 
Datei -> Server hinzufügen
(Name wähle ich beliebig bei server gebe ich localhost ein)

Ich nehme an, du meinst die sql shell von postgres oder? Wie kann denn damit testen, ob ich eine Verbindung herkriege?


----------



## Camino (7. Apr 2012)

Ja, psql findest du im bin-Verzeichnis deiner PostgreSQL-Installation. Beim Starten dieser Anwendung auf der Konsole kannst du verschiedene Parameter mit übergeben (User, Datenbank....) und dir dann in psql auch anschauen, welche Datenbanken, Tabellen usw. es gibt. Ist zwar etwas gewöhnungsbedürftiger als eine grafische Oberfläche, aber eigentlich ganz OK - und du bekommst auch gleich aussagekräftige Fehlermeldungen angezeigt. Du könntest ja mal schauen, wie und mit welchen Daten du bei psql reinkommst und ob du dann dort die gewünschte Datenbank siehst. Oder mal eine neue Datenbank mit einem neuen Benutzer anlegen...

Kannst ja auch mal hier schauen (oder noch weitere Infos zu psql im Netz suchen):
Informatik - Datenbanken - PostgreSQL - PSQL-Client
Postgres


----------



## Kenan89 (7. Apr 2012)

Hmm okay,...
Also ich habe jetzt einfach mal die sqlshell geöffnet(Start->Programme->Postgresql->sqlshell) und folgendes eingegeben:

Server[localhost]: localhost
Database[postgres]: testen
Port[5432]: 5432
Username[postgres]: postgres

Als Fehlermeldung kam: 

psql: FATAL: Datenbank >>testen<< existiert nicht

Obwohl ich sie mit pgAdmin sehen kann, denn sie ist unter Server aufgelistet und ich habe sogar eine Tabelle darin angelegt...

EDIT: Da ist vielleicht noch etwas, was ihr wissen solltet:

Ich habe ja Windows 7 64 Bit. 
Alle installierten Programme befinden sich normalerweise in Programme(x86). Da ist auch der Postgres Ordner, wobei der bin-Ordner darin leer ist, UND es gibt ja noch den Ordner Programme (ohne x86) in Windows 7. Da ist ebenfalls der Postgres Ordner und darin ist der bin-Ordner schon voll. Unter anderem ist da die psql.exe. Da wird auch beim Starten ein Passwort verlangt und wenn ich das Passwort vom postgres-User, welches ich bei der Installation definiert habe eingebe, erscheint eine Fehlermeldung: Fatal: Passwort Authentifizierung für Benutzer xy fehlgeschlagen. Ich wil mich aber als postgres-User anmelden. Wie kann ich Benutzer wechseln? psql.exe verlangt erst Passwort, so dass ich keine Optionen wie change user habe. *Dieser psql.exe ist auch iwie ein anderer als der unter Start->Alle Programme, denn wie gesagt, verlangt er erst ein Passwort, während der andere erst einen Servernamen verlangt..*


----------



## Camino (7. Apr 2012)

Das hört sich irgendwie so an, als hättest du da noch irgendwelche Reste von deiner vorherigen Installation. Vielleicht ist ja irgendwas beim Installieren schief gelaufen. Kannst ja mal schauen, was in der Systemsteuerung unter Software eingetragen ist. Ansosnten würde ich den Ordner mit dem leeren bin-Verzeichnis wieder löschen. Die Authentifizierung bei PostgreSQL ist in der Datei pg_hba.conf festgelegt. Dort steht welcher User wie auf welche Datenbanken zugreifen darf.

Ich denke, Start->Programme->Postgresql->sqlshell ist das Gleiche wie die psql (kann mich aber auch irren), weil du ja als Ausgabe auch "psql: FATAL: Datenbank >>testen<< existiert nicht" bekommst. Das könnte ja auch bedeuten, dass die Datenbank für den User nicht exisitert, mit welchem du auf diese Datenbank zugreifen willst.

Nimm auf jeden Fall mal das psql.exe aus dem bin-Verzeichnis und versuch dich da als User postgres in der Datenbank "testen" anzumelden. Normalerweise kommst du dann in psql-Konsole rein und kannst dort deine Befehle abgeben oder dir Infos zur Datenbank anzeigen lassen. Wie gesagt, vorher nochmal die pg_hba.conf anschauen und ggf. anpassen.


----------



## Kenan89 (7. Apr 2012)

Toll jetzt habe ich mein Passwort vergessen.
Also nicht das passwort für den user postgres, sondern
ich habe einen User der genauso heisst wie mein benutzerkonto...

Da ich noch Anfänger bin stehe ich natürlich vol auf dem Schlauch... 

Da gibt es doch die Chance, bei pg-hba.conf md5
auf trust zu ändern um trotzdem in die DB zu kommen.
Oder was für eine Möglichkeit habe ich, das PW zu resetten?

Habe das gefühl die ursache des problems kommmt immer näher


----------



## Camino (7. Apr 2012)

Schau mal hier (ganz unten), da ist erklärt, was bei pg_hba.conf drinstehen kann und was es bedeutet:
Postgres
Und nach Änderungen an dieser Datei den Postgres-Server neu starten...

EDIT: Und hier:
Passwort eines PostgreSQL Benutzers / Role resetten - Blog@MasterBootRecord.de


----------



## Kenan89 (7. Apr 2012)

Hmm... Es ist so, mein Rechner heisst
asus weil ich ihn so benannt habe. Wenn ich jetzt
md5 in pg-hba conf auf trust setze, wie auf deine 
verlinkten seite, müsste er sich auch als asus
anmelden. Klappt nicht weil die console sagt
der Benutzer asus existiert nicht: 


> psql: FATAL: Rolle >>asus<< existiert nicht



Das bedeutet, ich bin also gar nicht als postgres user angemeldet
sondern als asus. Die Frage ist jetzt wie ich den User wechseln kann.
Weder in psql.exe noch in dem sqlshell unter Programme kann ich Befehle
wie whoiam ausführen...

EDIT: Habe gerade deinen zweiten Link gesehen. Schön und gut, aber bei mir
ist das Problem dass er sagt asus existiert nicht Folglich kann ich auch
kein PW resetten


----------



## Camino (7. Apr 2012)

Hmm, normalerweise meldet man sich unter psql (auf der Konsole) so an:
psql -U [USER] -d [Datenbank]

Müsste bei dir also in etwa so aussehen:
psql -U postgres -d testen

Evtl. muss noch das Passwort angegeben werden...

Danach müsstest du in psql drin sein. Wenn du nur psql ohne Parameter angibst, wird wohl der Benutzer des Betriebssystems (ident) angenommen.

Bei der pg_hba.conf ist es auch wichtig, dass alles richtig dort drin steht, also auch die Reihenfolge der dortigen Anweisungen. Kannst ja mal hier reinkopieren, wie es dort bei dir aussieht (die wichtigen Zeilen mit den Nutzern und Datenbanken).


----------



## Camino (7. Apr 2012)

Kenan89 hat gesagt.:


> Hmm... Es ist so, mein Rechner heisst
> asus weil ich ihn so benannt habe. Wenn ich jetzt
> md5 in pg-hba conf auf trust setze, wie auf deine
> verlinkten seite, müsste er sich auch als asus
> ...



Hmm, hast du denn einen Benutzer namens "asus" angelegt? Und wenn ja, wie und wo?
Du könntest ja mal versuchen, einen neuen Benutzer anzulegen (müsste es auch in dem bin-Verzeichnis von PostgreSQL einen Befehl dazu geben). Nimm halt mal einen anderen Namen, nicht unbedingt den gleichen wie der Computername oder den gleichen Namen wie der Loginname fürs Betriebssystem. Ich glaube, du wirst beim Anlegen gefragt, ob es ein Suoperuser sein soll und ob dieser neue User Datenbanken anlegen können soll. Und diesen User dann in der pg_hba.conf auf trust setzen. (PostgreSQL neustarten nicht vergessen, damit diese Änderungen im Server wirksam werden) Und dann nochmal mit psql versuchen, diesen Benutzer mit der DB zu verbinden.


----------



## Kenan89 (7. Apr 2012)

Das Problem ist wenn ich die Konsole in C Programme Postgres bin öfffne, dann werde ich gleich nach dem Passwort gefragt. 
Wenn ich die psql shell in start programme öffne dann werde ich sofort nach dem server namen gefolgt von datanbank name usw gefragt, d.h. ich habe gar nicht die Möglichkeit Befehle wie psql -U xy -d xy einzugeben 

Vielleicht muss sich ja jemand an mein Rechner setzen und es kongfigurieren. Ich glaube das Problem könnte so viele Ursachen haben... Ich frage mal einen Kumpel, ob er Zeit hat, sich das Problem anzusehen.

EDIT: Beziehungsweise, wie öffnet man denn die Konsole für postgresql? 
Ist es die psql.exe im bin Ordner? Wenn ja, wie gesagt ich werde nach dem Starten
sofort nach dem PW gefragt.


----------



## Camino (7. Apr 2012)

Kenan89 hat gesagt.:


> Ist es die psql.exe im bin Ordner? Wenn ja, wie gesagt ich werde nach dem Starten sofort nach dem PW gefragt.


Ja, es ist die psql.exe im bin-Verzeichnis der PostgreSQL-Installation. Was passiert denn, wenn du in das bin-Verzeichnis wechselst und dann folgendes aufrufst:
psql -U postgres



Kenan89 hat gesagt.:


> Das Problem ist wenn ich die Konsole in C Programme Postgres bin öfffne, dann werde ich gleich nach dem Passwort gefragt.



Hmm, du gehst in der Konsole in das bin-Verzeichnis von PostgreSQL und wirst allein schon beim wechseln in das Verzeichnis (mit: cd bin) nach dem Passwort gefragt?


----------



## Camino (7. Apr 2012)

Kenan89 hat gesagt.:


> EDIT: Beziehungsweise, wie öffnet man denn die Konsole für postgresql?
> Ist es die psql.exe im bin Ordner? Wenn ja, wie gesagt ich werde nach dem Starten
> sofort nach dem PW gefragt.



Also, bei mir liegt das alles im Verzeichnis:
C:/Programme/PostgreSQL/9.0/bin bzw. C:/Program Files/PostgreSQL/9.0/bin

Ich öffne also die Konsole (Eingabeaufforderung) und gehe mit cd C:/Program Files/PostgreSQL/9.0/bin ins gewünschte Verzeichnis, in dem die psql.exe liegt. Dort müsstest du dann den Befehl psql -U postgres ausführen können...


----------



## Kenan89 (7. Apr 2012)

Ahaa cool... Ich habe cmd gestartet, ins bin-Verzeichnis gewechselt und die *psql -U postgres -d testen* ausgeführt und gleiches ergebnis. Konsole sagt Datenbank >>testen<< existiert nicht 



> Hmm, du gehst in der Konsole in das bin-Verzeichnis von PostgreSQL und wirst allein schon beim wechseln in das Verzeichnis (mit: cd bin) nach dem Passwort gefragt?


Nein, mit Konsole habe ich dich falsch verstanden, ich dachte du meinst ich soll die psql.exe in bin Ordner starten.  Denn wenn man die startet, wird man nach nem PW gefragt

EDIT: 
Hier meine config-Datei:


> # PostgreSQL Client Authentication Configuration File
> # ===================================================
> #
> # Refer to the "Client Authentication" section in the PostgreSQL
> ...



So sieht es dann in der Console aus... Ich denke die letzten 2 Zeilen kann man ignorieren, wollte nur was testen.


----------



## Camino (8. Apr 2012)

Also, wenn ich mir das von dir angehängte Bild anschaue, dann hast du dich doch mit psql -U postgres mit der Datenbank verbunden und warst dann in dem Programm psql als User postgres drin. Innerhalb von psql kannst du dann SQL-Befehle abgeben oder psql-spezifische Anweisungen. Soweit ich weiss, müssen SQL-Anweisungen aber dann mit einem Semikolon beendet werden. Wie schon mal gesagt, schau dir mal die Infos zu psql genauer an, vor allem, welche Befehle es dort gibt. Beenden und wieder raus aus psql kommst du mit dem Befehl 
	
	
	
	





```
\q
```
.

Die Anweisung createdb ist eine exe-Datei aus dem bin-Verzeichnis von PostgreSQL, also kein Befehl innerhalb psql. Wenn du dies ausführen willst, dann aus dem Verzeichnis bin heraus.

Innerhalb von psql kannst du SQL- oder psql-interne Anweisungen abgeben. Welche Anweisungen verfügbar sind, siehst du, wenn du in psql eingeloggt bist, mit den Befehlen 
	
	
	
	





```
\h
```
 für SQL-Anweisungen und 
	
	
	
	





```
\?
```
 für psql-interne Anweisungen.


----------



## Kenan89 (8. Apr 2012)

Ah sehr cool.
Das heisst wenn ich nun über die console eine tabelle anlege, müsste ich mit jsp connecten können.
Ich probiere es gleich aus und schreibe das Ergebnis hier.


----------



## Kenan89 (8. Apr 2012)

Soo, ich sehe nur noch eine Möglichkeit das Problem zu lösen;
Hier ist das Problem in Form von Screenshot.

Ich kann in pgAdmin UND in der Konsole neue Rows hinzufügen.

Mit meiner JSP kriege ich aber keine Verbindung zur Tabelle her 




Ihr seht jetzt in der Grafik mehrere Server und in allen Servern(PostgreSQL 9, testen, ...) ist die Tabelle test5 zu sehen, also sie befindet sich in allen von mir erstellten Servern, ob ihr besitzer doch postgres ist.. Wollte ich nur mal erwähnen, falls das für die Fehlerentdeckung wichtig ist.

Hier nochmal der Code, mit der ich mich nicht mit der Tabelle connecten kann:


```
<%@page import="java.sql.*" %>

<html>
<head>
<title>Insert title here</title>
</head>
<body>
<%
		Connection conn = null;
		
		String userName = "postgres";
		String userPW = "123"; //das ist nicht mein echtes Passwort ;)
		String conURL = "jdbc:postgresql://localhost:5432/test5";
		
		try{
			Class.forName("org.postgresql.Driver");
			conn = DriverManager.getConnection(conURL, userName, userPW);
			out.println("OK");
			conn.close();
		}
		catch(Exception e){out.println("Fehler");
			e.printStackTrace();
			
			
		}
		
%>
</body>
</html>
```

Irgendetwas ist schief gelaufen


----------



## Camino (8. Apr 2012)

Ich weiss nicht, ob das so gut ist, dass du da so viele Server angelegt hast. Also, ich hab bei mir nur den 1 Server: PostgreSQL 9.0 (localhost:5432) eingetragen. Und dort hab ich mehrere Datenbanken, die ich mir selbst angelegt habe. Neben einer Datenbank namens postgres, die wohl automatisch dort bei der Installation erstellt wurde.

Ich würde dir ja den Tipp geben, alles komplett zu entfernen und nochmal neu zu installieren. Und auch schauen, dass wirklich keine Reste von PostgreSQL noch irgendwo rumliegen. Dann würde ich nach der Installation unter dem User postgres (das ist der Superuser der DB) einen neuen User erstellen, und für diesen User auch eine eigene Datenbank. Und dort dann die Tabellen. Diesem User kannst du dann auch in der pg_hba.conf die Zugriffsrechte für die Datenbank erteilen.


----------



## Kenan89 (8. Apr 2012)

Na gut ich habe jetzt alle Server gelöscht und werde postgres 9 deinstallieren.

Dann Neuinstallation.


----------



## Camino (8. Apr 2012)

OK, viel Erfolg. Ich bin mal weg. Kann dir aber später (heute Abend?) weiterhelfen...


----------



## Kenan89 (8. Apr 2012)

Es geht immer noch nicht  
Eclipse sagt immer noch Tabelle existiert nicht.
Obwohl ich Postgres deinstalliert, alle übrigen Ordner gelöscht und auch den User postgres mit dem cmd gelöscht habe. Dann habe ich alles neu installiert. Wie gesagt auf der Konsole klappt es, aber mit JSP kann ich nicht connecten.
Den Namen der Datenbank muss man ja in der conURL eingeben. Du musst ja nur sagen, der Benutzer xy mit dem PW xy soll in die Tabelle xy. 
Ich versuche mal jetzt die Methode mit dem anlegen eines Benutzers. 

Die Frage ist jetzt, wie und welche Rechte kann ich einem neuen Benutzer vergeben? Mein Wissenstand reicht nur soweit:


> create user user1 with password 'xy' createdb;


Man kann ihm doch bestimmt Recht vergeben, wie z.b. ob er neue Tabellen anlegen darf, oder ob er nur tabellen lesen darf, bis wann der Account gültig ist,... Den oberen Code habe ich aus der Doku erarbeitet. Der müsste doch auch reichen, den wenn user1 das Recht hat datenbanken anzulegen, dann kann er bestimmt folglich auch tabellen anlegen.

SO, jetzt ist mir etwas sehr wichtiges in Eclipse aufgefallen. Er sagt nicht Tabelle xy existiert nicht, sondern DATANBANK XY existiert nicht. Muss man in dem Code, den ich oben gezeigt habe auch die DB angeben? Ich dachte nur den Namen der Tabelle.


----------



## Kenan89 (8. Apr 2012)

so es funktioniert!
Ich hätte wirklich den Namen der Datenbank vergessen. Dadurch wusste die jsp Seite nicht, in welcher Datenbank sie nach der Tabelle suchen muss.
Thema kann geclosed werden. Danke für die bisherige Hilfe


----------



## Camino (8. Apr 2012)

Kenan89 hat gesagt.:


> SO, jetzt ist mir etwas sehr wichtiges in Eclipse aufgefallen. Er sagt nicht Tabelle xy existiert nicht, sondern DATANBANK XY existiert nicht. Muss man in dem Code, den ich oben gezeigt habe auch die DB angeben? Ich dachte nur den Namen der Tabelle.



Na klar, man gibt bei der Verbindung den Namen der Datenbank mit an, und in dem SQL-Statement dann den Namen der Tabelle. Aber ich dachte ja auch, dass du das weiter oben so gemacht hattest. Wenn es jetzt klappt, dann ist doch prima und es hat sich gelohnt...


----------

