Announcement

Collapse
No announcement yet.

ResultSet getInt(Int column) wirft SQLException

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

  • ResultSet getInt(Int column) wirft SQLException

    hallo,

    ich mache bestimmt einen ganz doofen Fehler, leider habe ich keinen Plan wo oder wie ich weiter komme.

    meine DB:
    Code:
    CREATE TABLE IF NOT EXISTS `punkte` (
      `user` mediumtext NOT NULL,
      `moral` int(11) DEFAULT '0',
      `objectiv` int(11) DEFAULT '0',
      `male` int(11) DEFAULT '0',
      `faith` int(11) DEFAULT '0'
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    INSERT INTO `punkte` (`user`, `moral`, `objectiv`, `male`, `faith`) VALUES
    ('stefan', 7, 3, 9, 2);
    mein ResultSet kommt aus:
    Code:
    SELECT moral FROM punkte
    wenn ich dann aus dem ResultSet mit getInt(1) den Eintrag in 'moral' lesen möchte, wirft es mir einen 1055:
    Code:
    java.sql.SQLException
            at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
            at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
            at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
            at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:815)
            at com.mysql.jdbc.UpdatableResultSet.checkRowPos(UpdatableResultSet.java:226)
            at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2593)

    Vielleicht ist ja auch etwas an meiner Datenbank Mist. Ich kenne mich mit SQL nicht so gut aus... bin "nur" Java Programmierer.

    Was ich nicht verstehe ist die Angabe der column (Spalte) in der getInt-Methode. Ich habe doch nur eine Spalte ausgelesen.

    Und eigentlich wollte ich sofort den Wert direkt aus der DB mit Folgendem holen:
    Code:
    SELECT moral FROM punkte WHERE user = 'stefan'
    ... nur wie kann ich dann den Wert auslesen? Außer getInt(int column) gibt es da nichts und schon gar nicht ohne diesen doofen Parameter, den ich ja nicht benötige wenn ich nur einen Wert in meinem ResultSet habe.

    Super, wenn mir das einer erklären würde.

    EDIT
    Überschrift geändert
    Christian
    Zuletzt editiert von Christian Marquardt; 18.01.2010, 11:11.

  • #2
    Ich kenne mich mit SQL nicht so gut aus... bin "nur" Java Programmierer.
    du bist vollkommen sicher, dass er dir einen MySQL Fehler 1055 ausgibt und nicht vielmehr eine Exception in deinem Javaprogramm in der Klasse SQLError an Zeile 1055 auftritt (auch wenn das jetzt nicht deine Klasse ist)? Du solltest dir den vollständigen StackTrace ansehen um die fehlerhafte Stelle in deinem Programm zu finden. Man spricht in Java und anderen Sprachen davon das eine Exception geworfen wird. Dabei wird jedoch nie die Zeilennummer angegeben. Das würde den Informationsaustausch mit anderen (wie hier) schwierig gestalten. Man nutzt eher den Namen der Execption....

    Des Weiteren ist ResultSet eine Javaklasse. Beschrieben ist sie hier

    http://java.sun.com/j2se/1.4.2/docs/...ResultSet.html

    Außer getInt(int column) gibt es da nichts und schon gar nicht ohne diesen doofen Parameter, den ich ja nicht benötige wenn ich nur einen Wert in meinem ResultSet habe.
    Warum solltest du ihn nicht benötigen. Bloß weil du jetzt 1 Column hast?? Wie sollte die Methode heissen, wenn du mehr als eine Column hast? Ziel der Methode ist es, einen int zurück zu liefern. Daher hat sie ihren Namen, egal ob jetzt eine oder mehrere im ResultSet sind. Weiterhin hast du keinen Wert in deinem ResultSet, sondern eben ein Ergebnisdatensatz mit einer Column. Das kann bei anderen Abfragen anders aussehen

    Und eigentlich wollte ich sofort den Wert direkt aus der DB mit Folgendem holen:

    Code:
    SELECT moral FROM punkte WHERE user = 'stefan'

    Dann würde ich das so tun.

    ... nur wie kann ich dann den Wert auslesen?
    Mit dem Resultset....und getInt()

    Vielleicht ist ja auch etwas an meiner Datenbank Mist.
    Ich kenne mich mit SQL nicht so gut aus...
    Dann würde ich mir die GUI-Tools von MySQl downloaden und prüfen wie die DB aussieht

    Alles in allem gehört die Frage in JAVA-Forum hier. Mit dem entsprechenden Java-Quellcode
    Zuletzt editiert von Christian Marquardt; 18.01.2010, 08:03. Reason: Rechtschreibung
    Christian

    Comment


    • #3
      Hallo,
      Originally posted by allapow View Post
      ...wenn ich dann aus dem ResultSet mit getInt(1) den Eintrag in 'moral' lesen möchte, wirft es mir einen 1055:
      Vlt. muß das ja auch getInt(0) heißen, um auf die erste Spalte zuzugreifen. Solche Indizes beginnen häufig bei 0 und nicht bei 1!

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Originally posted by Falk Prüfer View Post
        Hallo,


        Vlt. muß das ja auch getInt(0) heißen, um auf die erste Spalte zuzugreifen. Solche Indizes beginnen häufig bei 0 und nicht bei 1!

        Gruß Falk


        getInt

        public int getInt(int columnIndex) throws SQLExceptionRetrieves the value of the designated column in the current row of this ResultSet object as an int in the Java programming language.

        Parameters:
        columnIndex - the first column is 1, the second is 2, ...

        Returns: the column value; if the value is SQL NULL, the value returned is 0

        Throws: SQLException - if a database access error occurs
        Christian

        Comment


        • #5
          OK, war ja nur ne Idee, bin eben kein Java-Programmierer...
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            danke euch für das Interesse. Mein Problem hat sich gelöst.

            MySQL wusste nicht in welcher Reihe es ist (es hätten ja auch mehrere Reihen im ResultSet sein können).

            Mit first() gehe ich in die erste Zeile. Danach ein getInt(1) und ich bekomme mein Ergebnis.

            Comment


            • #7
              Weniger liegt das an MySQL, als am lesen der Doku

              Initially the cursor is positioned before the first row. The next/first/absolute method moves the cursor to the row
              Christian

              Comment


              • #8
                stimmt, es liegt natürlich nicht an MySQL ;-)

                Comment

                Working...
                X