Announcement

Collapse
No announcement yet.

RowSetDynaClass fehler bei umbenannter spalte

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • RowSetDynaClass fehler bei umbenannter spalte

    Hallo,

    ich habe folgendes problem,
    wenn ich ein SQL statement absetze in dem ich die spalte umbenenne

    Code:
    rs = oStatement.executeQuery(SELECT a.kurzartikel as artikel 
    FROM kurzartikel);
    
    this.oRowSetDynaClass = new RowSetDynaClass(rs);
    Das führt bei mi rzu einem Fehler SQLexception unkown column kurzartikel aber nur wenn ich kurzartikel in artikel umbenne.

    Warum ist das so und was kann ich dagegen tun?

  • #2
    Ich verstehe nicht genau was du mit umbenennen meinst, aber Sinn und Zweck dieser Klasse ist es, das Statement abzusetzen und dann das Resultset zu bekommen und beide zu schließen.

    Wenn du jetzt an der Tabelle etwas änderst, ziehst du dem Rowset die Beine weg.
    Christian

    Comment


    • #3
      Mit umbenennen meine ich den spaltennamen von kurzartikel in artikel
      zu ändern

      -->Select kurzartikel As artikel<--

      Comment


      • #4
        Umbenennen?? Wo wird da was umbenannt? -> Siehe Alias http://www.1keydata.com/sql/sql-as.html

        Vielleicht zeigst du mal den Code. O.a. Code kann es ja nicht sein, da dort zumindestens die " fehlen
        Christian

        Comment


        • #5
          Das führt bei mi rzu einem Fehler SQLexception unkown column kurzartikel aber nur wenn ich kurzartikel in artikel umbenne.

          Warum ist das so und was kann ich dagegen tun?
          Du benennst nicht die Spalte um, sondern vergiebst einen Spaltenalias. Ab diesem Zeitpunkt kannst Du die Spalte nicht mehr unter ihrem alten Namen abfragen sondern musst den Spaltenalias verwenden.

          Lösung: Du läßt den Alias weg oder frägst auf Artikel ab oder verwendest nicht den Spaltennamen sondern den Spaltenindex zur Abfrage des Wertes.

          Dim
          Zitat Tom Kyte:
          I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

          Comment


          • #6
            @Dimitri du hast mein Problem verstanden prima.

            Mit umbennen meinte ich einen neuen alias vergeben.
            Das eigentliche problem ist aber das die von mir geposteten codezeilen einen Fehler verursachen, obwohl nicht auf die Spalte artikel oder kurzartikel zugegriffen wird.

            Von mir aus poste ich auch die ganze funktion
            inhalt von query ist "SELECT a.kurzartikel as artikel
            FROM kurzartikel"

            Code:
            	public void foo(String sql_query){
            		ResultSet rs;
            		
                    try {
                        oConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "benutzernamen", "password");
                        oStatement = oConnection.createStatement();
                        rs = oStatement.executeQuery(sql_query);
            
                        this.oRowSetDynaClass = new RowSetDynaClass(rs); //diese Zeile löst die Exception aus
            
                    } catch(SQLException e) {
                        e.printStackTrace();
                    } finally {
                        try { oResultSet.close(); } catch(Exception e) { }
                        try { oStatement.close(); } catch(Exception e) { }
                        try { oConnection.close(); } catch(Exception e) { }
                    }
            	}

            Comment


            • #7
              Die Klasse wirft im Konstruktor eine SQLExecption, wenn ....

              if the metadata for this result set cannot be introspected
              Christian

              Comment


              • #8
                Nach diesem Hinweis von Christian gibt es m. M. nach drei Möglichkeiten:
                1. Die Klasse unterstützt keine Spaltenaliase
                2. Die Klasse hat einen Bug
                3. Es gibt einen Bug in der MetaData Implementierung des mysql jdbc Treibers.

                Auf jeden Fall hast Du dann keinen direkten Einfluß darauf uns kannst nur hoffen, dass es evtl. eine neuere (oder ältere je nachdem) Version gibt, mit der es funktioniert. Ich persönlich halte 2. oder 3. für die wahrscheinlichste Ursache.

                Dim
                Zitat Tom Kyte:
                I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

                Comment


                • #9
                  Schade ich hätte mit halt eine Lösung gewünscht :-(

                  Jetzt weiss ich wenigstens das es nicht geht, was ausser meiner sicht ziemlich unnötig ist, was interessiert die RowSetDynaClass Klasse ob ich ein alias vergebe oder nicht.

                  Comment


                  • #10
                    Schon mal über bequemes arbeiten mit einer Persitenz-API nachgedacht..

                    https://www.hibernate.org/
                    Christian

                    Comment

                    Working...
                    X