如何将Java中的字节存储到PostgreSQL中的bytea中?

问题描述 投票:2回答:1

当我尝试在Java中将“byte”类型的变量插入PostgreSQL中的“bytea”类型的变量时,我遇到了问题。

这是我在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
);

我在Java中的代码如下:

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();
        (...)

台面类型是:

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;
  (...)
}

然后,当我尝试插入某些东西时,它会抛出一个PSQLException,声明列“som”是一个“bytea”,但表达式是“smallint”。我也认为在那之后的两行上会有相同的SQLException。

所以我不知道如何解决,如果有人能帮助我,我会很高兴!

先感谢您,

编辑:

谢谢大家帮助我,我将在这里提供解决方案:将变量“som”和“rotina”更改为“byte []”类型,然后使用pst.getBytes(...)代替pst.getByte(... )。

澄清:

我正在使用XBee(API模式),所以我需要通过端口串行发送字节值。所以我只是在验证我从数据库中得到的是否与我在那里插入的值相同。总之,我想知道如何从数据库中恢复字节以通过串口发送它们。

java postgresql byte sqlexception bytea
1个回答
0
投票

PostgreSQL编写的Java代码

pst.setBinaryStream(6, mesa.getSom());
pst.setBinaryStream(7, mesa.getRotina());
pst.setBinaryStream(8, mesa.getAddress64Bits());`
© www.soinside.com 2019 - 2024. All rights reserved.