2017-03-02 3 views

Antwort

2

Sie fügen java.util.Date in bigint Spalte ein, deshalb erhalten Sie diesen Fehler.

Verwenden Sie getTime() Methode, um Zeiten in Millisekunden zu erhalten, die lange in Bigint-Spalte eingefügt werden.

Beispiel:

Date date = ; // you have the date 
long timeInMilis = date.getTime(); 

Verwenden timeInMilis einfügen in cassandra

oder

können Sie die Spaltentyp bigint zu Zeitstempel ändern, dann können Sie java.util.Date direkt einfügen, nicht haben erhalten Zeiten in Millisekunden,

------------------------------------- 
| CQL3 data type | Java type | 
|-------------------|----------------| 
|  bigint  | long  | 
|-------------------|----------------| 
| timestamp  | java.util.Date | 
-------------------------------------- 

Quelle: http://docs.datastax.com/en/developer/java-driver/3.1/manual/

+0

so meinen Sie lange sagen Art können –

+0

Ja, hier in Bigint Spalte eingefügt werden soll, desto mehr Details http: // docs Englisch: www.datastax.com/en/developer/java - driver/3.1/manual/ –

1

Ich glaube, das Problem ist, dass Sie ein java.util.Date Objekt in einem cql bigint zu speichern versuchen. Der Typ, der in dem Java-Treiber bigint zugeordnet ist, ist ein long (siehe 'CQL to Java type mapping' Abschnitt der Dokumentation).

Angenommen, Sie möchten die Epoche Millisekunden in dieser Spalte speichern, haben Sie ein paar Optionen.

  1. Ändern der Spaltentyp timestamp welche java.util.Date MAPS (und wird/Zugriff über setTiemstamp/getTimstamp).
  2. Verwenden Sie in Verbindung mit Date.getTime(), um die Date in eine long konvertieren, die Epochen Millisekunden darstellt.
  3. Erstellen und registrieren ein custom codec die java.util.Date zu bigint abbildet, dh:
import com.datastax.driver.core.*; 

import java.util.Date; 

public class CodecTest { 

    static class DateToBigintCodec extends MappingCodec<Date, Long> { 

     DateToBigintCodec() { 
      // creates a mapping from bigint <-> Date. 
      super(TypeCodec.bigint(), Date.class); 
     } 

     @Override 
     protected Date deserialize(Long value) { 
      return new Date(value); 
     } 

     @Override 
     protected Long serialize(Date value) { 
      return value.getTime(); 
     } 
    } 

    public static void main(String args[]) { 
     TypeCodec<Date> codec = new DateToBigintCodec(); 
     Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build(); 
     try { 
      // register custom codec 
      cluster.getConfiguration().getCodecRegistry().register(codec); 

      Date date = new Date(); 
      Session session = cluster.connect(); 
      // insert Date value into column v, which is a bigint. 
      // schema: 
      // CREATE TABLE simple.tbl (k int PRIMARY KEY, v bigint) 
      PreparedStatement prepared = session.prepare("insert into simple.tbl (k, v) values (?, ?)"); 
      BoundStatement bound = prepared.bind(); 
      bound.setInt("k", 0); 
      bound.setTimestamp("v", date); 
      session.execute(bound); 

      // Retrieve column v as a Date. 
      Row row = session.execute("select v from simple.tbl").one(); 
      System.out.println(row.getTimestamp("v")); 
     } finally { 
      cluster.close(); 
     } 
    } 
} 
+0

Ich habe gerade festgestellt, dass Sie 'java entity' erwähnen, wenn Sie das Mapping - Modul verwenden, wenn Sie den Codec erstellen, wie ich ihn vorher beschrieben und registriert habe Erstellen des Mappers, dies funktioniert auch mit dem Mapper. –

Verwandte Themen