JFreeChart与MySQL数据库结合使用

import org.jfree.ui.ApplicationFrame;

import iaqms.com.CustomRenderer;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import javax.swing.JPanel;

import java.awt.Color;

import java.awt.Font;

import java.awt.GradientPaint;

import java.awt.RenderingHints;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartFrame;

import org.jfree.chart.ChartPanel;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.StandardChartTheme;

import org.jfree.chart.axis.CategoryAxis;

import org.jfree.chart.axis.CategoryLabelPositions;

import org.jfree.chart.axis.NumberAxis;

import org.jfree.chart.axis.NumberTickUnit;

import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;

import org.jfree.chart.labels.StandardPieSectionLabelGenerator;

import org.jfree.chart.plot.CategoryPlot;

import org.jfree.chart.plot.PiePlot;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.chart.plot.RingPlot;

import org.jfree.chart.renderer.category.BarRenderer;

import org.jfree.chart.title.LegendTitle;

import org.jfree.chart.title.TextTitle;

import org.jfree.data.category.CategoryDataset;

import org.jfree.data.category.DefaultCategoryDataset;

import org.jfree.data.general.DefaultPieDataset;

import org.jfree.data.general.PieDataset;

import org.jfree.ui.RefineryUtilities;

public class PieChartDB extends ApplicationFrame {

private static final long  serialVersionUID = 1L;

public static void main(String[] args) {

PieChartDB piechart = new PieChartDB("饼状图");

piechart.pack();

RefineryUtilities.centerFrameOnScreen(piechart);

piechart.setVisible(true);

}

//构造函数产生实例

public PieChartDB(String number){

super(number);

setContentPane(createpiePanel());

}

//生成报表的面板

public static JPanel createpiePanel() {

JFreeChart jfreechart = createChart(createDataset());

return new ChartPanel(jfreechart, false);

}

private static JFreeChart createChart(PieDataset dataset){

//解决乱码问题(不能显示中文的问题)

StandardChartTheme mChartTheme = new StandardChartTheme("CN");

mChartTheme.setLargeFont(new Font("黑体", Font.BOLD, 20));

mChartTheme.setExtraLargeFont(new Font("宋体", Font.PLAIN, 15)); //标题

mChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 15));

ChartFactory.setChartTheme(mChartTheme);

//生成饼状图的对象

JFreeChart chart = ChartFactory.createPieChart(

"图书销量统计图",//图标标题

dataset, //数据

true,//是否显示图例

false,//是否显示工具提示

false//是否生成url

);

//设置一系列的属性

//获得饼图的Plot对象

PiePlot plot = (PiePlot)chart.getPlot();

//用来显示标注的注解,{0}:{1}用来设置显示的格式

plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}:{1}"));

plot.setBackgroundPaint(Color.gray);//设置背景色

//设置简单标签

plot.setSimpleLabels(true);

//标题

TextTitle texttitle=chart.getTitle();

texttitle.setFont(new Font("宋体", Font.BOLD, 30));

//图示

LegendTitle legendtitle =chart.getLegend();

legendtitle.setItemFont(new Font("宋体", Font.BOLD, 14));

//设定背景透明度(0-1.0之间)

plot.setBackgroundAlpha(0.5f);

//设定前景透明度(0-1.0之间)

plot.setForegroundAlpha(0.60f);

return chart;

}

private static PieDataset createDataset() {

double[][] table = null;

String[] name = null;

String[] number = null;

int result = 0;

try{

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

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sale", "root", "fab");

ResultSet rs = conn.createStatement().executeQuery("select name,number from sale");

// 取得行数

if (rs.last()){

result = rs.getRow();

rs.beforeFirst(); // 指针回滚

}

table = new double[result][rs.getMetaData().getColumnCount() - 1];// 定义存放数据的二维数组

name = new String[result];

number = new String[rs.getMetaData().getColumnCount() - 1]; // 定义存放数据表头的一维数组

rs.next();

for (int j = 0; j < rs.getMetaData().getColumnCount() - 1; j++) {

number[j] = rs.getMetaData().getColumnName(j + 2); // 取出表头并存放数组

}

int i = 0;

rs.beforeFirst();

while (rs.next()) {

name[i] = rs.getString(1);

for (int j = 0; j < rs.getMetaData().getColumnCount() - 1; j++)

table[i][j] = rs.getDouble(j + 2); // 取出数据并存入二维数组

i++;

}

conn.close(); // 关闭连接

rs.close(); // 关闭查询

} catch (Exception ex) {

System.err.println("Exception:" + ex.getMessage());

}

//创建DefaultPieDataset类型的数据集,并行数据集中添加数据(从数据库中取的数据)

DefaultPieDataset dataset = new DefaultPieDataset();

for (int i = 0; i < number.length; i++)

for (int j = 0; j < result; j++) {

dataset.setValue(name[j],table[j][i] );

//调试用

System.out.println(table[j][i]);

System.out.println(name[j]);

}

return dataset;

}

}

数据库脚本:

CREATE DATABASE /*!32312 IF NOT EXISTS*/`sale` /*!40100 DEFAULT CHARACTER SET gbk */;

USE `sale`;

DROP TABLE IF EXISTS `sale`;

CREATE TABLE `sale` (

`name` varchar(150) default NULL COMMENT ‘书名‘,

`number` varchar(150) default NULL COMMENT ‘数量‘

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

insert  into `sale`(`name`,`number`) values (‘C++‘,‘18‘),(‘Java‘,‘20‘),(‘数据结构‘,‘30‘),(‘安桌‘,‘40‘),(‘IOS‘,‘25‘),(‘计算机网络‘,‘28‘);

运行结果图:

时间: 2024-08-09 23:07:21

JFreeChart与MySQL数据库结合使用的相关文章

Linux环境下MySQL数据库用SQL语句插入中文显示 “问号或者乱码 ” 问题解决!

问题: 在普通用户权限下执行 mysql -u root -p进入mysql数据库,中间步骤省略,插入数据:insert into 库名(属性)values('汉字'); 会出现如下提示:  Query OK, 1 row affected, 1 warning (0.00 sec)    表明出现错误,没有插入成功,然后执行select * from 表名   就会出现如下的问题:显示的表中出现乱码或者问号. 如图: 解决方案: 首先重新打开一个终端窗口(方便操作),进入root用户模式 执行

MySQL数据库基础知识

day02 MySQL数据库基础知识 一.基础知识概述: 基础决定你这门课程的学习成败!只有学习好这些基础知识以后,你才能真正的运用自如.才能够对数据库有更深入的了解,道路才会越走越远. 二.基础知识: 1.数据库(database):数据库就好比是一个物理的文档柜,一个容器,把我们整理好的数据表等等归纳起来. 创建数据库命令:        create database 数据库名; 2.查看数据库         show databases; 3.打开指定的数据库         use 

Linux环境下启动MySQL数据库出现找不到mysqld.sock的解决办法!

问题: 在普通用户权限下运行:mysql -u root -p,回车之后如果会出现如下错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 此错误的意思就是没有找到mysqld.sock文件. 解决办法: 首先进入超级用户root权限  sudo -i 或者su - root 切换到默认目录 cd /var/lib/mysql  下查看

MySQL数据库

day01 MySQL数据库及数据类型 一.MySQL概述: MySQL数据库是一个关系型数据库,是目前流行的开源代码数据库,是完全网络化的跨平台的关系型数据库系统,MySQL数据库同时也是目前市场上得到广泛运用的和安装使用的,可以称的上是目前运行速度最快的sql语言数据库,主要的优势和特点有一下几点: 1.成本---MySQL数据库是开源代码的,一般是免费使用. 2.性能---MySQL数据库执行速度快 3.可信赖---某些大型的公司和企业单位以及网站都是使用MySQL数据库. 4.简单---

MySQL数据库中的算术运算符

MySQL数据库中的算数运算符 MySQL数据库中的算术运算符 一.运算符的概述: 运算符在MySQL数据库中也是很重要的知识体,在执行sql语句的时候这个运算符对操作数据帮助很大.其中运算符的运用可以帮助你减省大量的时间,操作起来也比较灵活. 二.运算符 运算符主要包括"算数运算符"."比较运算符"."罗运算符"."位运算符"四大类,下面我们就一次学习一下. 1.算术运算符 算术运算符在sql语句的时候经常使用,例如对表的字

MySQL数据库自学

MySQL数据库自学序言 亲爱的自己和各位读者朋友: 您们好! 这是作者本人自学Java编程开发的一系列文章,不具有一定的权威性,也算是自己一个人的学习笔记和总结,希望自己通过博客的形式将我自己的学习效率得到提高.如自学的稳重存在不足或错误的地方希望广大的博客朋友们多多指教.本人在此不胜感激!  天下数据库同属一家,可以说是兄弟关系.学习MySQL数据库可以说是一件很有趣的学习过程,就目前市场上对MySQL数据库的程序员需求量比较大.当你自己应聘一份工作的时候,MySQL数据库的技术技能是你必须

利用PHP实现登录与注册功能以及使用PHP读取mysql数据库——以表格形式显示数据

登录界面 <body><form action="login1.php" method="post"><div>用户名:<input type="text" name="uid" /></div><br /><div>密码:<input type="password" name="pwd" />

Mysql数据库理论基础之五--SELECT单多表查询、子查询、别名

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建.这样,表的大小就能超过单独文件的最大容量.表空间可包括原始磁盘分区,从而使得很大的表成为可能

Mysql数据库性能优化(一)

参考 http://www.jb51.net/article/82254.htm 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库. mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面