Incompatibility of type blob and byte sqlite

Asked

Viewed 188 times

1

I’m making an application to save the image in sqlite. But you are acknowledging the following error in my dao class: incompatible types byte cannnot be converted to byte.

My Classes:

import java.io.Serializable;

public class Produto  implements Serializable{ 
private int id; 
private String descricao; 
private double precoDeCusto; 
private double percDeLucro; 
private double precoDeVenda;
private String disponibilidade; 
private byte imagem; 

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getDescricao() {
    return descricao;
}

public void setDescricao(String descricao) {
    this.descricao = descricao;
}

public double getPrecoDeCusto() {
    return precoDeCusto;
}

public void setPrecoDeCusto(double precoDeCusto) {
    this.precoDeCusto = precoDeCusto;
}

public double getPercDeLucro() {
    return percDeLucro;
}

public void setPercDeLucro(double percDeLucro) {
    this.percDeLucro = percDeLucro;
}

public double getPrecoDeVenda() {
    return precoDeVenda;
}

public void setPrecoDeVenda(double precoDeVenda) {
    this.precoDeVenda = precoDeVenda;
}

public String getDisponibilidade() {
    return disponibilidade;
}

public void setDisponibilidade(String disponibilidade) {
    this.disponibilidade = disponibilidade;
}

public byte getImagem() {
    return imagem;
}

public void setImagem(byte imagem) {
    this.imagem = imagem;
}

} 

My Class dao

 public class ProdutoDao {

public void inserirProduto(Produto produto) {
    System.out.println("Inserindo produto...");
    ContentValues v = new ContentValues();
    v.put("descricao", produto.getDescricao());
    v.put("precoDeCusto", produto.getPrecoDeCusto());
    v.put("percDeLucro", produto.getPercDeLucro());
    v.put("precoDeVenda", produto.getPrecoDeVenda());
    v.put("imagem", produto.getImagem());
    Login.db.insert("produtos", null, v);
    //ProjetoBd.db.close();
    System.out.println("Inseriu...");
}

public static void alterar(Produto produto) {
    ContentValues cv = new ContentValues();
    cv.put("descricao", produto.getDescricao());
    cv.put("precoDeCusto", produto.getPrecoDeCusto());
    cv.put("percDeLucro", produto.getPercDeLucro());
    cv.put("precoDeVenda", produto.getPrecoDeVenda());
    cv.put("imagem", produto.getImagem());
    String idTransformado = String.valueOf(produto.getId());
    String[] valoresDasVariaveisWhere = new String[1];
    valoresDasVariaveisWhere[0] = idTransformado;
    Login.db.update(
            "produtos", cv, "id = ?", valoresDasVariaveisWhere);
    System.out.println("Alterou...");
}

public ArrayList<Produto> getListagem(String parametro) {
    System.out.println("Listando produto...");
    String sql = "SELECT * FROM Produtos ORDER BY descricao ASC " + parametro;
    ArrayList<Produto> listagem = new ArrayList<Produto>();
    try {
        Cursor c = Login.db.rawQuery(sql, null);
        while (c.moveToNext()) {
            Produto prod = new Produto();
            prod.setId(c.getInt(0));
            prod.setDescricao(c.getString(1));
            prod.setPrecoDeCusto(c.getDouble(2));
            prod.setPercDeLucro(c.getDouble(3));
            prod.setPrecoDeVenda(c.getDouble(4));
            prod.setImagem(c.getBlob(5));
            //System.out.println("Descricao=" + prod.getDescricao());
            listagem.add(prod);
        }
    } catch (Exception e) {
        System.out.println("Erro");
        e.printStackTrace();
    }
    System.out.println("Listou..." + listagem.size());
    return listagem;
}

public void excluir(Produto produto) {
    System.out.println("Excluindo produto...");
    Login.db.delete("produtos", "id = ?", new String[]{String.valueOf(produto.getId())});
    System.out.println("Excluiu...");
}
}

The error occurs in this line **Prod.setImage(c.getBlob(5));

My bank structure:

 public class EstruturaBanco {

public static void criarTabelas() {
    System.out.println("Criando as tabelas...");
    StringBuilder sb = new StringBuilder();

    sb.append(" CREATE TABLE IF NOT EXISTS [produtos] (");
    sb.append(" [id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,");
    sb.append(" [descricao] VARCHAR2(50) NOT NULL,");
    sb.append(" [precoDeCusto] DOUBLE NOT NULL,");
    sb.append(" [percDeLucro] DOUBLE NOT NULL,");
    sb.append(" [precoDeVenda] DOUBLE NOT NULL,");
    sb.append(" [imagem] BLOB);");
    Login.db.execSQL(sb.toString()); 


    System.out.println("Tabelas criadas...");
}
}
  • You need to convert the image into an array of bytes before saving to the database

1 answer

6


You’re trying to put one array of bytes in a variable byte

c.getBlob(5)(1) returns a array of bytes.

Change your class Product so that the methods that return or receive byte return or receive byte[]

public class Produto  implements Serializable{ 
    ....
    ....
    private byte[] imagem; 
    ....
    ....
    public byte[] getImagem() {
        return imagem;
    }

    public void setImagem(byte[] imagem) {
        this.imagem = imagem;
    }
}

(1) - The type BLOB in the Sqlite "corresponds" to byte[] in the Java

Browser other questions tagged

You are not signed in. Login or sign up in order to post.