# SELECT auf database



## fenerli23 (31. Oktober 2007)

hi,
mein einsicht nach müsste mein Code stimmen, jedoch tritt irgendwie immer ein Fehler auf könnt ihr mal gucken bitte...


----------



## Ronin-Jay (31. Oktober 2007)

fenerli23 hat gesagt.:


> hi,
> mein einsicht nach müsste mein Code stimmen, jedoch tritt irgendwie immer ein Fehler auf könnt ihr mal gucken bitte...
> 
> 
> ...




Wenn Du Dir mal Dein SQL-Statement ausgeben läßt (s.o. fettgedruckt), wirst Du feststellen, dass ein Leerzeichen fehlt.

Es muß wie folgt lauten:

```
rset = stmt.executeQuery("SELECT LAST_NAME,FIRST_NAME, DEPARTMENT_ID, MANAGER_ID FROM employees[_]" +
					"WHERE DEPARTMENT_ID = 50  " +
					"AND MANAGER_ID = 120");
```

Das [_] ist durch ein Leerzeichen zu ersetzen...


----------



## fenerli23 (31. Oktober 2007)

stimmt dank dir nun kommt diese Fehlermeldung:


```
error messgae: Konvertierung zu interner Darstellung nicht erfolgreich
java.sql.SQLException: Konvertierung zu interner Darstellung nicht erfolgreich
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
	at oracle.jdbc.driver.CharCommonAccessor.getInt(CharCommonAccessor.java:132)
	at oracle.jdbc.driver.OracleResultSetImpl.getInt(OracleResultSetImpl.java:521)
	at select.GetSelect.main(GetSelect.java:65)
```


----------



## Ronin-Jay (31. Oktober 2007)

Was steht denn in

```
at select.GetSelect.main(GetSelect.java:65)
```
Zeile 65 +- in der GetSelect.java?


----------



## slotyman (31. Oktober 2007)

Ich denke das es daran liegt, dass du nur vier Spalten hast und auf die Fünfte zugreifen willst. (SELECT LAST_NAME,FIRST_NAME, DEPARTMENT_ID, MANAGER_ID)

Vielleicht eher SELECT * FROM ....


----------



## fenerli23 (31. Oktober 2007)

ja daran hats gelegen... aber kann ich nicht einen code erstellen indem ich den Select befehl willkürlich immer verändern kann?


----------



## slotyman (31. Oktober 2007)

Du kannst mit 

ResultSetMetaData rsmd = resultSet.getMetaData();
int numberOfColumns = rsmd.getColumnCount();

die Anzahl der Spalten auslesen und dann mit einer for-Schleife auslesen.

while(resultSet.next())
{
      for (int i=1; i <= numberOfColumns;i++)
      {
           try
           {
                  System.out.println(rsmd.getColumnName(i)+"  "+ resultSet.getString(i));
           }
           catch (Exception ex)
           {
    	   System.out.println(ex);
           }
     }
}


----------



## fenerli23 (1. November 2007)

wenn ich das so ausführe kriege ich die Fehlermeldung:


```
resultSet cannot be resolved
```


----------



## slotyman (1. November 2007)

Wenn du das in dein Programm eingebaut hast, könnte es daran liegen das deine Variable für das ResultSet "rset" lautet. Also in meinem Programmcode resultSet durch rset ersetzten.


----------



## fenerli23 (1. November 2007)

slotyman hat gesagt.:


> Wenn du das in dein Programm eingebaut hast, könnte es daran liegen das deine Variable für das ResultSet "rset" lautet. Also in meinem Programmcode resultSet durch rset ersetzten.





jetzt kriege ich diese Fehlermeldung

```
Unhandled exception type SQLException
```


----------



## slotyman (1. November 2007)

Das klappt so nicht, da die selctabfrage ja mit der Auswertung steht. D.h. du willst das Ergebnis auslesen bevor du es erfragt hast. 

Also musst du zuerst das Statement abschicken und danach das resultSet auslesen. So wie du es schon im ersten Beispielcode gemacht hattest.


----------



## Ronin-Jay (1. November 2007)

Zu dem Zeitpunkt, wo Du 'rsmd' ermittelst, ist 'rset' noch NULL....

setz mal die beiden Zeilen:

```
ResultSetMetaData rsmd = rset.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
```

erst dann ein, wenn Du rset belegt hast....


----------



## slotyman (1. November 2007)

//Datenbank wird hier rausgelesen 
			rset = stmt.executeQuery("SELECT LAST_NAME,FIRST_NAME, DEPARTMENT_ID, MANAGER_ID FROM employees" +
					"WHERE DEPARTMENT_ID = 50  " +
					"AND MANAGER_ID = 120");

			// declare constants for column indexes in the query 
			// Die fallen jetzt raus......
			//final int EMPLOYEE_COLUMN_INDEX = 1;
			//final int LAST_COLUMN_INDEX = 2;
			//final int FIRST_COLUMN_INDEX = 3;
			//final int EMAIL_COLUMN_INDEX = 4;
			//final int PHONE_COLUMN_INDEX = 5;
			//final int DEP_COLUMN_INDEX = 6;
			//final int JOB_COLUMN_INDEX = 7;
			//final int MANAGER_COLUMN_INDEX = 8;

// Hier die Spatenabfrage...
			ResultSetMetaData rsmd = rset.getMetaData();
			int numberOfColumns = rsmd.getColumnCount();

			//print the results
			while (rset.next())
			{
for (int i=1; i <= numberOfColumns;i++)
				{
					try
					{
					System.out.println(rsmd.getColumnName(i)+" "+ rset.getString(i));
					}
					catch (Exception ex)
					{
					System.out.println(ex);
				}

			}
		}
		catch (SQLException e)
		{
			// handle the exception properly - in this case, we just
			// print a message and


----------



## fenerli23 (5. November 2007)

hi,
es tritt irgendwie ein Fehler !?


----------



## Tobias Köhler (5. November 2007)

Sollte, denn da ein Fehler kommen? Klappt es bei dir nicht?


----------



## slotyman (5. November 2007)

Welcher Fehler tritt den auf ? Fehlerausgabe ?


----------



## fenerli23 (5. November 2007)

ja es erfolgt ein Fehler , das dies "}" nicht rihctig gesetzt wäre habe nachgeschaut und meiner ansicht nach müsste das stimmen


----------



## slotyman (5. November 2007)

Das "{" vom try-catch Block stimmt nicht.
richtig ist ein 
try
{
....
}
catch
{
...
}

d.h. deine zweiter Catch-Block steht mit im Try-Bereich. Das klappt nicht.

das muss dann statt so:
....
}
			catch (SQLException e)
			{
				System.err.println("error messgae: " + e.getMessage());
				e.printStackTrace();
				Runtime.getRuntime().exit(1);
			}
		} <----(Die ist hier falsch und muss vor das catch)
....

Hier noch mal richtig:

...
}} <--- (Also hier mit hin)
			catch (SQLException e)
			{
				System.err.println("error messgae: " + e.getMessage());
				e.printStackTrace();
				Runtime.getRuntime().exit(1);
			}
...


----------



## fenerli23 (5. November 2007)

Danke,  hat geklappt nur die Ausgabe sieht nicht so schön aus unordentlihc muss das mal umändern


----------



## Looky (7. November 2007)

boah leute seid ihr geduldig. ich bin beeindruckt


----------

