ich hoffe ich bin im richtigen Forum gelandet. ich habe ein kleines technisches problem und verstehe zur zeit noch nicht ganz wie ich es lösen kann, ich hoffe sehr, dass ihr mir helfen könnt.
ich habe eine spalte in meiner oracle datenbank mit der bezeichnung.
U##USERNAME___40
das problem ist jetzt, wie kann ich mit netbeans ein sql kommando absetzen, bzw. wie sieht der befehl dazu im java aus, meiner meinung nach müsste ich das irgendwie maskieren. aber alles was ich bis jetzt probiert habe hat irgendwie nicht funktioniert.
würde mich über ideen bzw. eine exakte herrangehensweise freuen. damit keine db diskussion über schlechten aufbau entbrennt, ich habe mir die spaltenbezeichnung nicht ausgedacht und ich kann daran nichts ändern, die spalten sind leider fix.
wieso sollte bei PreparedStatements die Bezeichnung von Attributen einfacher sein?
was ist aber überhaupt das Problem, was genau funktioniert nicht mit exakt welcher Fehlermeldung?
zunächst sowieso in SQL in einem DB-nahen Tool versuchen,
was geht dort oder dort auch schon nicht,
wenn es dort geht, was ist das exakt und was passiert bei genau demselben SQL in Java?
---
zum Testen wäre es übrigens angebracht, temporär eine separate Tabelle anzulegen mit einfacheren Attributen wie U#,
um nicht die ganze Zeit # doppelt zu versuchen und das unnötige USERNAME___40 mitzuschleppen
Das ist eh datenbankabhängig. Schau dir [c]DatabaseMetaData.getIdentifierQuoteString()[/c] an. Und dann vergiss es schnell wieder und nimm Prepared Statements.
> mit dem sql developer von oracle habe ich keine probleme auf diese spalten zu zugreifen
per SQL oder nur durch Herumklicken?
-----
> in der netbeans integrierten sql abfrage
nun, irgendwelche NetBeans-Tools sind auch kaum als allgemeines Java zu bezeichnen,
damit es weiter voran geht solltest du dich vielleicht mit normalen JDBC-Code beschäftigen Die JDBC-Schnittstelle
ansonsten wäre ja auch PreparedStatement keine Option,
bei JDBC kann es nur entweder funktionieren oder eine Fehlermeldung geben die du dann zusammen mit dem Code posten solltest
kannst du oder jemand anders mir noch nebenbei erklären, was da an PreparedStatements besser ist?
bei Werten in der DB verstehe ich es ja;
Java:
String sql ="Select * From x where y = '"+escape(textVariable)+"'";
vs.String sql ="Select * From x where y = ?";
preparedStatement.setString(1,textVariable);
aber wie kann das bei Attributnahmen helfen um die es hier geht oder verstehe ich das falsch?
Java:
String sql ="Select * From x where U##USERNAME___40 = 'Tommy'";
vs.String sql ="Select * From x where U##USERNAME___40 = ?";
preparedStatement.setString(1,'"Tommy");