Olá, estou precisando de uma ajuda bem simples, eu não consigo colocar o valor da soma de uma coluna da tabela do MySql em um TextField no NetBeans, alguém poderia me dar a isca?
private void somar() {
String sql = "SELECT SUM(bancavalor) FROM tbbanca (?)";
try {
pst = conexao.prepareStatement(sql);
pst.setInt(1, Integer.parseInt(txtSomaBanca.getText()));
if (rs.next()) {
int soma = rs.getInt(0);
txtSomaBanca.setText(String.valueOf(soma));
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e);
}
Questão 1: você sabe realizar uma consulta SQL?
Questão 2: você sabe usar o PreparedStatement?
Se alguma das respostar for não, aconselho a dar uma estudada antes. É melhor demorar um pouco mais e aprender como as coisas funcionam do que ir fazendo sem saber ao certo o que está fazendo.
Na consulta, era esperado algo como:
SELECT SUM(bancavalor) FROM tbBanca;
A função SQL SUM é uma função agregadora, ou seja traz um único valor que é a soma da coluna especificada.
A consulta:
não faz sentido.
Obs. 1: Prefira separar nomes compostos por underscore ou use a notação CamelCase para melhorar a legibilidade. Logo:
1 - banca_valor ou bancaValor é mais claro que bancavalor;
2 - tb_banca, banca ou tbBanca é mais claro que tbbanca;
Onde a variável pst foi declarada para poder ser usada aqui?
Aqui:
era esperado algo como:
pst = conexao.prepareStatement(sql);
rs = pst.executeQuery();
rs.first();
soma = rs.getInt(1);
Onde soma é uma variável previamente declara fora do try. O ResultSet ‘avança’ para a primeira coluna, pois a função agregadora SUM , como dito antes, traz um único valor como resultado.
Você poderia separar as coisas, por exemplo;
package bean;
public class Banca {
private int valorBanca;
public void setValor(int valor){
this.valor = valor;
}
public int getValor(){
return valor;
}
{...}
}
package view;
public class Banca extends JFrame {
public Banca(){
initComponents();
carregarDados();
}
{...}
campoValor = new javax.swing.JTextField();
{...}
public void carregarDados(){
int soma = 0;
try{
soma = dao.Banca.obterSoma();
}catch(SQLException sqle){
System.out.println("ERRO: impossível obter a soma [" + sqle.getMessage() + "]");
}
campoValor.setText(String.valueOf(soma));
}
javax.swing.JTextField campoValor;
{...}
}
package util;
public class ConectaBancoDeDados {
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost/"
+ "tb_banca";
private static final String USUARIO = "user";
private static final String SENHA = "password";
public static Connection getConexao() throws SQLException{
try{
Class.forName(DRIVER);
return DriverManager.getConnection(URL, USUARIO, SENHA);
}catch(ClassNotFoundException cnfe){
throw new SQLDataException(cnfe.getMessage());
}
}
public static void main(String[] args){
try{
getConexao();
System.out.println("Banco de dados conectado com sucesso!");
}catch(SQLException sqle){
System.out.println("Impossível se conectar ao banco de dados. "
+ "ERRO: " + sqle.getMessage());
}
}
}
package dao;
public class Banca {
public static int obterSoma() throw SQLException{
final int COLUNA = 1;
int soma = 0;
try(Connection conexao = ConectaBancoDeDados.getConnection()){
String consulta = "SELECT SUM(bancavalor) FROM tbbanca";
try(PreparedStatement pstmt = conexao.prepareStatement(consulta)){
try(ResultSet rstSet = pstmt.executeQuery()){
rstSet.first();
valor = rstSet.getInt(COLUNA);
}
}
}
return soma;
}
}
Bastante coisas para ver hehe, obrigado