eu tenho um ArrayList com nomes, pretendo atualizar coisa numa tabela com base no valores do Array que seria o Where, pensei da seguinte maneira:
String instSQL = “UPDATE iten SET id_movi = ? WHERE BP = ?;”;
while(!Itens.isEmpty()){
try {
PreparedStatement ps = conexao.prepareStatement(instSQL);
String value2 = jcListaBPs.getSelectedItem().toString();
ps.setString(1, value2);
ps.execute();
System.out.println("Cadastro realizado com sucesso.");
JOptionPane.showMessageDialog(null,
"Cadastro realizado com sucesso.",
"Realização de cadastro",
JOptionPane.INFORMATION_MESSAGE);
buscarBPsMovi();
listarCategoria();
buscarNomeMovimentacao();
} catch (Exception e) {
System.out.println("Falha no cadastro - "
+ e.toString());
JOptionPane.showMessageDialog(null,
"Falha no cadastro - " + e.toString(),
"Realização de cadastro",
JOptionPane.ERROR_MESSAGE);
}
onde a segunda exclamação seria o valor do array, porem o ArrayList nao pode ser convertido pra String e tambem gostaria de pegar um valor do Array por como esta no While
UPDATE iten SET id_movi = 'abc' WHERE BP IN ('aaa', 'bbbb', 'cc');
O problema é que o PreparedStatement não suporta diretamente este tipo de parametros. Não podes fazer IN (?) porque depois não há maneira de colocar o conteudo do ArrayList no ponto de interrogação.
Algumas alternativas são:
1 - Construir a query de forma dinamica, colocando tantos ? no IN quantos os teus valores a alterar, separados por virgula ... WHERE BP IN (?,?,?,?) e depois fazer um setString para cada um dos elementos do ArrayList
2 - Construir a query de forma dinâmica, sem utilização dos parametros e colocando os valores diretamente na query. É semelhante ao anterior mas ficas sujeito a ataques de SQL injection se estes valores vem do utilizador e é mais confuso de concatenar porque tens de andar sempre a colocar as '' nos valores.
3 - Construir a query com um update (como tens) e executar várias vezes (preferencialmente com bath update), para os vários parametros.