tenho uma tabela no banco de dados e gostaria de calcular a porcentagem de n° de pessoas com um número de n° de habitantes mais n sei como faço pro Java mostrar a nova tabela com que foi gerada na porcentagem
Não entendi quase nada, mas em resumo, não tem comando de porcentagem.
Vc pode aplicar uma simples regra de 3 e chegar ao resultado.
Eu fiz um select Count pra contar qnts nomes tem é depois peguei esse valor e calculei a porcentagem só q qnd vc faz o cálculo o mysql gera um nova tabela com o resultado mais eu queria é essa tabela aparecesse no JoptionPane
bom, toda consulta é uma nova tabela virtual, mas fica dificil te orientar sem ver oq vc ta fazendo.
É extremamente simples, vc faz a consulta, lê os dados resultantes e faz oq quiser com eles, n tm como saber onde vc ta errando.
fiz isso no mySQL Workbench
SELECT count(nome) / 1164 AS ‘Percentual’ FROM pessoa where cidade = ‘São Paulo’
e ele me deu uma tabela
Percentual
0.0043
só queria precisava pegar esse where cidade e dar a opção do usuario escolher qual cidade ele quer calcular o percentual ,
EX:
São Paulo : 1164"
Guarulhos : 1301
Campinas : 1143
São Bernardo do Campo : 796
Santo André : 687
ai qnd escolhesse fazia o codigo
escolhido santo andré
SELECT count(nome) / 687 AS ‘Percentual’ FROM pessoa where cidade = ‘Santo André’
escolhido Campinas
SELECT count(nome) / 1143 AS ‘Percentual’ FROM pessoa where cidade = ‘Campinas’
mais isso tudo no java e o resultado mostrar no JOptionPane no java
ta, mas oq vc já tem de código java?
tá usando jpa/hibernate, jdbc ou oq?
public class PessoaDao {
private final Connection con;
public PessoaDao(){
this.con = ConnectionFactory.getConnection();
}
public boolean add(Pessoa p){
String sql = " INSERT INTO pessoa(nome,cpf,nascimento,sexo,peso,altura,cidade,sintomas,email,senha)VALUES (?,?,?,?,?,?,?,?,?,?);";
try {
try (PreparedStatement stmt = con.prepareStatement(sql)) {
stmt.setString(1, p.getNome());
stmt.setDouble(2, p.getCpf());
if(p.getNascimento() != null ){
java.sql.Date Nascimento = new java.sql.Date(p.getNascimento().getTime());
stmt.setDate(3, p.getNascimento());
}else{
JOptionPane.showMessageDialog(null,"Favor Preencher a Data de Nascimento !");
}
stmt.setString(4, p.getSexo());
stmt.setFloat(5, (float) p.getPeso());
stmt.setFloat(6, (float) p.getAltura());
stmt.setString(7, p.getCidade());
stmt.setString(8, p.getSintomas());
stmt.setString(9, p.getEmail());
stmt.setString(10, p.getSenha());
stmt.execute();
}
con.close();
return true;
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,"ERRO , LISTA NÃO FOI RETORNADA " + "ATENÇÃO"+JOptionPane.ERROR_MESSAGE);
return false;
}
}
public boolean update(Pessoa p){
String sql = " UPDATE pessoa SET nome = ?,cpf = ?,nascimento = ?,sexo = ?,peso = ?,altura = ?,cidade = ?,sintomas = ?, email = ?, senha = ? WHERE pessoa.cpf = ?;" ;
try {
try (PreparedStatement stmt = con.prepareStatement(sql)) {
stmt.setString(1, p.getNome());
stmt.setLong(2, (long) p.getCpf());
if(p.getNascimento() != null ){
java.sql.Date Nascimento = new java.sql.Date(p.getNascimento().getTime());
stmt.setDate(3, p.getNascimento());
}else{
JOptionPane.showMessageDialog(null,"Favor Preencher a Data de Nascimento !");
}
stmt.setString(4, p.getSexo());
stmt.setFloat(5, (float) p.getPeso());
stmt.setFloat(6, (float) p.getAltura());
stmt.setString(7, p.getCidade());
stmt.setString(8, p.getSintomas());
stmt.setString(9, p.getEmail());
stmt.setString(10, p.getSenha());
stmt.execute();
}
con.close();
return true;
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,"ERRO , ATUALIZAÇÃO NÃO FOI FEITA " + "ATENÇÃO"+JOptionPane.ERROR_MESSAGE);
return false;
}
}
public boolean delete(Pessoa p){
String sql = " DELETE FROM pessoa WHERE cpf = ?;" ;
try {
try (PreparedStatement stmt = con.prepareStatement(sql)) {
stmt.setLong(1, (long) p.getCpf());
stmt.execute();
}
con.close();
return true;
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,"ERRO , O DADO NÃO FOI DELETADO " + "ATENÇÃO"+JOptionPane.ERROR_MESSAGE);
return false;
}
}
public List<Pessoa> getList () {
List<Pessoa> pessoas = new ArrayList<>();
String sql = "SELECT * FROM pessoa";
try {
ResultSet rs ;
try (PreparedStatement stmt = con.prepareStatement(sql)) {
rs = stmt.executeQuery();
while(rs.next())
{
Pessoa p = new Pessoa ();
p.setNome(rs.getString("nome"));// essa string por parametros é o nome da coluna la do banco
p.setCpf(rs.getLong("cpf"));
p.setSexo(rs.getString("sexo"));
p.setPeso(rs.getFloat("peso"));
p.setAltura(rs.getFloat("altura"));
p.setCidade(rs.getString("cidade"));
p.setSintomas(rs.getString("sintomas"));
p.setEmail(rs.getString("email"));
p.setSenha(rs.getString("senha"));
pessoas.add(p);
}
}
rs.close();
con.close();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,"ERRO , LISTA NÃO FOI RETORNADA " + "ATENÇÃO"+JOptionPane.ERROR_MESSAGE);
return null;
}
return pessoas;
}
public boolean RelatorioA(Pessoa p){
String sql = " Select count(*) FROM pessoa WHERE cidade = ? " ;
try {
try (PreparedStatement stmt = con.prepareStatement(sql)) {
stmt.setString(1, p.getCidade());
stmt.executeQuery();
}
con.close();
return true;
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,"ERRO , O DADO NÃO FOI RETORNADO " + "ATENÇÃO"+JOptionPane.ERROR_MESSAGE);
return false;
}
}
}
esta e a conexao onde chamo o comando mysql mas n sei como mostra isso numa classe principal
Isto n é uma conexão, nem tanto comandos mysql. É uma classe DAO que faz operações no banco com comandos SQL, onde também existem vários métodos com objetivos distintos.
Cadê seu select de percentual q vc postou acima, vc deve ter um método que executa aquela consulta e lê os dados. Vc tem exemplos suficientes ai pra desenvolver isso.
N foi vc q fez esta classe, né?
Não entendi bem qual sua dúvida, quanto à mostrar o valor é só chamar o método do DAO como o que você postou acima, e assumindo que somente um valor é retornado (sem agrupamento na Query) você pode retornar este valor como está dizendo, sem um Bean encapsulado. Por exemplo:
public double getPorcentagem(String cidade) throws SQLException {
double porcentagem = 0;
Connection conn = ConnectionFactory.getConnection();
PreparedStatement pst = null;
ResultSet rs = null;
try {
String sql = "SELECT count(nome) / qtd_habitante AS 'Percentual' FROM pessoa where cidade = ?";
pst = conn.prepareStatement(sql);
pst.setString(1, cidade);
rs = pst.executeQuery();
if (rs.next()) {
porcentagem = rs.getDouble("Percentual");
}
} finally {
pst.close();
rs.close();
conn.close();
}
return porcentagem;
}
E pra mostrar no JOptionPane é só literalmente você pegar o valor e mostrar nele:
try {
double porcentagem = new DAOExemplo().getPorcentagem();
NumberFormat nfPorcentagem = NumberFormat.getPercentInstance();
nfPorcentagem.setMaximumFractionDigits(2);
JOptionPane.showMessageDialog(null,nfPorcentagem.format(porcentagem));
} catch (SQLException e) {
e.printStackTrace();
}
E quanto à selecionar qual a cidade, não sei qual a estrutura de sua tabela, ela deveria ter um atributo com a quantidade de habitantes de cada cidade (como está aí em cima) ou uma tabela à parte que faça esse relacionamento.