Announcement

Collapse
No announcement yet.

Timestamp "kürzen"

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

  • Timestamp "kürzen"

    Hallo zusammen,

    ich habe hier eine Access-Datenbank vorliegen, die 2 "Datum/Uhrzeit" Felder besitzt.
    Diese (und weitere Felder) möchte ich gerne in eine weitere Access Tabelle einfach kopieren mit Hilfe von JAVA.

    Jetzt habe ich das so gemacht, dass ich die Daten per SQL herauslese und in eine Variable vom Type Timestamp stecke.
    Leider fügt er mir dann anschließend den Datensatz nicht ein.
    Ich bekomme die Meldung:
    Unzulässiges Einklammern des Namens '[2008-11-30 14:32:21.0]'

    Ich denke, der Timestamp ist zu lang. Die Nanosekunde hinten dran sieht man in Access nämlich nicht.
    Außerdem hat er mir das Datum umformatiert.

    Kann ich das irgendwie elegant kürzen und ändern, so dass das Datum das Format:
    30.11.2008 14:32:21
    wieder hat?

    Danke

  • #2
    Unzulässiges Einklammern des Namens
    ist eine Access-Fehlermeldung und keine Javameldung.
    Würde das in einen String lesen und die [] entfernen
    Christian

    Comment


    • #3
      Hi,

      Welchen Typ hat den 'Timestamp'-Feld in der Access-Datenbank?
      Ist es vom Typ String oder Timestamp oder?

      Das umwandeln des Timestamps in einen formatierten String könnte so aussehen:
      Code:
      Timestamp timestamp = new Timestamp(System.currentTimeMillis());
      SimpleDateFormat sdf = new SimpleDateFormat( "dd.MM.yyyy HH:mm:ss" );
       String timestamp = sdf.format( timestamp );
      MfG

      Comment


      • #4
        Originally posted by lulog1 View Post
        Hi,

        Welchen Typ hat den 'Timestamp'-Feld in der Access-Datenbank?
        Ist es vom Typ String oder Timestamp oder?

        Das umwandeln des Timestamps in einen formatierten String könnte so aussehen:
        Code:
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        SimpleDateFormat sdf = new SimpleDateFormat( "dd.MM.yyyy HH:mm:ss" );
         String timestamp = sdf.format( timestamp );
        Steht oben "Datum/Uhrzeit" heißt das dort.
        Der String selbst beinhaltet die [] nicht. Das macht die Fehlermeldung.

        Aber ich habs mit String hinbekommen. Zumindest glaube ich das.

        Jetzt hab ich die Meldung:
        Das Datenbankmodul kann '' nicht finden. Stellen Sie sicher, dass es sich um einen gültigen Parameter oder Alias-Namen handelt, der keine ungültigen Zeichen oder falsche Zeichensetzung enthält und dessen Name nicht zu lang ist.

        Weiß wer, was er für ein Problem jezt hat? Wenn ich das Statement in Access dirket ausführe, meckert er nicht. Er sagt auch nicht, was er nicht finden kann. Nur die leeren Hochkommas.
        Kann es damit zusammenhägen?

        So langsam verzweifel ich. Ich hab noch nie so lange an einem Insert gesessen.

        Comment


        • #5
          Es kann durchaus mit '' zusammenhängen.

          Baust Du den SQL-Befehl von Hand auf oder verwendest Du ein Prepare-Statement?
          Kann man den SQL-Befehl mal sehen?
          MfG

          Comment


          • #6
            Originally posted by lulog1 View Post
            Es kann durchaus mit '' zusammenhängen.

            Baust Du den SQL-Befehl von Hand auf oder verwendest Du ein Prepare-Statement?
            Kann man den SQL-Befehl mal sehen?

            Ich baue mir das SQL per JAVA zusammen.
            Bin leider nicht so lange bei JAVA dabei und stell mich im Moment ziemlich dumm an.

            Ich hab erstmal jetzt herausgefunden, dass es tatsächlich am Datum liegt.
            Einfach nur einen String nehmen interessiert Access nicht.

            Was zum korrekten konvertieren hab ich allerdings nicht gefunden.

            Hmmm... es ist ein ganz normales INSERT, was genau brauchst du denn davon?

            Comment


            • #7
              Preparedstatements können Dir das Leben erleichtern.
              Sie übernehmen die Transformation in den korrekten SQL-Befehl.
              Alles was Du tun mußt, Ihnen die Parameter/Werte zu übergeben.

              So könnte ein Beispiel aussehen:
              Code:
              Class.forName(driver);
              con = DriverManager.getConnection(connection);
              con.setAutoCommit(false);
              String sql ="insert into Employees (FirstName,LastName) values(?,?)";
              pst = con.prepareStatement(sql);
              
              pst.setString(1, "Girish");
              pst.setString(2, "tewari");
              
              pst.executeUpdate();
              pst.close();
              Hier kannst Du nachlesen:
              MfG

              Comment


              • #8
                Originally posted by lulog1 View Post
                Preparedstatements können Dir das Leben erleichtern.
                Sie übernehmen die Transformation in den korrekten SQL-Befehl.
                Alles was Du tun mußt, Ihnen die Parameter/Werte zu übergeben.

                So könnte ein Beispiel aussehen:
                Code:
                Class.forName(driver);
                con = DriverManager.getConnection(connection);
                con.setAutoCommit(false);
                String sql ="insert into Employees (FirstName,LastName) values(?,?)";
                pst = con.prepareStatement(sql);
                
                pst.setString(1, "Girish");
                pst.setString(2, "tewari");
                
                pst.executeUpdate();
                pst.close();
                Hier kannst Du nachlesen:

                Oh, das kannte ich noch nicht.
                Das sieht ja extrem praktisch aus.

                Ich bau meinen Code mal um, vielleicht klappt es ja.

                Comment


                • #9
                  Ok, Code umgebaut, mit dem Resultat, dass folgendes passiert:

                  Datentypen in Kriterienausdruck unverträglich.

                  Ich tippe mal wieder auf das Datum. Da ich jeweils immer eine Raute vor und hinter das Datum setzen muss (Access Macke wohl), hab ich anstatt einem Datumsfeld ein Stringfeld.

                  Ich befülle die betreffenden Werte so:
                  stmt.setString(1, zeitpunkt);

                  Stimmt ja nicht, weils ein Date sein muss. Wie bekomme ich aus dem String wieder ein Date? Mit den blöden "#" davor?

                  Ich werde wahnsinnig.

                  Comment


                  • #10
                    Du mußt den richtigen Datentyp setzen.
                    Daher fragte ich, welchen Typ hat dein Feld.

                    PrepareStatement hat Methoden für viele Typen.
                    z.B: setDate( Date ), setTimestamp( Timestamp ), setInt( Integer ), ... .
                    MfG

                    Comment


                    • #11
                      Das ist ja mein Problem.
                      Access hat das Feld Datum/Uhrzeit. Sieht so aus: 19.11.2008 13:36:00

                      Jetzt hab ich herausgefunden, wenn man mit einer anderen Programmiersprache (seis VB, JAVA, etc..) ein Datum einfügen möchte, so muss man davor und dahinter ein "#" setzen: #19.11.2008 13:36:00#

                      Das bekomme ich ja nur mit einem String hin. Ich denke sämtliche Date und Timestamp-Funktionen werden mir da den Dienst quittieren.
                      Deswegen versuche ich ja, diesen seltsamen String in das Datenbankfeld wieder einzufügen.

                      Hat wer noch Ideen? Vielleicht ein Handbuch, wie man Inserts mit Access macht in JAVA? Ich google nebenher echt wie dumm und finde keine Antwort.

                      Ich hab gerade auch mal die beiden Datumsfelder rausgenommen, damit klappts wunderbar. Es liegt wirklich an dem Datum.

                      Comment


                      • #12
                        Ach ja. So kannst Du aus einem String ein Date machen.

                        Code:
                        String dateStr = "10.10.2010 12:30:00";
                        SimpleDateFormat sdf = new SimpleDateFormat( "dd.MM.yyyy HH:mm:ss" );
                        Date date = sdf.parse( dateStr );
                        Im Constructor von SimpleDateFormat gibst Du das erwartete String-Format an.
                        Mit der Methode parse() erzeugst Du dann das Datum.

                        Sie auch hier.
                        MfG

                        Comment


                        • #13
                          Haut er mir dann nicht wieder die "#" weg?
                          Die müssen da ja leider rein.

                          Comment


                          • #14
                            Du erhälst ein Java-Date Objekt.

                            Hast Du mal propiert irgendein Datum mittels PrepareStatement zu setzen?
                            Code:
                            java.sql.Date temp=new java.sql.Date(new java.util.Date().getTime());
                            prepStmt.setDate( x, temp);
                            Normallerweise sollte ein 'prepStmt.setDate()' Dein Datum korrekt setzen.
                            MfG

                            Comment

                            Working...
                            X