2014-01-22 7 views
2

PostgreSQL에서 "bytea"유형의 변수에 "byte"유형의 변수를 Java에 삽입하려고하면 문제가 발생합니다.Java에서 바이트를 PostgreSQL의 bytea에 저장하는 방법은 무엇입니까?

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

, 내가하려고 할 때

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

자바에서 내 코드는 다음과 같다 :

이것은 PostgreSQL을 내 테이블 뭔가를 삽입하려면 PSQLException을 throw합니다. "som"열은 "bytea"이지만 표현은 "smallint"입니다. 또한 그 다음 두 줄에 동일한 SQLException이있을 것이라고 생각합니다.

그래서 어떻게 고칠 수 있는지 누군가가 나를 도울 수 있다면 기쁠 것입니다!

는, 사전에 감사

편집 : 저를 도와 주셔서

고마워, 내가 여기에 솔루션을 제공 할 것입니다 : 변수를 변경 "솜"와 "rotina"을 "바이트 []" pst.getByte (...) 대신 pst.getBytes (...)를 사용하십시오. 내가 XBee (API 모드)를 사용하고

, 그래서 포트 시리얼을 통해 바이트 값을 보낼 필요가 :

명확히. 그래서 나는 데이터베이스에서 얻는 것이 내가 거기에 삽입 한 것과 동일한 가치인지를 확인하고있었습니다. 결론적으로, 직렬 포트를 통해 데이터를 보내려면 데이터베이스에서 바이트를 복구하는 방법을 알고 싶습니다.

+1

당신은 객체 메사 PLS의 유형을 표시 할 수 있습니다. – Diversity

+0

'som'이'byte' 인 경우 왜'byte []'로 저장하기를 원합니까 (이것은'bytea'가 무엇입니까?)? 자바 변수에서'som'은'integer' 타입의 컬럼이어야한다. –

+1

정말로 byte byte를'BLOB'으로 저장해야한다면 ('bytea'가 무엇인지),'setBytes ()'setByte()가 아닌'byte []'를 전달한다 –

답변

0

코드 자바는 PostgreSQL의

에 의해
pst.setBinaryStream(6, mesa.getSom()); 
pst.setBinaryStream(7, mesa.getRotina()); 
pst.setBinaryStream(8, mesa.getAddress64Bits());` 
관련 문제