[Resolvido] JDBC - inserindo qualquer Integer[] no banco

2 respostas
ccefetpb

Tenho um objeto que tem um array de Integer chamado map como atributo. Como faço para inserir esse map no banco usando jdbc?

Existe um método setBlob na classe PreparedStatment mas ele só aceita um array de bytes ou um InputStream.

Alguém pode me ajudar?

2 Respostas

eliangela

Olá, ccefetpb!

O BLOB é só pra colocar arquivos. Você nunca vai conseguir colocar os bytes que estão na memória direto no banco, pois vc não tem acesso a esses dados.

Pra conseguir fazer isso, vc pode tentar:

  • Serialize esse objeto num arquivo e depois o grave nesse campo BLOB.
  • Para recuperar o valor do BLOB, recupere os bytes, grave num arquivo e depois deserialize pra ter seu Map de volta.

Nunca tentei fazer isso, mas eu acredito que pode funcionar.

ccefetpb

Resolvido

A solução se extende para qualquer tipo de objeto.

public static byte[] serialize(Object obj) throws IOException {
	    ByteArrayOutputStream out = new ByteArrayOutputStream();
	    ObjectOutputStream os = new ObjectOutputStream(out);
	    os.writeObject(obj);
	    return out.toByteArray();
	}
	public static Object deserialize(byte[] data) throws IOException, ClassNotFoundException {
	    ByteArrayInputStream in = new ByteArrayInputStream(data);
	    ObjectInputStream is = new ObjectInputStream(in);
	    return is.readObject();
	}

//para salvar

					sql = "INSERT INTO time_map (id_user, map) VALUES (?, ?)";
					ps = connection.prepareStatement(sql);
					
					byte[] byteVal = serialize(follower.getTimeMap().getMap());
				    
					ps.setLong(1, idFollower);
					ps.setBytes(2, byteVal);
					ps.execute();

//para recuperar
		sql = "SELECT map FROM time_map WHERE id_user = ?";
		PreparedStatement ps = connection.prepareStatement(sql);
		ps.setLong(1, idUser);
		
		ResultSet rs = ps.executeQuery();
		TimeMap mapa = null;
		if (rs.next()){
			byte[] byteVal = rs.getBytes("map");
			Integer[] map = (Integer[]) deserialize(byteVal);
			mapa = new TimeMap();
			mapa.setMap(map);
		}
Criado 11 de abril de 2012
Ultima resposta 12 de abr. de 2012
Respostas 2
Participantes 2