Gewusst wie: speichern von Java-byte-in einen bytea in PostgreSQL?

Bin ich immer ein problem wenn ich versuche zum einfügen einer variable vom Typ "byte" in Java eine variable vom type "bytea" im PostgreSQL.

Dies ist meine Tabelle in postgresql:

CREATE TABLE mesa (
   id_mesa              serial PRIMARY KEY,
   tag                  varchar(50),
   modelo               varchar(50),
   menor_complemento    smallint NOT NULL,
   peso_min             smallint NOT NULL,
   peso_max             smallint NOT NULL,
   som                  bytea NOT NULL,
   rotina               bytea NOT NULL,
   address64bits        bytea NOT NULL UNIQUE
);

mein code in Java ist folgende:

private Mesa mesa;
//construtor
public MesaDAO (Mesa mesa) {
    this.mesa = mesa;
}
(...)
String stm = "INSERT INTO mesa(tag, modelo, menor_complemento, peso_min, "
            + "peso_max, som, rotina, address64bits) "
            + "VALUES(?,?,?,?,?,?,?,?)";
    try {
        pst = con.prepareStatement(stm);
        pst.setString(1, mesa.getTag());
        pst.setString(2, mesa.getModelo());
        pst.setInt(3, mesa.getMenorComplemento());
        pst.setInt(4, mesa.getPesoMin());
        pst.setInt(5, mesa.getPesoMax());
        pst.setByte(6, mesa.getSom());
        pst.setByte(7, mesa.getRotina());
        pst.setBytes(8, mesa.getAddress64Bits());
        pst.executeUpdate();
        (...)

Mesa-Typen sind:

public class Mesa{
  private Integer idMesa;
  private String tag;
  private String modelo;
  private Integer menorComplemento;
  private Integer pesoMin;
  private Integer pesoMax;
  private byte som;
  private byte rotina;
  private byte[] address64Bits;
  (...)
}

Dann, wenn ich versuche, etwas einfügen, es wirft ein PSQLException, die besagt, dass der Spalte "som" ist ein "bytea" aber der Ausdruck ist ein "smallint". Ich denke auch, dass es gonna haben, die gleichen SQLException auf die beiden folgenden Zeilen nach.

So, ich weiß nicht, wie zu beheben, wenn mir jemand helfen könnte, werde ich froh sein!

Vielen Dank im Voraus,

EDIT:

Danke Jungs für die Hilfe, werde ich Ihnen hier die Lösung: ändern Sie die variable "som" und "rotina" , "byte[]" und geben Sie dann die pst.getBytes(...) anstelle von pst.getByte(...).

Klären:

Ich bin mit XBee (API-Modus), so brauche ich zum senden des byte-Wert über den serial port. So war ich einfach nur überprüfen, ob das, was ich immer aus der Datenbank ist der gleiche Wert, dass ich dort eingefügt. Im Schluss, ich will wissen, wie sich zu erholen die bytes von der Datenbank um Sie zu senden über die serielle Schnittstelle.

Kann man den Typ des Objekts mesa pls.
wenn som ist ein byte dann, warum Sie wollen, um zu speichern, wie eine byte[] (was bytea ist)? Aus Ihren Java-Variablen som sollte eine Spalte mit Typ - integer
Wenn Sie wirklich gespeichert werden müssen ein einzelnes byte als BLOB (was bytea ist), die Sie verwenden müssen setBytes() übergabe eines byte[] nicht setByte()
Ja, ich bin nicht sicher, ob bytea ist immer byte[]. Ich dachte, es könnte 1 byte zu.
Was erwarten Sie vom Druck ein byte-array? Und wie kann ein byte-array möglicherweise formatiert werden? Ein byte-array ist nur, dass: eine Reihe von raw-bytes. Sie brauchen Sie, um zu sagen, wie es geht, interpretiert werden.

InformationsquelleAutor renatogbp | 2014-01-22

Schreibe einen Kommentar