Oracle Datenbankabfrage ausgeben

hans-sonny

Bekanntes Mitglied
Hi leute,

ich möchte gerne eine Select anfrage auf der std out ausgeben..

probiere es wie folgt
Java:
ResultSet Out = stmt.executeQuery("SELECT Name FROM Kunde WHERE Name =" + NAME);
                    out.println("Kunde:" + Out.getString(1));

bekomme aber immer diese Meldung

Exception in thread "main" java.sql.SQLDataException: ORA-01426: numerischer Überlauf

woran könnte es liegen

habe auch probiert:
Java:
ResultSet Out = stmt.executeQuery("SELECT Name FROM Kunde WHERE Name =" + NAME);
                    out.println("Kunde:" + Out.getString("Out"));


ging leider auch nicht


hat mir jemand ne idee?
 
die Fehlermeldung ist wirklich ungewöhnlich, bei google selten zu finden,

allgemein gilt dass vor dem ersten Zugriff auf das ResultSet next() aufzurufen ist, siehe alle Beispiele für ResultSet

und was soll "Out" für ein Parameter zu getString() sein? so heißt doch keine Spalte, getString(1) müsste es aber tun
 
hi danke für die hilfe aber noch klappt es nicht ...

also ziel soll es sein am ende alles was zum kunde a gehört auszugeben..

aber noch klappt es nicht mal nur den name auszugeben


ich hab das mal so angepasst wie du es gesagt hast

Java:
ResultSet Out = stmt.executeQuery("SELECT Name FROM Kunde WHERE Name =" + NAME);
                    while (Out.next()) 
                    {
                        out.println("Kunde:" + Out.getString(1));
                    }
 
Java:
stmt.executeQuery("SELECT Name FROM Kunde WHERE Name =" + NAME)
Was ist
Code:
NAME
? Und irgendwie macht das keinen Sinn, wenn du den Namen schon weisst und danach abfragst, und dann den Namen aus der Datenbank geliefert haben möchtest.

Java:
out.println("Kunde:" + Out.getString(1));
Und das müsste
Code:
System.out.println...
heissen.

Java:
ResultSet Out
Code:
out
klein schreiben, aber besser wäre evtl. sowas wie
Code:
ResultSet rs
.
 
also ich habe festgestellt, dass NAME falsch war es muss name sein...
aber das ändert nichts am problem

ja ich probier ja nur erst mal den namen und dann alle anderen infos wie tel numnmer etc... aber


doch out.println geht auch wenn man

import static java.lang.System.in;

macht ....


das problem liegt an dieser Zeile:

Java:
stmt.executeQuery("SELECT Name FROM Kunde WHERE Name =" + name)


ich brauche das noch öfter für andere abfragen

z.B. hätte ich noch gerne sowas

SELECT Straße, Hausnummer FROM Adresse WHERE Adressnummer =" + nummer)

aber wenn das mit name nicht geht brauch ich ja mit der adresse gar nicht erst anfangeb ...
 
Ich stimme Camino zu, dass es wenig Sinn wenn du den Namen schon weisst danach abfragst.

Und ich vermute das Name als VARCHAR in der DB definiert ist. Dann versuche mal

Java:
stmt.executeQuery("SELECT Name FROM Kunde WHERE Name ='" + NAME+"'");

Ich empfehle immer PreparedStatements zu nutzen, weil der Code "schöner" (kein String-Geraffel mehr) und auch sicher gegen SQL-Injections wird.
Mit PreparedStatement sähe es dann so aus.
Java:
Connection con = ...;
PreparedStatement stmt = con.prepareStatement("SELECT Name FROM Kunde WHERE Name =?");
stmt.setString(1, name);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
	String dbName = rs.getString("Name");
	System.out.println(dbName + " ");
}

Und wenn Du dann dafür myBATIS einsetzt, habe ich Dich auch lieb:
 
Java:
PreparedStatement stmt = con.prepareStatement("SELECT Name, Vorname, Telnummer FROM Kunde WHERE Name =?");
Und dann in der Schleife, wenn du durch das ResultSet durchgehst, eben diese Felder abfragen.
 
ah okay und was macht das = ?

und das hier ganz genau, stmt.setString(1, name);

steht die 1 für die 1. spalte? und name? mein eingelesenes ...

muss ich das dann für die anderen felder auch machen?
 
ah okay und was macht das = ?

und das hier ganz genau, stmt.setString(1, name);

steht die 1 für die 1. spalte? und name? mein eingelesenes ...

muss ich das dann für die anderen felder auch machen?

Das ? ist ein Platzhalter. Die 1 heisst, dass das 1. ? genommen und dort der Wert (name) eingesetzt wird. Das musst du nur für die Felder machen, welche du in deine SQL-Abfrage einsetzen möchtest.
 
wie sähe das dann aus wenn ich mehr wie eine spalte ausgeben dann name + vorname + telnummer ausgeben
Wie Camino schon sagte:

Java:
PreparedStatement stmt = con.prepareStatement("SELECT Name, Vorname, Telnummer FROM Kunde WHERE Name =?");
stmt.setString(1, name);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
  String dbName = rs.getString("Name");
  String dbVorname = rs.getString("Vorname");
  String dbTelNummer = rs.getString("Telnummer ");
}
 
(grummel, die ursprüngliche Fehlermeldung 'numerischer Überlauf' passte ja doch ganz gut zu vergessenen Anfühungszeichen,
Name als Zahl interpretiert, das hätte ich sehen sollen)
 

Zurück
Oben