Opa, vamos lá:
essa é minha classe de conexão, nela tem:
método para conectar ao banco de dados,
metodo para desconectar do banco e
método pra executar alguma query (SQL),
Segue:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
* Connect to the database
*
*/
public class ConectaBanco {
public Statement stm;
public ResultSet rs;
public Connection conn;
private final String driver = "org.postgresql.Driver";
private final String caminho = "jdbc:postgresql://localhost:5432/bancodedados";//
private final String user = "usuario";
private final String pass = "senha";
/**
* Method responsible for opening the connection to the database.
* <br><br>
* <b>Required:</b>
* <br>
* Yes. This method must be invoked whenever you perform an operation that
* involves the database.
* <br><br>
* <b>Example:</b>
* <br>
* ConectaBanco conecta = new ConectaBanco();
* <br>
* conecta.conexao();
*
* @exception Error Database not exists, driver not configured correctly,
* library was not added to the project
*/
public void conexao() {
try {
System.setProperty("jdbc.Driver", driver);
conn = DriverManager.getConnection(path, user, pass);
} catch (SQLException e) {
System.out.println("Error: " + e);
}
}
/**
* Method responsible for closing the connection to the database.
* <br><br>
* <b>Required:</b>
* <br>
* No. but it is advisable to close the connection every time you perform a
* database operation.
* <br><br>
* <b>Example:</b>
* <br>
* ConectaBanco conecta = new ConectaBanco();
* <br>
* conecta.conexao();
* <br>
* ...
* <br>
* conecta.desconecta();
*
* @exception Error Connection not started.
*/
public void desconecta() {
try {
conn.close();
} catch (SQLException e) {
System.out.println("Error: " + e);
}
}
/**
* Method is used to execute SELECT query. It returns the object of
* ResultSet.
*
* @param SQL ex: "SELECT * FROM table"
* <br><br>
* <b>Example:</b>
* <br>
* ConectaBanco conecta = new ConectaBanco();
* <br>
* conecta.conexao();
* <br>
* conecta.executaSQL("SELECT * FROM table");
* <br>
* conecta.desconecta();
*
* @exception Error Connection not started.
*/
public void executaSQL(String SQL) {
try {
stm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stm.executeQuery(SQL);
} catch (Exception e) {
System.out.println("Error: " + e);
}
}
}
Sobre a dúvida do método ser sobrecarregado
Isso pode ser uma personalização sua na verdade, eu não preciso disso, então a minha query é sempre uma só, sempre a mesma, entende? Mas se você quiser fazer algo diferente à cada clique, você pode fazer isso sim
Esse sql vai ser a QUERY que você precisa executar, a query seria algo mais ou menos assim:
SELECT * FROM suaTabela
A tabela vai ser a que tem as colunas que você citou ali em cima
Você está tentando chamar um método sobrecarregado, mas não está aplicando os atributos dentro dele. Ou está fazendo o contrário.
Se você quer fazer isso:
private XYDataset createDataset(String Sql){
conex.executaSql(Sql);
}
precisa chamar
createDataset("SELECT * FROM tabela");
Agora se você quer fazer sem o atributo, é só tirar o String sql, e preencher a query direto no método:
private XYDataset createDataset(){
conex.executaSql("SELECT * FROM suaTabela");
}
Olha um código que eu tenho, eu insiro ele dentro de um painel:
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.sql.SQLException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.block.BlockBorder;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.RectangleEdge;
public class VisitanteDiario extends JFrame {
public VisitanteDiario(JPanel panel) {
initUI(panel);
}
private void initUI(JPanel panel) {
XYDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
chartPanel.setBackground(Color.white);
panel.add(chartPanel, BorderLayout.CENTER);
}
private XYDataset createDataset() {
XYSeriesCollection dataset = null;
try {
ConectaBanco conecta = new ConectaBanco();
conecta.conexao();
conecta.executaSQL("SELECT the_date, COUNT(nome) AS visita FROM dias_do_mes() LEFT JOIN visitantes on the_date = to_date(visitantes.dataentrada,'DD/MM/YYYY') GROUP BY dias_do_mes.the_date ORDER BY the_date ASC");
XYSeries series = new XYSeries("");
while (conecta.rs.next()) {
int total = conecta.rs.getInt("visita");
Date data = conecta.rs.getDate("the_date");
series.add(data.getDate(), total);
}
dataset = new XYSeriesCollection();
dataset.addSeries(series);
} catch (SQLException ex) {
Logger.getLogger(VisitanteDiario.class.getName()).log(Level.SEVERE, null, ex);
}
return dataset;
}
private JFreeChart createChart(XYDataset dataset) {
JFreeChart chart = ChartFactory.createXYLineChart(
"",
"",
"Qtd. de Visitas",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false
);
XYPlot plot = chart.getXYPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesPaint(0, new Color(77, 71, 221));
renderer.setSeriesStroke(0, new BasicStroke(3.0f));
plot.setRenderer(renderer);
//Mudar fonte das informações laterais e rodapé
Font font3 = new Font("Montserrat Medium", 0, 14);
plot.getDomainAxis().setAutoRangeMinimumSize(20);
plot.getDomainAxis().setLabelFont(font3);
plot.getRangeAxis().setLabelFont(font3);
//
//Setando intervalo
// plot.getDomainAxis().setAutoRangeMinimumSize(1);
// plot.getDomainAxis().setAutoRange(false);
NumberAxis xAxis = (NumberAxis) plot.getDomainAxis();
xAxis.setTickUnit(new NumberTickUnit(1));
//
//Valor inteiro ao invés de float
plot.getDomainAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits());
plot.getRangeAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits());
//
//Trocar cor do bg e detalhes...
plot.setBackgroundPaint(Color.white);
plot.setRangeGridlinesVisible(true);
plot.setRangeGridlinePaint(new Color(230, 230, 230));
plot.setDomainGridlinesVisible(false);
plot.setDomainGridlinePaint(new Color(230, 230, 230));
plot.setOutlinePaint(null);
//
//configurações da legenda
chart.getLegend().setFrame(BlockBorder.NONE);
chart.setBorderVisible(false);
chart.getLegend().setPosition(RectangleEdge.TOP);
//
return chart;
}
}