How to store byte from Java into a bytea in PostgreSQL?
Code Java by PostgreSQL
pst.setBinaryStream(6, mesa.getSom());
pst.setBinaryStream(7, mesa.getRotina());
pst.setBinaryStream(8, mesa.getAddress64Bits());`
Renato Pereira
Updated on August 25, 2020Comments
-
Renato Pereira almost 4 years
I am getting a problem when I try to insert a variable of type "byte" in Java into a variable of type "bytea" in PostgreSQL.
This is my table 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 );
my code in Java is the following:
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(); (...)
The mesa types are:
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; (...) }
Then, when I try to insert something it throws a PSQLException stating that the column "som" is a "bytea" but the expression is a "smallint". I also think it gonna have the same SQLException on the following two lines after that one.
So I don't know how to fix that, if someone could help me I will be glad!
Thank you in advance,
EDIT:
Thanks guys for helping me, I will provide the solution here: change the variable "som" and "rotina" to "byte[]" type and then use pst.getBytes(...) instead of pst.getByte(...).
Clarifying:
I am using XBee (API mode), so I need to send the byte value through the port serial. So I was just verifying if what I am getting from the database is the same value of that one I inserted there. In conclusion, I want to know how to recover the bytes from database to send them through the serial port.