在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模式),因此我需要通过串行端口发送字节值。因此,我只是验证从数据库获取的值是否与我插入的值相同。总之,我想知道如何从数据库中恢复字节以通过串行端口发送它们。
som
是一个byte
,那么为什么要将其存储为byte[]
(这就是bytea
的作用)?根据您的Java变量,som
应该是一个类型为integer
的列。 - user330315BLOB
(这就是bytea
的作用),你需要使用setBytes()
传递一个byte[]
而不是setByte()
。 - user330315