1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. IT-Infrastruktur und Administration
  3. Server & Hosting

Problem mit HSQLDB

  • CJ-Super
  • 18. November 2010 um 14:01
  • Unerledigt
  • CJ-Super
    2
    CJ-Super
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 18. November 2010 um 14:01
    • #1

    Hi,

    ich hoffe das ist der richtige Bereich dafür.

    Ich versuche mich gerade daran Java mit einer Datenbank zu verbinden. Als Datenbank habe ich HSQLDB in der Version 2.0.0 genommen. Ich habe mein Programm auch schon mit HSQL verbunden und kann auch schon Select-Anweisungen durchführen, allerdings habe ich bei einer Select-Anweisung ein Problem und ich weiß nicht warum und wie ich es lösen kann.

    Wenn ich

    "SELECT Mann, Benutzername, Passwort, Gewicht, Erstellzeit From (Nutzer INNER JOIN Programmressourcen ON Nutzer.ID = Programmressourcen.ID);"

    Benutze funktioniert das Problemlos, möchte ich allerdings ein

    "WHERE
    Nutzer.ID = 0;"

    hinten anhängen, bekomme ich auf einmal eine SQL-Exception geworfen:

    user lacks privilege or object not found: NUTZER.ID

    obwohl er diese Spalte für den JOIN ja auch findet...:coolgrim: Den gleichen Fehler bekommt er auch wenn ich

    "SELECT Nutzer.ID, Mann, Benutzername, Passwort, Gewicht, Erstellzeit From (Nutzer INNER JOIN Programmressourcen ON Nutzer.ID = Programmressourcen.ID);"

    schreibe, aber nicht bei

    "SELECT Nutzer.ID, Mann, Benutzername, Passwort, Gewicht FROM Nutzer;"


    Ich hoffe ich hab mein Problem einigermaßen verständlich dargelegt:engel:

    Ach ja, ich benutze eine Standalone HSQLDB falls es etwas nützt...

  • T.dot
    5
    T.dot
    Mitglied
    Reaktionen
    6
    Punkte
    226
    Beiträge
    44
    • 18. November 2010 um 14:34
    • #2

    ich mach nie was mit der HSQL, aber rein vom SQL her:
    "SELECT Mann, Benutzername, Passwort, Gewicht, Erstellzeit From (Nutzer INNERJOIN Programmressourcen ON Nutzer.ID = Programmressourcen.ID);"

    wenn du das where außerhalb der Klammer machst geht's nicht, da dort Nutzer nicht bekannt ist. Du joinst in der Klammer Nutzer und Programmresourcen zusammen (=> subquery) und machst dann auf diese Subquery eine Abfrage.

    Entweder:
    - sparst du dir die Klammer
    - musst du die Where-Clause in der Klammer machen
    - oder der Subquery einen Namen geben
    "SELECT Mann, Benutzername, Passwort, Gewicht, Erstellzeit From (Nutzer INNERJOIN Programmressourcen ON Nutzer.ID = Programmressourcen.ID) sub where sub.ID=123"

    Oppossom: Heavy Rock aus Nö

  • Paulchen
    1
    Paulchen
    Gast
    • 18. November 2010 um 14:42
    • #3
    Zitat von T.dot

    wenn du das where außerhalb der Klammer machst geht's nicht, da dort Nutzer nicht bekannt ist. Du joinst in der Klammer Nutzer und Programmresourcen zusammen (=> subquery) und machst dann auf diese Subquery eine Abfrage.

    Die Klammern erzeugen meines Wissens doch keine Subquery, die dienen doch nur dazu, vorzugeben, in welcher Reihenfolge die Tabellen gejoined werden sollen. Ist hier überflüssig, weil es bei zwei Tabellen ohnehin nur eine Reihenfolge gibt, in der die Tabellen gejoined werden können.

    Hab jetzt kurz mit HSQL rumgespielt. Vielleicht hilft "INNER JOIN" statt "INNERJOIN"? :winking_face:

  • CJ-Super
    2
    CJ-Super
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 18. November 2010 um 17:17
    • #4

    sry, fehler beim Kopieren, im Quelltext hab ich natürlich "INNER JOIN". Und wenn ich die gleiche Abfrage bei MYSQL eingebe funktioniert sie dort auch, warum also nicht bei HSQL obwohl doch die Version 2.0.0 SQL-92 unterstützt... Bin halt im Moment etwas ratlos, hab es im Moment so gelöst, das ich die Tabellen nicht verknüpfe, sondern einfach zwei SQL-Anfragen sende, eine zu der Tabelle Nutzer und eine zu der Tabelle Programmressourcen:

    "SELECT Mann, Benutzername, Passwort, Gewicht FROM Nutzer

    WHERE ID = 0"



    "SELECT Erstellzeit FROM Programmressourcen WHERE ID = 0"

    Und dann besorge ich mir meine Daten halt aus beiden ResultSet´s, ist aber jetzt nicht die beste Lösung und wüsste halt schon gerne was ich falsch mache. Braucht ihr noch Informationen, z.B. die Create-Anweisungen oder sonst irgendetwas oder könnt ihr euch auch keinen Reim darauf machen?

  • T.dot
    5
    T.dot
    Mitglied
    Reaktionen
    6
    Punkte
    226
    Beiträge
    44
    • 18. November 2010 um 17:49
    • #5

    Habs mal mit der aktuellen HSQL (2.0.1) ausprobiert, zwei Tabellen jeweils mit Spalten ID (integer) + name und konnte hier das Problem nicht nachvollziehen (Statements jeweils über den HSQL-Database-Manager ausgeführt):

    geht alles:
    select * from role inner join user on role.id=user.id
    select * from (role inner join user on role.id=user.id)
    select * from role inner join user on role.id=user.id where role.id=1
    select * from (role inner join user on role.id=user.id) where role.id=1

    Von wo rufst du deine Statements auf, vielleicht hats da irgendwas?

    Oppossom: Heavy Rock aus Nö

  • sutupud
    13
    sutupud
    Mitglied
    Reaktionen
    59
    Punkte
    1.659
    Beiträge
    320
    • 18. November 2010 um 20:07
    • #6

    poste doch mal die genaue fehlermeldung, die du bekommst (stack trace wenn du's in java machst), dann lässt sich vielleicht mehr sagen.

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😒😓😔😖😘😚😜😞😠😡😢😣😥😨😩😪😫😭😰😱😲😳😵😶😷

  • CJ-Super
    2
    CJ-Super
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 20. November 2010 um 14:24
    • #7

    Ich spreche die Datenbank in Java über den jdbcDriver an. Folgender Code läuft auch ohne Probleme:

    Code
    [size=10]ResultSet resultSet = [/SIZE][B][size=10][COLOR=#7f0055][size=10][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][size=10].[/SIZE][size=10][COLOR=#0000c0][size=10][COLOR=#0000c0]verbindung[/COLOR][/SIZE][/COLOR][/SIZE][size=10].executeQuery[/SIZE]
     [size=10]([/SIZE][size=10][COLOR=#2a00ff][size=10][COLOR=#2a00ff]"SELECT Mann, Benutzername, Passwort, Gewicht, "[/COLOR][/SIZE][/COLOR][/SIZE][size=10] +[/SIZE]
    
    
    [align=left][size=10][COLOR=#2a00ff][size=10][COLOR=#2a00ff]"Erstellzeit From (Nutzer INNER JOIN Programmressourcen "[/COLOR][/SIZE][/COLOR][/SIZE][size=10] +[/SIZE] 
    [size=10][COLOR=#2a00ff][size=10][COLOR=#2a00ff]"ON Nutzer.ID = Programmressourcen.ID)"[/COLOR][/SIZE][/COLOR][/SIZE][size=10]);[/SIZE][/align]


    Wenn ich aber eine Bedingung anhänge bekomme ich eine Exception geworfen. Die lokale Variable ID,. die angehängt wird, ist dabei die ID die gesucht ist.


    Code
    [align=left][size=10][size=10]ResultSet resultSet2 = [/SIZE][/SIZE][size=10][B][size=10][COLOR=#7f0055][size=10][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][size=10].[/SIZE][size=10][COLOR=#0000c0][size=10][COLOR=#0000c0]verbindung[/COLOR][/SIZE][/COLOR][/SIZE][size=10].executeQuery[/SIZE][/SIZE][size=10] 
    [size=10]([/SIZE][size=10][COLOR=#2a00ff][size=10][COLOR=#2a00ff]"SELECT Mann, Benutzername, Passwort, Gewicht, "[/COLOR][/SIZE][/COLOR][/SIZE][size=10] +[/SIZE]
    
    
    [size=10][COLOR=#2a00ff][size=10][COLOR=#2a00ff]"Erstellzeit From (Nutzer INNER JOIN Programmressourcen "[/COLOR][/SIZE][/COLOR][/SIZE][size=10] +[/SIZE] 
    [size=10][COLOR=#2a00ff][size=10][COLOR=#2a00ff]"ON Nutzer.ID = Programmressourcen.ID) WHERE Nutzer.ID = "[/COLOR][/SIZE][/COLOR][/SIZE][size=10] + ID);[/SIZE][/align]
    [/SIZE]


    Lasse ich den Code mit resultSet2 durchlaufen bekomme ich folgende Exception:


    Code
    [align=left][U][size=10][COLOR=#000080][size=10][COLOR=#000080]java.sql.SQLException[/COLOR][/SIZE][/COLOR][/SIZE][/U][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000]: user lacks privilege or object not found: NUTZER.ID[/COLOR][/SIZE][/COLOR][/SIZE] [size=10][COLOR=#ff0000][size=10][COLOR=#ff0000]at org.hsqldb.jdbc.Util.sqlException(Unknown Source)[/COLOR][/SIZE][size=10][COLOR=#ff0000]at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)[/COLOR][/SIZE][align=left][size=10][COLOR=#ff0000]at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)[/COLOR][/SIZE][size=10][COLOR=#ff0000]at cocktail_2_0.datenbank.Datenbankverbindung.executeQuery([/COLOR][/SIZE][/COLOR][/SIZE][U][size=10][COLOR=#000080][size=10][COLOR=#000080]Datenbankverbindung.java:50[/COLOR][/SIZE][/COLOR][/SIZE][/U][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000])[/COLOR][/SIZE][/COLOR][/SIZE] [/align][align=left][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000]at cocktail_2_0.datenbank.Datenbank.getNutzer([/COLOR][/SIZE][/COLOR][/SIZE][U][size=10][COLOR=#000080][size=10][COLOR=#000080]Datenbank.java:593[/COLOR][/SIZE][/COLOR][/SIZE][/U][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000])[/COLOR][/SIZE][/COLOR][/SIZE][/align][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000]at cocktail_2_0.system.CocktailSystem.loadCocktailprogramm([/COLOR][/SIZE][/COLOR][/SIZE][U][size=10][COLOR=#000080][size=10][COLOR=#000080]CocktailSystem.java:36[/COLOR][/SIZE][/COLOR][/SIZE][/U][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000])[/COLOR][/SIZE][/COLOR][/SIZE][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000]at cocktail_2_0.system.CocktailSystem.<init>([/COLOR][/SIZE][/COLOR][/SIZE][U][size=10][COLOR=#000080][size=10][COLOR=#000080]CocktailSystem.java:31[/COLOR][/SIZE][/COLOR][/SIZE][/U][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000])[/COLOR][/SIZE][/COLOR][/SIZE][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000]at cocktail_2_0.gui.Hauptbildschirm.cocktailSystemErzeugen([/COLOR][/SIZE][/COLOR][/SIZE][U][size=10][COLOR=#000080][size=10][COLOR=#000080]Hauptbildschirm.java:190[/COLOR][/SIZE][/COLOR][/SIZE][/U][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000])[/COLOR][/SIZE][/COLOR][/SIZE][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000]at cocktail_2_0.gui.Hauptbildschirm.<init>([/COLOR][/SIZE][/COLOR][/SIZE][U][size=10][COLOR=#000080][size=10][COLOR=#000080]Hauptbildschirm.java:47[/COLOR][/SIZE][/COLOR][/SIZE][/U][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000])[/COLOR][/SIZE][/COLOR][/SIZE][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000]at cocktail_2_0.gui.Hauptbildschirm.main([/COLOR][/SIZE][/COLOR][/SIZE][U][size=10][COLOR=#000080][size=10][COLOR=#000080]Hauptbildschirm.java:43[/COLOR][/SIZE][/COLOR][/SIZE][/U][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000])[/COLOR][/SIZE][/COLOR][/SIZE][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000]Caused by: [/COLOR][/SIZE][/COLOR][/SIZE][align=left][U][size=10][COLOR=#000080][size=10][COLOR=#000080]org.hsqldb.HsqlException[/COLOR][/SIZE][/COLOR][/SIZE][/U][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000]: user lacks privilege or object not found: NUTZER.ID[/COLOR][/SIZE][/COLOR][/SIZE][/align][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000]at org.hsqldb.error.Error.error(Unknown Source)[/COLOR][/SIZE][align=left][size=10][COLOR=#ff0000]at org.hsqldb.ExpressionColumn.checkColumnsResolved(Unknown Source)[/COLOR][/SIZE][align=left][size=10][COLOR=#ff0000]at org.hsqldb.QueryExpression.resolve(Unknown Source)[/COLOR][/SIZE][size=10][COLOR=#ff0000]at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)[/COLOR][/SIZE][size=10][COLOR=#ff0000]at org.hsqldb.ParserCommand.compilePart(Unknown Source)[/COLOR][/SIZE][size=10][COLOR=#ff0000]at org.hsqldb.ParserCommand.compileStatements(Unknown Source)[/COLOR][/SIZE][size=10][COLOR=#ff0000]at org.hsqldb.Session.executeDirectStatement(Unknown Source)[/COLOR][/SIZE][size=10][COLOR=#ff0000]at org.hsqldb.Session.execute(Unknown Source)[/COLOR][/SIZE][/align][/align][/COLOR][/SIZE][size=10][COLOR=#ff0000][size=10][COLOR=#ff0000]... 9 more[/COLOR][/SIZE][/COLOR][/SIZE]


    [/SIZE]
    [/align]

  • sutupud
    13
    sutupud
    Mitglied
    Reaktionen
    59
    Punkte
    1.659
    Beiträge
    320
    • 20. November 2010 um 15:35
    • #8

    weg mit den klammern im sql-statement!

    interessanterweise geben hsql 1.8 und 2.0 unterschiedliche fehlermeldungen in diesem fall:
    1.8.0: java.sql.SQLException: Unexpected token T1, requires SELECT in statement [select * from (t1]
    2.0.0: java.sql.SQLException: user lacks privilege or object not found: ID

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    &#128513;&#128514;&#128515;&#128516;&#128517;&#128518;&#128519;&#128520;&#128521;&#128522;&#128523;&#128524;&#128525;&#128526;&#128527;&#128528;&#128530;&#128531;&#128532;&#128534;&#128536;&#128538;&#128540;&#128542;&#128544;&#128545;&#128546;&#128547;&#128549;&#128552;&#128553;&#128554;&#128555;&#128557;&#128560;&#128561;&#128562;&#128563;&#128565;&#128566;&#128567;

  • CJ-Super
    2
    CJ-Super
    Mitglied
    Punkte
    25
    Beiträge
    4
    • 20. November 2010 um 16:36
    • #9

    Ok, jetzt funtzt es:D

    THX

  • Maximilian Rupp 27. Dezember 2024 um 12:02

    Hat das Thema aus dem Forum Datenbanken nach Serverdienste verschoben.
  • Maximilian Rupp 5. Januar 2025 um 01:50

    Hat das Thema aus dem Forum Serverdienste nach Server & Hosting verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung