Announcement

Collapse
No announcement yet.

Timestamp

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

  • Timestamp

    hey leute,

    wenn ich in meiner tabelle mehrere felder mit timestamp machen will, funktioniert das nicht... aber wieso? er sagt mir, dass ich nur ein timestamp-feld pro tabelle machen darf?! in mysql funktionierts ja auch mit mehreren!

    aber egal, das is nicht so schlimm! denn eigentlich ist der timestamp ja nicht mehr als eine 11-stellige integer-zahl!

    wenn ich aber jetzt den timestamp in ein int oder bigint feld speicher, zeigt er mir in der tabelle immer eine minuszahl an?! dabei hat die ja nur 11 stellen und das sollte der doch packen??

    lg,
    alex

  • #2
    Hallo Alex,

    lies Dir am besten mal in der BOL das Thema zu TimeStamp durch.
    Timestamp is deprecated, man sollte eher RowVersion verwenden; das erklärt es auch besser,
    Und damit sind wir schon beim Grund, warum man nur ein TimeStamp = RowVersion Feld anlegen kann; wie könnte eine Zeile 3 Rowversions haben.

    Und es ist auch eigentlich kein INT Wert, sondern ein Binary(8) Wert.
    Und da es beim kleinsten Wert für Int/Binary anfängt hochzuzählen, sind die ersten Werte halt negativ.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Originally posted by leuchtdiode View Post
      wenn ich in meiner tabelle mehrere felder mit timestamp machen will, funktioniert das nicht... aber wieso? er sagt mir, dass ich nur ein timestamp-feld pro tabelle machen darf?!
      Ist halt eine vorgesehen Einschränkung beim MS SQL-Server

      Originally posted by leuchtdiode View Post
      in mysql funktionierts ja auch mit mehreren!
      Ist halt ein anderes DBMS.

      Comment


      • #4
        Originally posted by O. Helper View Post
        Hallo Alex,

        lies Dir am besten mal in der BOL das Thema zu TimeStamp durch.
        Timestamp is deprecated, man sollte eher RowVersion verwenden; das erklärt es auch besser,
        Und damit sind wir schon beim Grund, warum man nur ein TimeStamp = RowVersion Feld anlegen kann; wie könnte eine Zeile 3 Rowversions haben.

        Und es ist auch eigentlich kein INT Wert, sondern ein Binary(8) Wert.
        Und da es beim kleinsten Wert für Int/Binary anfängt hochzuzählen, sind die ersten Werte halt negativ.
        ja aber wenn ich jetzt - timestamp ganz weggelassen - eine int-zahl in ein bigint-feld schreibe (z.B.: 12703746581), dann dürfte er die doch nicht negativ anzeigen oder?

        lg,
        alex

        Comment


        • #5
          Wenn Du einen positiven INT Wert in BIGINT wandelst, wird der Wert nicht verändert, er bleibt positiv.

          Hast Du ein Beispiel, wie/wo es passiert?
          Olaf Helper

          <Blog> <Xing>
          * cogito ergo sum * errare humanum est * quote erat demonstrandum *
          Wenn ich denke, ist das ein Fehler und das beweise ich täglich

          Comment


          • #6
            Originally posted by O. Helper View Post
            Wenn Du einen positiven INT Wert in BIGINT wandelst, wird der Wert nicht verändert, er bleibt positiv.

            Hast Du ein Beispiel, wie/wo es passiert?

            hallo!

            hab das problem schon gelöst! ich bekomm aus der notes-datenbank ein DateTime Objekt... wenn mir von dem den timestamp hole, ist es vom datentyp long! wenn ich den nach int parse, bekomm ich eine minuszahl! is klar, weil int ja nur 32 bit hat und long 64! und timetamp passt nicht in 32 rein!

            hat wer eine idee, wie ich den long wert genaugleich umwandeln kann, sodass es ein int wert ist?

            EDIT: jetzt hab ich die funktion beim preparedstatement gefunden: setLong(int parameter, long x)... jetzt steht in der API, dass ich so die long-zahl in das bigint-feld der DB schreiben kann! das wär genau das was ich brauche... beim update bekomm ich aber die meldung: Error converting data type bigint to int.

            lg,
            alex
            Zuletzt editiert von leuchtdiode; 22.07.2010, 09:57.

            Comment


            • #7
              Originally posted by leuchtdiode View Post
              hallo!

              hab das problem schon gelöst! ich bekomm aus der notes-datenbank ein DateTime Objekt... wenn mir von dem den timestamp hole, ist es vom datentyp long! wenn ich den nach int parse, bekomm ich eine minuszahl! is klar, weil int ja nur 32 bit hat und long 64! und timetamp passt nicht in 32 rein!

              hat wer eine idee, wie ich den long wert genaugleich umwandeln kann, sodass es ein int wert ist?

              EDIT: jetzt hab ich die funktion beim preparedstatement gefunden: setLong(int parameter, long x)... jetzt steht in der API, dass ich so die long-zahl in das bigint-feld der DB schreiben kann! das wär genau das was ich brauche... beim update bekomm ich aber die meldung: Error converting data type bigint to int.

              lg,
              alex

              so leute, hab alles gelöst!

              ich verwende die methode setLong() beim PreparedStatement und die DB-felder sind auf bigint eingestellt! so kann ich einfach den timestamp (long) in die DB speichern!

              die fehlermeldung resultierte daraus, dass ich bei meiner stored procedure die parameter noch als int (von vorherigen versuchen) eingestellt hatte! hab diese auf bigint geändert und viola, es funktioniert!

              lg,
              alex

              Comment

              Working...
              X