zapisywanie do wykresu słupowego

0

Witam,

jestem trochę świeży w javie więc proszę Was o pomoc.
Mam taki problem mam 3 rzeczy - połączenie do bazy przez sterowniki DB2 , zapytanie sql które wyciąga dane ale potrzebuje te dane zamienić na wykres słupowy i nie moge sobie z tym poradzić.
Dane do logowania są poprawne tylko je usunąłem.

package wykres2;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDateTime;

public class DB2 {

	public static Connection connectionDB2;

	public DB2() {
		if (connectionDB2 == null) {
			connect();
		} else {
			System.out.println(LocalDateTime.now() + " : " + "Already connected to DB2 database");
		}
	}

	// connect database Tomcat
	

	// connect database
	public void connect() {
		final String DATABASE_DRIVER = "com.ibm.db2.jcc.DB2Driver";
		//final String DB2SERVER = "";
		final String DB2SERVER = "";
		final String URL = "jdbc:db2://" + DB2SERVER + "/NDT";
		final String USERID = "";
		final String PASSWORD = "";

		try {
			// Load the Connector/J driver
			Class.forName(DATABASE_DRIVER);
			// Establish connection to DB2
			connectionDB2 = DriverManager.getConnection(URL, USERID, PASSWORD);
			System.out.println(LocalDateTime.now() + " : " + "Connected to local DB2 database");

		} catch (ClassNotFoundException | SQLException e) {

			System.out.println("Connected to local DB2 database failed");
			e.printStackTrace();
		}
	}

	// disconnect database
	public static void disconnect() {
		if (connectionDB2 != null) {
			try {
				connectionDB2.close();
				connectionDB2 = null;
				System.out.println(LocalDateTime.now() + " : " + "Connection to DB2 closed");

			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public void deleteTable(String table) {

		String queryDel = " delete " + table;
		Statement stmt = null;

		try {
			System.out.println(LocalDateTime.now() + " : " + "Deleting table " + table + " in given NDT database");
			connectionDB2.setAutoCommit(true);
			stmt = connectionDB2.createStatement();
			stmt.executeUpdate(queryDel);

		} catch (Exception e) {
			e.printStackTrace();
			System.err.println("Error by deleting " + table + " table in NDT database");
		} finally {
			if (stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}

		}
	}

}

drugi...

package wykres2;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class XMLDOCSDao extends DB2 {

	public void selectData(int since) {

		String selectQuery = ("SELECT TRKONZ, TRFIRM, TRZUNR, TRKENN, TRFKEY, TRDTA, TRTIA, TRVSTS, TRDTV, TRTIV, PCQTY, PSQTY, FSTAPN, LSTAPN"
				+ " FROM XMLDOCS where TRDTA> "+ since +" order by trdta, trtia");

		Statement stmt= null;
		try {
			stmt = connectionDB2.createStatement();
			ResultSet rs = stmt.executeQuery(selectQuery);

			
			System.out.println("data \t\t time \t\t qty");
	
			while(rs.next()) {
				
				
				int data = rs.getInt("TRDTA");
				int czas = rs.getInt("TRTIA");
				int pcs = rs.getInt("PCQTY");

				
			
				System.out.print(data + "\t");
				System.out.print(czas + "\t");
				System.out.println("\t" + pcs );
			}	
				
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			disconnect();
			
			
		}

	//	int data; // trdta;
	//	int czas; // trtia;
	//	int ilosc; // psqty;

	}

}

i trzeci

package wykres2;
public class ShowData1 {
	
	

	public static void main(String[] args) {
		

		XMLDOCSDao xmldocsdao = new XMLDOCSDao();
		
		
		xmldocsdao.selectData(20190501);
		
		
		
	}

}

proszę o podpowiedź jak się za to zabrać.

0

Albo jestem ślepy, albo wstawiłeś 3 razy to samo.

Jaki masz problem? W czym mamy pomóc? Pogooglowałeś w ogóle jak można zrobić taki wykres ale w trakcie implementacji dostajesz błędy czy po prostu oczekujesz od nas gotowej implementacji?

0

Może opisz osie. Bo domyślam się żę Y to ilość, X to czas, przedział czasu? Jakie dane masz, czego ten wykres dotyczy? Albo machnij jakąś tabelke w excelu z wykresem i pokaż o co cho

0

Aby narysować wykres potrzebujesz dane. Dane "wyciągasz" z bazy ale tylko je printujesz. Zmień typ metody na odpowiedni, czy to lista, czy mapa, czy zbiór (nie wiem jakiego typu dane wycigąsz oraz jaką chcesz otrzymać zależność na wykresie). Dzięki temu będziesz mógł użyć te dane wyciągnięte z bazy dalej, nie tyko wewnątrz metody w której wyciągasz je z bazy.

0

orchowskia napisał(a):

Może opisz osie. Bo domyślam się żę Y to ilość, X to czas, przedział czasu? Jakie dane masz, czego ten wykres dotyczy? Albo machnij jakąś tabelke w excelu z wykresem i pokaż o co cho

coś takiego mniej więcej

0
au7h napisał(a):

http://www.jfree.org/index.html

Temat jest dalej otwarty , jakies inne pomysły ?

0
Bellebur napisał(a):
au7h napisał(a):

http://www.jfree.org/index.html

Temat jest dalej otwarty , jakies inne pomysły ?

package wykres2;


import java.awt.Color;
import java.awt.Font;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.IntervalMarker;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.Layer;
import org.jfree.ui.RectangleAnchor;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.TextAnchor;


public class wykres extends ApplicationFrame {

 
	private static final long serialVersionUID = 1L;

	
    public wykres(final String title) {
        super(title);
        IntervalXYDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset);
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        setContentPane(chartPanel);
    }
    
 
    private IntervalXYDataset createDataset() {
        final XYSeries series = new XYSeries("Ilość");
        series.add(1.0, 400.2);
        series.add(5.0, 294.1);
        series.add(4.0, 100.0);
        series.add(12.5, 734.4);
        series.add(17.3, 453.2);
        series.add(21.2, 500.2);
        series.add(21.9, null);
        series.add(25.6, 734.4);
        series.add(30.0, 453.2);
        final XYSeriesCollection dataset = new XYSeriesCollection(series);
        return dataset;
    }

  
    private JFreeChart createChart(IntervalXYDataset dataset) {
        final JFreeChart chart = ChartFactory.createXYBarChart(
            "",
            "", 
            false,
            "", 
            dataset,
            PlotOrientation.VERTICAL,
            true,
            true,
            false
        );
        XYPlot plot = (XYPlot) chart.getPlot();
        final IntervalMarker target = new IntervalMarker(400.0, 700.0);
        target.setLabel("Target Range");
        target.setLabelFont(new Font("SansSerif", Font.ITALIC, 11));
        target.setLabelAnchor(RectangleAnchor.LEFT);
        target.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
        target.setPaint(new Color(222, 222, 255, 128));
        plot.addRangeMarker(target, Layer.BACKGROUND);
        return chart;    
    }
    
   
    public static void main(final String[] args) {

        final wykres demo = new wykres("Dane");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);

    }

}

to jest tylko przykładowy wykres chce wczytać dane które pobieram z bazy danych , czy jesteś w stanie mi w tym pomóc ?
aaa i jeszcze za każdym razem uruchomienia aplikacji otwiera sie nowe okno a chce żeby mi to odświeżał bez otwierania kolejnego okna.

1

zamykam temat.

1 użytkowników online, w tym zalogowanych: 0, gości: 1