java – Problema al actualizar un campo de tipo Blob en MySQL desde JavaFX

Tengo un campo de tipo Blob que ya contiene una imagen pero necesito actualizar la imagen si asi se desea, el campo luce asi antes de actualizarlo:

1

cuando aplico el metodo para actualizar ese campo:

public void subir_foto(InputStream foto, int id) throws SQLException{
        
        String sql = "UPDATE usuarios SET foto=? WHERE id=?";
        PreparedStatement cursor = conectar().prepareStatement(sql);
        cursor.setBlob(1, foto);
        cursor.setInt(2, id);
        cursor.executeUpdate();
    }

Luce asi:

2

Eso es si la imagen que subo es de tipo png porque si subo una imagen de otro formato como por ejemplo jpg el campo luce asi:

3

Como si estuviese vacío. Despues que actualice el campo ya no puedo leer la imagen que allí guarde y me sale un error, si alguien que por favor sepa como resolverlo? agradecería mucho

architecture – java threading model for scale up

once we have more clients. the thread pool becomes unmanageable. in our case 20K user streaming data means 20K running threads+ 20K java internal queues. my question is:

What you are calling a thread pool doesn’t sound like thread pool to me. From Wikipedia’s definition:

By maintaining a pool of threads, the model increases performance and avoids latency in execution due to frequent creation and destruction of threads for short-lived tasks.[2] The number of available threads is tuned to the computing resources available to the program, such as a parallel task queue after completion of execution.

The whole idea of a thread pool is to avoid having 20k threads. Instead you want to have just enough to keep your cores busy. Having many threads will means you have to keep all of them in memory which adds to the overhead. It might also add to the time it takes to context switch.
Since you stated that your tasks in step C do not have any blocking IO calls, you can roughly need one thread per core, that is 24×6 = 144 cores.
Since you want to read messages for each connection in order, you should assign connections to threads.
With that distribution in mind you can also reduce the number of queues to match the number of threads.

Now you have one worker shoveling messages in the ring buffer, as before.
You can keep the logic in step B as it is as well, except that it also needs to make a decision which connection goes to which queue. In the simplest case the assignment is queue_no = connectoin_no % 24.

In step C you now have worker threads that are always active, as long as there is work to do in their queue and sleep otherwise. There is no context switching involved and every single thread can use 900 MB of memory.

All of this assumes that messages are fairly even distributed on connections. If you have 5 connections that make up 90% of the traffic and 2 of them happen to be on the same thread, you might run into situation where one thread is idle and another one can’t keep up. This can be fixed, but really depends on the shape of the traffic.

java – Layout Inflater com bug, pela Classe Adapter Android

Desculpe-me pelo texto longo. É assim:

Estou inflando um layout personalizado no clique de um TextView pelo “MyViewHolder holder” utilizando o AlertDialog.Builder implementado em uma classe Adapter.

Infla perfeitamente, sem erros.

O fato é que quando clico no layout inflado para alterar o valor no EditText, normalmente com um clique de velocidade média, o App simplesmente fecha. Coloquei tudo em um bloco try/catch, mesmo assim não mostra o erro. Se eu clico e seguro um pouco ele aceita (nem sempre), não fecha e a ação, quando confirmo no botão do AlertDialog, é executada sem problemas.

Tentei depurar e todos os valores são preenchidos corretamente. Não traz exceções.

E normalmente é no primeiro click depois que carrega o App após um período inativo ou na primeira execução. Aí o App fecha, eu abro novamente e depois segue mais firme, sem erros constantes, mas, ainda ocorrendo um ou outro. Como se faltasse carregar algo completamente!

Observando mais minuciosamente, está sendo inflado pela classe Adapter e os erros só ocorrem nas classes Fragments, quando são chamados e clicados. Nas Activity`s não ocorre o fechamento.

Não poderia inflar pelo recycler, pois, são muitos fragments e eu teria que implementar em cada um.

Obs. Eu inflo por um clique na Imagem do adapter (uma ação) e no textView do adapter (outra ação) = carrinho e favoritos que funcionam em conjunto, mas, com ações distintas..

Alguém teria uma maneira ou um recurso diferente que possa me ajudar à resolver isto? O mais detalhado possível, pois, não tenho muito habilidade ainda.

Desde já fico muito grato.

Abaixo foram as tentativas que eu fiz e todas funcionam. É só a questão do bug de clique mesmo:

01- import androidx.appcompat.app.AlertDialog;
 
ou
 
02- import android.app.AlertDialog;

03-
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.dialog_Solicitacao, null, false);

builder.setView(view); 

 
04-
View view = View.inflate(context,R.layout.dialog_Solicitacao,null);
 
builder.setView(view); 

 
05-

AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Solicitação");
builder.setMessage("Digite o valor");

EditText editValor = new EditText(context);

builder.setView(editValor);

LAYOUT ORIGINAL INFLADO PELA CLASSE ADAPTER

    try{    
        // >>> Caixa de diálogo
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        // builder = construtor
        builder.setTitle("Carrinho");
        builder.setMessage("Exemplo: 2 (igual à 2UN)");
        builder.setIcon(R.drawable.logo_marca);
            
        //LayoutInflater inflater = LayoutInflater.from(context);
        //View viewQuantidade = inflater.inflate(R.layout.dialog_quantidade_car, null, false);
        
        // ou
        
        //View viewQuantidade = LayoutInflater.from(context).inflate(R.layout.dialog_quantidade_car, null);
        
        // ou
        
        View viewQuantidade = View.inflate(context,R.layout.dialog_quantidade_car,null);
                        
        editQuantidade = viewQuantidade.findViewById(R.id.editText_DialogQteCar_Quantidade);
        editQuantidade.setText("1"); // Já recebe um valor padrão
        editQuantidade.requestFocus();    
        editQuantidade.selectAll(); // Para focar e selecionar
        
        TextView textUnidade =  viewQuantidade.findViewById(R.id.textView_DialogQteCar_Unidade);
        textUnidade.setText("Unidade");
        
        TextView textObserv =  viewQuantidade.findViewById(R.id.textView_DialogQteCar_Observacao);
        textObserv.setText(textObserv.getText()); // Texto padrão do Layout
                        
        builder.setView(viewQuantidade);

        builderUp.setPositiveButton("Confirmar", new DialogInterface.OnClickListener(){...
            closeKeyboard()

        builderUp.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {...
            closeKeyboard()

        AlertDialog dialogUp = builderUp.create(); // Criar
        dialogUp.show(); // Exibir
        showKeyboard();

private void showKeyboard(){...

private void closeKeyboard(){...

java – Id e Produto ficando null quando salvo dados Many To One

Sempre que eu tenho criar uma Lista de itemPedido e usar ele em uma mapper para request, ela acaba como id e produto null. Já trackei com o debugger e ele não pega a referência com o idProduto que eu coloco no Postman. Sou novo nisso então certo q estou deixando passar algo.

O processo seria: Criar um Pedido, que possui uma lista de itemPedido com os atributos Produto e quantidade. Mas o Produto fica como null.

Classe Pedido:

”’
@Entity
@AllArgsConstructor
@NoArgsConstructor
public class Pedido {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Valid
@ManyToOne
@JoinColumn(name = "id_usuario_solicitante")
private Usuario solicitante;

@Valid
@ManyToOne
@JoinColumn(name = "id_endereco")
private Endereco enderecoEntrega;

@Valid
@ManyToOne
@JoinColumn(name = "id_estabelecimento", nullable = false)
private Estabelecimento estabelecimento;

@Valid
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "id_pedido")
private List<ItemPedido> itensPedido;

@Valid
@Enumerated(EnumType.STRING)
private FormaPagamento formaPagamento;

@Enumerated(EnumType.STRING)
private StatusPedido status;

@JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime horarioSolicitacao;

@JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime horarioSaiuParaEntrega;

@JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime horarioEntrega;

@JsonFormat(pattern = "dd/MM/yyyy HH:mm:ss")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime horarioCancelamento;

private BigDecimal valorTotal;

@Valid
@ManyToOne
@JoinColumn(name = "id_entregador")
private Entregador entregador;

public Long getId() {
    return id;
}

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

public Usuario getSolicitante() {
    return solicitante;
}

public void setSolicitante(Usuario solicitante) {
    this.solicitante = solicitante;
}

public Endereco getEnderecoEntrega() {
    return enderecoEntrega;
}

public void setEnderecoEntrega(Endereco enderecoEntrega) {
    this.enderecoEntrega = enderecoEntrega;
}

public Estabelecimento getEstabelecimento() {
    return estabelecimento;
}

public void setEstabelecimento(Estabelecimento estabelecimento) {
    this.estabelecimento = estabelecimento;
}

public List<ItemPedido> getItensPedido() {
    return itensPedido;
}

public void setItensPedido(List<ItemPedido> itensPedido) {
    this.itensPedido = itensPedido;
}

public FormaPagamento getFormaPagamento() {
    return formaPagamento;
}

public void setFormaPagamento(FormaPagamento formaPagamento) {
    this.formaPagamento = formaPagamento;
}

public StatusPedido getStatus() {
    return status;
}

public void setStatus(StatusPedido status) {
    this.status = status;
}

public LocalDateTime getHorarioSolicitacao() {
    return horarioSolicitacao;
}

public void setHorarioSolicitacao(LocalDateTime horarioSolicitacao) {
    this.horarioSolicitacao = horarioSolicitacao;
}

public LocalDateTime getHorarioSaiuParaEntrega() {
    return horarioSaiuParaEntrega;
}

public void setHorarioSaiuParaEntrega(LocalDateTime horarioSaiuParaEntrega) {
    this.horarioSaiuParaEntrega = horarioSaiuParaEntrega;
}

public LocalDateTime getHorarioEntrega() {
    return horarioEntrega;
}

public void setHorarioEntrega(LocalDateTime horarioEntrega) {
    this.horarioEntrega = horarioEntrega;
}

public LocalDateTime getHorarioCancelamento() {
    return horarioCancelamento;
}

public void setHorarioCancelamento(LocalDateTime horarioCancelamento) {
    this.horarioCancelamento = horarioCancelamento;
}

public BigDecimal getValorTotal() {
    return valorTotal;
}

public void setValorTotal(BigDecimal valorTotal) {
    this.valorTotal = valorTotal;
}

public Entregador getEntregador() {
    return entregador;
}

public void setEntregador(Entregador entregador) {
    this.entregador = entregador;
}

}”’

Classe ItemPedido:

”’@Entity
public class ItemPedido {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne
@JoinColumn(name = "id_produto")
private Produto produto;

private Integer quantidade;

public Long getId() {
    return id;
}

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

public Produto getProduto() {
    return produto;
}

public void setProduto(Produto produto) {
    this.produto = produto;
}

public Integer getQuantidade() {
    return quantidade;
}

public void setQuantidade(Integer quantidade) {
    this.quantidade = quantidade;
}

}
”’

Classe CriarPedidoRequest:

”’
@Getter
@Setter
@AllArgsConstructor
public class CriarPedidoRequest {

private Long idPedido;
private Long idEstabelecimento;
private Long idUsuarioSolicitante;
private Long idEnderecoEntrega;
private List<ItemPedido> itens;
private FormaPagamento formaPagamento;
private StatusPedido status;
private LocalDateTime horarioSolicitacao;
private LocalDateTime horarioSaiuParaEntrega;
private LocalDateTime horarioEntrega;
private LocalDateTime horarioCancelamento;
private BigDecimal valorTotal;
private Long idEntregador;
private Long idProduto;
private Integer quantidade;

}”’

Classe CriarPedidoService:

”’
@Service
public class CriarPedidoService {

@Autowired
private PedidoRepository pedidoRepository;

@Autowired
private CriarPedidoMapper criarPedidoMapper;

@Autowired
private ProdutoRepository produtoRepository;

@Autowired
private ItemPedidoRepository itemPedidoRepository;

public Pedido salvarPedido(CriarPedidoRequest request) {

    Pedido pedido = criarPedidoMapper.mapear(request);
    pedido.setStatus(StatusPedido.EM_PREPARO);
    pedido.setHorarioSolicitacao(LocalDateTime.now());

    Produto produto = produtoRepository.findById(request.getIdProduto()).get();

    List<ItemPedido> itens = new ArrayList<>();
    ItemPedido itemPedido = new ItemPedido();

    itemPedido.setProduto(produto);
    itemPedido.setQuantidade(request.getQuantidade());
    itens.add(itemPedido);

    pedido.setItensPedido(itens);

    return pedidoRepository.save(pedido);
}

}”’

CriarPedidoMapper:

”’
@Component
public class CriarPedidoMapper {

@Autowired
private UsuarioRepository usuarioRepository;

@Autowired
private EnderecoRepository enderecoRepository;

@Autowired
private EstabelecimentoRepository estabelecimentoRepository;

@Autowired
private EntregadorRepository entregadorRepository;

@Autowired
private ProdutoRepository produtoRepository;

@Autowired
private ItemPedidoRepository itemPedidoRepository;


public Pedido mapear(CriarPedidoRequest request) {

    Usuario usuario = usuarioRepository
            .findById(request.getIdUsuarioSolicitante()).get();

    Endereco enderecoEntrega = enderecoRepository
            .findById(request.getIdEnderecoEntrega()).get();

    Estabelecimento estabelecimento = estabelecimentoRepository
            .findById(request.getIdEstabelecimento()).get();

    Entregador entregador = entregadorRepository
            .findById(request.getIdEntregador()).get();

    Produto produto = produtoRepository
            .findById(request.getIdProduto()).get();

    BigDecimal valor = produto.getValor();
    Integer quantidade = request.getQuantidade();
    BigDecimal valorTotal = BigDecimal.valueOf(quantidade).multiply(valor);



    return new Pedido(request.getIdPedido(), usuario, enderecoEntrega, estabelecimento, request.getItens(),
            request.getFormaPagamento(), request.getStatus(), request.getHorarioSolicitacao(),
            request.getHorarioSaiuParaEntrega(), request.getHorarioEntrega(),
            request.getHorarioCancelamento(), valorTotal, entregador);
}

}
”’

Json:

”’
{
“idEstabelecimento”: 1,
“idUsuarioSolicitante”: 1,
“idEnderecoEntrega”: 1,
“formaPagamento”: “PIX”,
“itens”: (
{
“idProduto”: 1,
“quantidade”: 1
},
{
“idProduto”: 2,
“quantidade”: 2
}
)
}
”’

java – Salta excepción a pesar del try/catch,

Estoy creando un método que va a asignar a un atributo un valor de talla válido. Los valores de las tallas los tengo en un tipo enumerado. Y muestro el método que he diseñado para que el usuario introduzca el valor de la talla. El caso es que cuando introduzco un valor por teclado que no está recogido en el tipo enumerado salta una excepcion a pesar de que está recogida en el catch. Abajo indico el codigo de la excepcion que salta

private enum tallasArticulo {
    XS, S, M, L, XL, XXL
};

 public static String validarTalla(Scanner sc) {

        tallasArticulo t = null;
        
        String talla = null;

        do {

            System.out.println("Escribe la talla: ");

           
            try {
                talla = sc.next();
                
                t = tallasArticulo.valueOf(talla.toUpperCase());
                
                talla = t.toString();
                
            } catch (IllegalArgumentException il) {
                System.out.println(il.getMessage());
                System.out.println("Por favor introduce un valor correcto de talla: XS, S, M, L, XL, XXL ");
            } 
            catch (NullPointerException nulP){
                System.out.println(nulP.getMessage());
                System.out.println("Introduce un valor correcto de talla: XS, S, M, L, XL, XXL ");
            }       
            catch (Exception e) {
                System.out.println(e.getMessage());
                System.out.println("Por favor introduce un valor correcto de talla");
            }           
            
        } while ((talla == null));

        return talla;
    }


Escribe la talla: 
8
No enum constant Validaciones.tallasArticulo.8
Por favor introduce un valor correcto de talla
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Validaciones$tallasArticulo.toString()" because "t" is null
    at Validaciones.validarTalla(Validaciones.java:74)
    at Ticket.crearArticulo(Ticket.java:42)
    at Main.main(Main.java:32)
D:PROGRAMACIÓN_DAMUT10ExmRafPere160421nbprojectbuild-impl.xml:1366: The following error occurred while executing this line:
D:PROGRAMACIÓN_DAMUT10ExmRafPere160421nbprojectbuild-impl.xml:961: Java returned: 1
BUILD FAILED (total time: 30 seconds)

Trouble with Java in Ubuntu 20.04 vs 18.04 – Compiling JS code with the Google Closure Library

I have a JavaScript project made with the Google Closure library. It uses Java 8 to compile all the JavaScript into one single JS file.

It works flawlessly on Ubuntu 18.04 and compiles as expected. But when compiling after installing Java 8 in Ubuntu 20.04, it throws the following runtime error:

Uncaught TypeError: a.attachEvent is not a function
at Ic (c.js:33)

One more noticeable test I did: It worked when first installing Java 8 in Ubuntu 18.04, then upgrading to 20.04.

So I wanted to gain more clarity on what sort of differences are there in openjdk-8 when installing them on 18.04 and 20.04?

java – URLify a given String – replace spaces with %20

I have written a code to replace all spaces in a String with %20.

Input: "Mr John Smith "
Output: "Mr%20John%20Smith"

My logic:

public class URLify {
    public static void main(String() args) {
        String str = "Mr John Smith  ";
        str = str.stripTrailing();
        char() ch = str.toCharArray();
        StringBuilder sb = new StringBuilder();
        for(char c : ch) {
            if(c != ' ')
                sb.append(c);
            else {
                sb.append("%20");
            }
        }
        System.out.println(sb.toString());
    }
}

The given solution:

static int MAX = 1000; 
static char() replaceSpaces(char str()) {
    int space_count = 0, i = 0;
    for (i = 0; i < str.length; i++)
        if (str(i) == ' ')
            space_count++;
    while (str(i - 1) == ' ') {
        space_count--;
        i--;
    }
    int new_length = i + space_count * 2;
    if (new_length > MAX)
        return str;
    int index = new_length - 1;
    char() old_str = str;
    str = new char(new_length);
    for (int j = i - 1; j >= 0; j--) {
        if (old_str(j) == ' ') {
            str(index) = '0';
            str(index - 1) = '2';
            str(index - 2) = '%';
            index = index - 3;
        }
        else {
            str(index) = old_str(j);
            index--;
        }
    }
    return str;
}

Both work correctly with a linear time complexity of 𝑂(𝑛) however, can someone please suggest which solution is a better one especially if asked in an interview? Thanks!

Need help java script related

I want to do timeout in One web online course with inject java script anyone please expert in this help me my insta id ameermona dm me please

¿Cómo consultar una imagen con Java y PostgreSQL?

Quiero saber como puedo consultar una imagen que está guardada en una base de datos eh intentado con diferentes formas pero al final no resultó.

cryptography – How to create a secure password for a java keystore

What would be the recommended approach (industry standard) for generating a password for a java keystore that contains TLS certificates? In the event that the keystore is obtained, an attacker would have unlimited time to brute force the password.

Would a UUID be the best approach? What is the best way to easily generate a pseudorandom one from the command line if so?