您的位置首页生活百科

怎么利用java从数据库做柱状图

怎么利用java从数据库做柱状图

的有关信息介绍如下:

怎么利用java从数据库做柱状图

数据报表经常会使用到各种图像来形象的展示数据,很直观的可以看出数据分布,各分类的对比。下面介绍如何使用java读取数据库数据,然后显示成柱状图

生成的图像界面主要是依赖jfreechart来实现,首先得添加jfreechart的依赖包

org.jfree

jfreechart

1.0.19

还需要读取数据库,这里演示的例子采用mysql数据库,所以得添加mysql的连接驱动包

mysql

mysql-connector-java

5.1.30

新建数据库表,用来存放数据

CREATE TABLE `t_school_info` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`school` varchar(255) DEFAULT NULL COMMENT '学校',

`area` varchar(255) DEFAULT NULL COMMENT '地区',

`amount` int(11) DEFAULT '0' COMMENT '数量',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='学校信息表';

添加一些用来测试的数据,可以根据需要自己插入到数据库中

编写查询数据库数据方法,这里只是演示,所以采用最简单的jdbc连接查询数据,如果是正常的项目,可以使用mybatis或者hibernate来做持久化框架查询数据

创建数据集,使用查询数据库的数据,循环组装成JFreeChart需要的数据集

创建JFreeChart对象,设置图表标题、目录轴的显示标签、数值轴的显示标签、数据集、图表方向等,并设置字体和大小

运行之后看效果,效果如下图所示

最后附上完整的测试代码

package cn.sw.study.common.test.chart;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartPanel;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.axis.CategoryAxis;

import org.jfree.chart.axis.ValueAxis;

import org.jfree.chart.plot.CategoryPlot;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.data.category.CategoryDataset;

import org.jfree.data.category.DefaultCategoryDataset;

import javax.swing.*;

import java.awt.*;

import java.sql.*;

import java.util.ArrayList;

/**

* 测试柱状图

* Created by shaowei on 2017/8/16.

*/

public class TestBarChart {

ChartPanel frame;

public TestBarChart(){

CategoryDataset dataset = getDataSet();

JFreeChart chart = ChartFactory.createBarChart3D(

"学校", // 图表标题

"学校类型", // 目录轴的显示标签

"数量", // 数值轴的显示标签

dataset, // 数据集

PlotOrientation.VERTICAL, // 图表方向:水平、垂直

true, // 是否显示图例(对于简单的柱状图必须是false)

false, // 是否生成工具

false // 是否生成URL链接

);

//从这里开始

CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象

CategoryAxis domainAxis=plot.getDomainAxis(); //水平底部列表

domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12)); //垂直标题

domainAxis.setLabelFont(new Font("黑体", Font.BOLD,14)); //水平底部标题

ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状

rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));

chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));

chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));//设置标题字体

//到这里结束,虽然代码有点多,但只为一个目的,解决汉字乱码问题

frame=new ChartPanel(chart,true); //这里也可以用chartFrame,可以直接生成一个独立的Frame

}

private static CategoryDataset getDataSet() {

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

java.util.List list = queryData();

for (SchoolInfo schoolInfo : list) {

dataset.addValue(schoolInfo.getAmount(), schoolInfo.getArea(), schoolInfo.getSchool());

}

return dataset;

}

public ChartPanel getChartPanel(){

return frame;

}

public static void main(String[] args) {

JFrame frame = new JFrame("Java柱状图图");

// frame.setLayout(new GridLayout(2,2,10,10));

frame.add(new TestBarChart().getChartPanel()); // 添加柱形图

frame.setBounds(50, 50, 800, 600);

frame.setVisible(true);

}

public static java.util.List queryData(){

Connection conn = null;

String sql;

String url = "jdbc:mysql://localhost:3306/study?"

+ "user=root&password=shaowei&useUnicode=true&characterEncoding=UTF8";

java.util.List list = new ArrayList();

try {

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection(url);

Statement stmt = conn.createStatement();

sql = "select id,school,area,amount from t_school_info";

ResultSet rs = stmt.executeQuery(sql);

while (rs.next()) {

list.add(new SchoolInfo(rs.getInt(1), rs.getInt(4), rs.getString(3), rs.getString(2)));

}

} catch (SQLException e) {

System.out.println("MySQL操作错误");

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

return list;

}

}