ResultSet --> RiesenBug ?

Status
Nicht offen für weitere Antworten.

pro_evo

Aktives Mitglied
hi zusammen,

also das Verhalten meines Programms kann ich mir beim besten Willen nicht erklären ... :

Die Klasse myDBTable bekommt ein ResulSet übergeben und stellt es in einem JTable dar.
Beim Editieren der Strings nun (Integer gehen), erscheinen plötzlich ALLE Strings der Spalte (nicht nur der editierte, sieht man bei z.B. einem Refresh durch minimieren/maximieren) als, anscheinend Objektadressen ?

Ich hab mal alles nötige hochgeladen, koennt es ja mal ausführen, die main ist in der klasse blatt04

http://www.rakatack.intermania.de/up/bug.zip

gruß
 

Grizzly

Top Contributor
Hi,

hab' das mal überflogen. Ich denke, dass die Zeile
Code:
Object o = rs.getObject(column+1);
das Problem sein könnte. ???:L Versuch stattdessen mal, die Texte per getString aus der Datenbank zu holen. Hab' das jetzt allerdings nicht weiter untersucht.

Kann es sein, dass Du noch nicht all zu lange programmierst? ;)
 

pro_evo

Aktives Mitglied
Hi,

ja an der Zeile liegt es wohl.
Aber ich kann nicht einfach getString drausmachen, die KLasse soll ja für ein beliebiges ResultSet funktionieren.
(generisch)

Offensichtlich kommt vom ResultSet ein Byte[5]-Array als Typ zurück, und das nur bei String.
Weiß der liebe Gott warum :###
Und das ganze aber erst nachdem man was geändert hat ... beim ersten Anzeigen klappt die Methode getValueAt ja auch für die Stringspalten ... wie gesagt nicht begreifbar das ganze für mich ...

gruß

p.s.Ich pg seit letztem Oktober warum ?
 

Grizzly

Top Contributor
pro_evo hat gesagt.:
Hi,

ja an der Zeile liegt es wohl.
Aber ich kann nicht einfach getString drausmachen, die KLasse soll ja für ein beliebiges ResultSet funktionieren.
(generisch)[...]
Dann mach' es doch einfach so, dass Du in den Metadaten der Tabelle schaust, welchen Typ die aktuelle Spalte hat.

pro_evo hat gesagt.:
[...]p.s.Ich pg seit letztem Oktober warum ?
Sieht man halt (noch) am Programmierstil. ;)
Das kommt aber sicher noch mit der Zeit. :)
Schau Dir einfach mal ein paar Dokumente zu Quellcode Konventionen & Co. an.
 

pro_evo

Aktives Mitglied
Grizzly hat gesagt.:
pro_evo hat gesagt.:
Hi,

ja an der Zeile liegt es wohl.
Aber ich kann nicht einfach getString drausmachen, die KLasse soll ja für ein beliebiges ResultSet funktionieren.
(generisch)[...]
Dann mach' es doch einfach so, dass Du in den Metadaten der Tabelle schaust, welchen Typ die aktuelle Spalte hat.

danke , kein schlechter Tipp,
habs es so versucht (in der getValueAt) :

Code:
if (rs.getMetaData().getColumnType(column+1) == java.sql.Types.VARCHAR) {
						return rs.getString(column+1);
					}


Leider keine Änderung ??!
(Wenn man die If Abrage hart macht, also if column == 1 oder 2 und getString returned funktioniert alles komischerweise wie es soll.) ???:L

Die andere Frage is ja warum ich das überhaupt machen muss ? Warum geht getObject beim Ersten anzeigen und nach ner Änderung nur bei String nicht mehr ?
 

Grizzly

Top Contributor
pro_evo hat gesagt.:
[...]
Code:
if (rs.getMetaData().getColumnType(column+1) == java.sql.Types.VARCHAR) {
						return rs.getString(column+1);
					}


Leider keine Änderung ??!
(Wenn man die If Abrage hart macht, also if column == 1 oder 2 und getString returned funktioniert alles komischerweise wie es soll.) ???:L
Hast Du mal mit
Code:
System.out.println(rs.getMetaData().getColumnType(column+1));
den Typ Dir ausgeben lassen? Und dann vielleicht noch ganz am Anfang irgendwo ein
Code:
System.out.println(java.sql.Types.VARCHAR);
. Dann kannst Du ja selber vergleichen, was da nicht stimmt.
pro_evo hat gesagt.:
Die andere Frage is ja warum ich das überhaupt machen muss ? Warum geht getObject beim Ersten anzeigen und nach ner Änderung nur bei String nicht mehr ?
Da bin ich auch überfragt. Könnte mit dem JDBC-ODBC Bridge Treiber zusammenhängen - oder mit dem ODBC Access Treiber.
 

pro_evo

Aktives Mitglied
Jep das mit dem ColumnType hab ich grad gestetet, er verändert sich :

Es wird nach einer Änderung zu einem BINARY (public static final int BINARY -2) , deshalb kommt er nicht mehr in die If Schleife rein .... :(

unbegreiflicher Bug ... wie soll das erst bei großen Sachen aussehen ,das hier is ja nur ein Mini-Übungsbeispiel :cry:
 

Grizzly

Top Contributor
Ich würde einfach ein richtige Datenbank verwenden und kein Access über ODBC über JDBC ODBC Brücke. Probier doch mal bspw. HSQLDB aus.
 

pro_evo

Aktives Mitglied
hab nun das hier noch in der setValueAt Methode probiert :
Code:
				if (rs.getMetaData().getColumnType(column+1) == java.sql.Types.VARCHAR) {
						rs.updateString(column+1, (String)obj);
						System.out.println("dhdhdhhdhdhdhdhdh");
					} 
					else rs.updateObject(column+1, obj);


leider keine Besserung des Effekts :(
 
R

Roar

Gast
hast du nen eignene editor/renderer oder model für deine tabelle geschrieben der dir das versaut?
 

Bleiglanz

Gesperrter Benutzer
vergiss das ganze mal und back kleinere Brötchen :)

es gibt VARCHAR, LONGVARCHAR und CHAR in java.sql.Types, du musst schon ALLE Typen abfragen um das zu erreichen was du willst

und der universal-Abholtyp ist java.lang.String, nicht java.lang.Object! Wenn du also eine unbekannte Spalte aus einem Resultset haben willst, dann liest man die mit getString aus!
 

pro_evo

Aktives Mitglied
Bleiglanz hat gesagt.:
und der universal-Abholtyp ist java.lang.String, nicht java.lang.Object! Wenn du also eine unbekannte Spalte aus einem Resultset haben willst, dann liest man die mit getString aus!

auch z.B. für Interger, Daten oder sonstwas ? hmm außerdem heisst die MUSS Methode :
public Object getValueAt(int row, int column) {

also ich MUSS ein Object returnen !


Hab aber noch 2 Neuigkeiten :
:shock:
- Mit Oracle selbes fehlerhaftes Verhalten !

- Mit PostgreSQL läuft das Programm einwandfrei !


Krass sag ich mal ! Wenn bei sowas Banalem die Treiber schon Mist bauen und das auch noch bei Oracle was man in Unternehmen wohl am wahrscheinlichsten braucht dann gute N8 für "große Sachen" ...
 

Grizzly

Top Contributor
Zum Einen sind die JDBC Treiber, die die Hersteller / Projekte mitliefern, im Allgemeinen auch was heikles. Zum Anderen würde ich halt mal schauen, was getObject überhaupt zurückgibt - also von welcher Klasse das Objekt ist. Da kann nämlich auch der Hase im Pfeffer liegen. Die Java Standard Klassen sind nämlich teilweise auch nicht ohne und ich hab' shcon öfters um Unzulänglichkeiten der Standard API d'rum rum programmieren dürfen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S ResultSet als Parameter an andere Klasse übergeben Datenbankprogrammierung 3
Z ResultSet ist null warum? Datenbankprogrammierung 12
R HSQLDB ResultSet update aktualisiert DB, aber nicht das ResultSet Datenbankprogrammierung 2
Dimax Erstellen ResultSet und Statement Datenbankprogrammierung 30
C PostgreSQL ResultSet.TYPE_SCROLL_SENSITIVE setzen Datenbankprogrammierung 2
L MySQL Bekomme einen Fehler beim ResultSet Datenbankprogrammierung 12
L Zugriff auf ein Resultset Datenbankprogrammierung 7
L MySQL ResultSet vollständig auslesen Datenbankprogrammierung 20
D Resultset schließen ?? Datenbankprogrammierung 5
T Oracle Resultset to Array sehr langsam. Datenbankprogrammierung 8
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
J SQLite ResultSet closed -- Wiederholende DB-Abfragen Datenbankprogrammierung 6
Z MySQL Probleme mit resultSet executQuery Datenbankprogrammierung 3
L ResultSet Datenbankprogrammierung 1
J wie mit resultset.next() über Datensätze iterieren? Datenbankprogrammierung 15
R MySQL Umgang mit ResultSet/Fremdschlüssel ausgeben Datenbankprogrammierung 2
D MySQL ResultSet als Stream weiter geben Datenbankprogrammierung 9
M ResultSet Cachen Datenbankprogrammierung 3
R ResultSet mit "Untertabellen" Datenbankprogrammierung 4
N SQL-Statement Auslesen des Resultset wird immer langsamer Datenbankprogrammierung 6
R Resultset.last() Problem Datenbankprogrammierung 12
PaulG Leeres ResultSet initialisieren Datenbankprogrammierung 6
J Frage zu ResultSet Datenbankprogrammierung 3
J SQL ResultSet Previous Datenbankprogrammierung 10
S MySQL ResultSet in ein Array übertragen Datenbankprogrammierung 7
H PostgreSQL Objekte aus ResultSet Datenbankprogrammierung 5
H ResultSet is closed tritt bei JSF aber nicht bei einer Java-Applikation auf Datenbankprogrammierung 10
O Oracle Resultset greift auf Spaltenüberschriften zu Datenbankprogrammierung 2
Kenan89 Wieso klappt das ResultSet nicht? Datenbankprogrammierung 3
C ResultSet enthält nicht alle Daten Datenbankprogrammierung 4
F Derby/JavaDB Resultset in JTablemodel Datenbankprogrammierung 2
F Oracle ResultSet zu einer HashMap<Integer, String[]> Datenbankprogrammierung 6
B SQLite ResultSet is TYPE_FORWARD_ONLY Datenbankprogrammierung 5
T Exception ResultSet Datenbankprogrammierung 7
0 ResultSet in JTable Datenbankprogrammierung 14
S [SQL] ResultSet Datenbankprogrammierung 4
R ResultSet Datenbankprogrammierung 4
I Sonderbehandlung wenn ResultSet leer ist Datenbankprogrammierung 9
I Problem mit ResultSet Datenbankprogrammierung 2
I SQL_Abfrage-Ergebnis (ResultSet) in String[] speichern Datenbankprogrammierung 29
B ResultSet wirft komische NullPointerException. Datenbankprogrammierung 3
R Detached ResultSet Datenbankprogrammierung 3
F generelle Vorgehensweise ResultSet Datenbankprogrammierung 5
S ResultSet Datenbankprogrammierung 2
A MySQL ResultSet.updateBytes schlägt fehl Datenbankprogrammierung 2
F ResultSet kann Datenbank nicht update, warum? Datenbankprogrammierung 3
T ResultSet befehl für leere Spalte nicht lesen Datenbankprogrammierung 4
S ResultSet einer Datenbankabfrage - Nullpointer Exception Datenbankprogrammierung 13
A PostgreSQL anfängerfrage: resultset zeilenweise auslesen Datenbankprogrammierung 2
T MySQL ResultSet zurückgeben nachdem Connection geschlossen wurde? Datenbankprogrammierung 3
K Keine ResultSet bei if in StoredProcedure Datenbankprogrammierung 16
D ResultSet gibt nichts aus. Datenbankprogrammierung 3
trash ResultSet Syntax Fehler Datenbankprogrammierung 11
ARadauer JDBC ResultSet schließen? Datenbankprogrammierung 4
M Oracle Problem mit Resultset Datenbankprogrammierung 11
J jdbc ResultSet types Datenbankprogrammierung 5
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
F ResultSet to String[] Datenbankprogrammierung 3
E ResultSet in HashMap Datenbankprogrammierung 8
K Tabelle mit resultset refreshen? Datenbankprogrammierung 4
M Problem mit ResultSet bei SQL Server 2005 Datenbankprogrammierung 6
S ResultSet in ArrayList ablegen Datenbankprogrammierung 17
G Daten aus ResultSet in String-Liste Datenbankprogrammierung 13
T ResultSet initialisieren Datenbankprogrammierung 2
C kein Resultset Datenbankprogrammierung 2
G ResultSet: String mit Anführungszeichen einlesen Datenbankprogrammierung 8
T ResultSet-Inhalt in Arrays schreiben Datenbankprogrammierung 3
S ResultSet variabel auslesen Datenbankprogrammierung 4
D Anzahl der Elemente im ResultSet ermitteln Datenbankprogrammierung 8
A Leeres ResultSet mit H2 unter Vista Datenbankprogrammierung 3
A Warum ist mein ResultSet leer? Datenbankprogrammierung 5
S ResultSet closed Datenbankprogrammierung 2
Z ResultSet mit einer anderen Datenquelle Datenbankprogrammierung 7
O Spaltenname aus Resultset Datenbankprogrammierung 2
thE_29 ResultSet und doppelte Spalten Datenbankprogrammierung 4
E Neues select auf ein vorhandenes Resultset Datenbankprogrammierung 11
E ResultSet vergisst Reihe? Datenbankprogrammierung 2
N resultset aus andere klasse übergeben Datenbankprogrammierung 3
F ResultSet refresh moeglich? Datenbankprogrammierung 3
S ResultSet enthält keine Daten Datenbankprogrammierung 2
B Geschlossenes ResultSet Datenbankprogrammierung 6
T ResultSet#next Ungültige Reihenfolge (DB2) Datenbankprogrammierung 5
T ResultSet schließen? Datenbankprogrammierung 6
S Tabelle updaten wenn ResultSet aus JDBC-Quelle Datenbankprogrammierung 2
S ResultSet Datenbankprogrammierung 6
F Filtern innerhalb eines Resultset Datenbankprogrammierung 12
S Connection/Statement/ResultSet auf einmal geschlossen Datenbankprogrammierung 8
@ Like-Klausel; NPE bzw. leeres ResultSet Datenbankprogrammierung 4
C Resultset nach connection close weiterreichen Datenbankprogrammierung 5
B No ResultSet was produced Datenbankprogrammierung 2
S ResultSet erweitern ? Datenbankprogrammierung 4
E JDBC, ForwardOnly bei ResultSet nach Uebergabe Datenbankprogrammierung 4
R ResultSet liefert oracle.sql.TIMESTAMP, aber unbrauchbar Datenbankprogrammierung 9
A Probleme mit ResultSet und getString(i) Datenbankprogrammierung 13
RaoulDuke ResultSet - Wie arbeitet sowas intern Datenbankprogrammierung 2
N Probleme mit "nur vorwärts gerichtete ResultSet" Datenbankprogrammierung 7
G Für jede SQL-Abfrage eigenes Statement und ResultSet? Datenbankprogrammierung 3
T MAX und ResultSet#next Datenbankprogrammierung 10
R ResultSet zu bestimmtem DS navigieren Datenbankprogrammierung 4
S .leeres Resultset abfangen Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben