文档库 最新最全的文档下载
当前位置:文档库 › java千万级别数据生成文件思路和优化

java千万级别数据生成文件思路和优化

java千万级别数据生成文件思路和优化
java千万级别数据生成文件思路和优化

一年前写过一个百万级别数据库数据生成配置xml文件的程序,程序目的是用来把数据库里面的数据生成xml文件.程序可以配置多少文件生成到一个文件中去.

程序刚开始设计的时候说的是最多百万级别数据,最多50W数

据生成到一个xml文件里面去,所以在做测试的时候自己也只是造了100W的数据并没有做过多数据量的测试,然后问题就来了....由于程序使用的局点数据量巨大,需要生成xml文件的客户资料接近千万级别的程度,而现场对程序的配置大约是100W条数据生成一个xml文件里面去,程序在这样的大数据量下面偶尔会有崩溃.

最近几天现场催的比较紧,最近抽空把这个问题处理了一下,在解决问题的过程中我把解决的步骤和方法记录了下来,正好和大家共享一下

现场提的问题概况:

数据量:生成xml,每个文件100W+ 条的数据

内存控制:最好不要超过512M

问题详情:在处理70W左右的时候内存溢出

一、先来看一下程序要生成的xml文件的结构

1

12

03

004

5

0006

1000000

10350719507

1

20110303

20110419

45000

...

二、给大家说一下如何把大数据生成xml文件

1、小数据量的情况下 < 1W条数据

比较好用的方法是使用开源框架,比如XStream 直接把javabean 生成 xml

优点:api操作简单,方便维护

缺点:数据量大的情况下太消耗内存

2、大数据量生成一个xml文件(本程序采用的方法)

自己做的一个可以使用极少的内存生成无限制大的xml文件框架由3部分生成xml文件

第一部分:生成文件头

例如: xxx.toXML(Object obj, String fileName)

第二部分:通过每次向文件里面追加3000(可配置)条数据

的形式生成文件块

例如:xxx.appendXML(Object

object); //object 可以是ArrayList 或者一个单独的javaBean

第三部分:生成xml文件尾巴

例如:xxx.finishXML();

程序中的调用:调用xxx.toXML(Object obj, String

fileName) 生成文件头之后,可以循环从数据库中读取数据生成ArrayList,通过xxx.appendXML(Object object) 方法追加到xml文件里面,xxx.finishXML() 对文件进行收尾

对框架说明:我上面提供的例子有文件头 + 文件块 + 文件

尾巴. 如果和你们的实际使用文件不太一致的话,可以参考上面提供的思路修改一下即可,主要的方法是把相同的文件块部分分离出来通过追加的形式写入xml 文件.

有了思路之后,大家可以尝试着自己写一个类似的大数据处理框架(千万级别以上),如何有什么需要帮助的可以直接联系我,因为是公司的程序,不太敢放出来,怕......

三、我是如何测试性能和优化的

1、手动排除

根据文件崩溃时候的日志发现是在生成xml的框架里

面报的错误,第一想到的是框架有些资源没有释放.于是把自己做的文件生成框架整体的排查了一遍,并且自己写个简单程序生成200万条数据,使用xml框架生成一个xml文件,整个生成过程中任务管理器(xp)查看程序对应的java进程使用的内存基本在20M左右,因此排除框架的问题.怀疑是数据库查询和调用框架

的部门出现问题.

检测了一遍主程序的关键部分代码,优化了一下字符

串处理.手动的释放一些对象的内存(例如:调用ArrayList.clear(),或者把对象置空等),分配512内存后运行程序,60万数据的时候内存溢出,因为能主动

释放的对象都已经释放掉了,还是没有解决,果断放弃看代码,准备使用

JProfile进行内存检测.

2、手动排除没有解决,借助内存分析工具JProfile进行排除

通过在数据库中生成300W条数据,在JProfile上面

多跑程序,一边运行,一边调用JProfile 提供的执行GC按钮主动运行垃圾回收,运行50W数据后,通过检测中发现 java.long.String[] 和

oracle.jdbc.driver.Binder[] 两个对象的数目一直保持在自增状态,而且数目基本上差不多,对象数目都在200W以上,由于java.long.String[]对象是需

要依赖对象而存在的,因此断定问题就出在oracle.jdbc.driver.Binder[]上面,由于改对象存在引用导致String[]不能正常回收.

3、通过在JProfile对象查看对象的管理

检测到oracle.jdbc.driver.Binder 被

oracle.jdbc.driver.T4CPreparedStatement 引起,而T4CPreparedStatement

正好是Oracle对jdbc OraclePreparedStatement的具体实现,因此断定是在数据库处理方面出现的问题导致oracle.jdbc.driver.Binder对象不能正常释放,通过再一次有目的的检测代码,排查jdbc数据查询的问题,把问题的矛头直至数据库的批处理和事务处理.因此程序是每生成一个文件成功后,会把已经处理的

数据转移到对应的历史表中进行备份,而再个表操作的过程中使用了批处理和事务,使用批处理主要是保证执行速度,使用事务主要是保证同时成功和失败。

4、又因此程序每次从数据库中查询3000条数据处理,所以

准备监控oracle.jdbc.driver.Binder的对象数目是否和查询次数对应.,通过在程序中Sysout输出查询次数 + JProfile运行GC测试 Binder,数据匹配,证实是java在数据库批处理的过程中有些问题.

5、专门把批处理代码提取出来通过JProfile内存分析.最终问题定位完毕.

原因如下:100W数据生成一个文件的过程中,等文件

生成完毕之后才能把数据库中的数据备份到历史表中,这个时候才能进行事务的提交,也就是执行commit(),并且删除原表数据,100W数据按照3000一批写入文件,每批次只是通过 PreparedStatement.addBatch();加入到批次里面去,并没有执行PreparedStatement.executeBatch(),而是在commit()之前统一调用的PreparedStatement.executeBatch(),这样的话PreparedStatement就会缓存100W条数据信息,造成了内存溢出.

错误的方法如下:

try{

conn.setAutoCommit(false);

pst = conn.prepareStatement(insertSql);

pstDel = conn.prepareStatement(delSql);

pstUpdate = conn.prepareStatement(sql);

...

//totalSize = 100W数据/ 3000一批次

for (int i = 1; i <= totalSize; i++) {

client.appendXML(list);

}

// 错误的使用方法

client.finishXML();

pst.executeBatch();

pstDel.executeBatch();

}

finally {

try {

if (isError) {

conn.rollback();

}

else

https://www.wendangku.net/doc/ff18890044.html,mit();

...

}

...

}

正确的方法如下

try{

conn.setAutoCommit(false);

pst = conn.prepareStatement(insertSql);

pstDel = conn.prepareStatement(delSql);

pstUpdate = conn.prepareStatement(sql);

...

//totalSize = 100W数据/ 3000一批次

for (int i = 1; i <= totalSize; i++) {

list = 从数据库中查询3000条数据

client.appendXML(list);

pst.executeBatch();

pstDel.executeBatch();

}

client.finishXML();

}

...

finally {

try {

if (isError) {

conn.rollback();

}

else

https://www.wendangku.net/doc/ff18890044.html,mit();

...

}

}

如果碰到和我一样的需要给大家一个提醒.

oracle在每次执行executeBatch();进行批处理的时候,当前connection对应的rownum会根据操作的结果发生变化.

在执行pst.executeBatch(); 之后,当前连接的rownum 数就会发生变化. 因此凡是通过rownum查询数据的程序都要小心这一点

JAVA实现计算器课程设计

JAVA实现计算器课程设计 计算机科学系 计应0701班 指导老师:刘其昌 设计人员:陈秀桃 设计日期:2009年11月10日——2009年12月20日 计算器的设计 目录 第一章绪 论 ..................................................................... .. (2)

1.1 开发环 境 ..................................................................... . (2) 1.2 基本功能介 绍 ..................................................................... ......... 2 第二章系统设 计 ..................................................................... (3) 2.1 系统流程 图 ..................................................................... . (3) 2.2 系统功能框 图 ..................................................................... (3) 2.3 需求分 析 ..................................................................... ................ 4 第三章软件设 计 ..................................................................... (5) 3.1 界面设 计 ..................................................................... . (5) 3.2 代码设 计 .....................................................................

java利用xml导出word(占位符替换)

package cn.action; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import sun.misc.BASE64Encoder; public class XmlWord { private Map dataMap = new HashMap(); public Map getDataMap() { return dataMap; } public void setDataMap(Map dataMap) { this.dataMap = dataMap; } /** * 设置标识值 * @param tagList 标识 * @param dataList 数据 * @param dataMap */ public void setData(List tagList,List dataList){

用JAVA设计一个科学型计算器

题目:设计一个Windows计算器。 摘要 在当今这个网络的时代,我找了好多java的代码材料。修改后程序是一个图形界面的java计算器,其界面主要采用了awt包,程序实现了: (1)实现简单加、减、乘、除的运算。 (2)实现除了加、减、乘、除按钮外其他按钮功能。 (3)给软件添加一个编辑、查看、帮助的主菜单。 (4)在数据输入方面,提高程序代码的健壮性,增强其对非法输入数据的识别能力。 (5)科学型计算器与标准计算器之间的菜单切换。 关键字:java程序编辑器面向对象计算器 目录 第1章概要设计 (8) 1.标准型计算器界面设计 (8) 第2章程序整体设计说明 (10) 2.1程序中所用到的变量 (10) 2.2程序部分源代码及注释 (11) 3章程序运行效果 (22) 3.程序运行主界面 (22) 3.程序中各按钮运行界面 (24) 3.本章小节 (26) 作业结论 (26) 第1章概要设计 1.1标准型计算器界面设计 1.1.1 JAVA文件的建立 (1)建立一个名称为“java”Java工程, package文件包名称为 :scr;计算器主类:Calculator。 (2)界面的设计:

图1.1标准型计算器界面 图 1.2 图1.3 (3)保持代码简洁 复杂代码写后不易理解,在修改和重写上难度比较大,使工作更加复杂,所以编写代码时应保持代码的简洁易懂。 数字按钮字体和颜色设置 功能按钮字体和颜色设置

(4)功能实现 在整个设计中要保持完整性,能够实现计算器中最基本的功能,如加、减、乘、除等。 1.1.2明确任务 用java编写一个简单的计算器,使其能够实现最基本的功能,如简单的加、减、乘、除;平方根,倒数,余数,三角函数,多数连续运算,科学计数法等功能。 第2章程序整体设计说明 2.2 程序部分源代码及注释 (1)复制菜单的功能创建代码如下: (2)粘贴菜单的功能创建代码如下:

JaxbContext生成xml文件或java类对象转化注解

JAXB(Java API for XML Binding),提供了一个快速便捷的方式将Java对象与XML进行转换。在JAX-WS(Java的WebService规范之一)中,JDK1.6 自带的版本JAX-WS2.1,其底层支持就是JAXB。 JAXB 可以实现Java对象与XML的相互转换,在JAXB中,将一个Java对象转换为XML 的过程称之为Marshal,将XML转换为Java对象的过程称之为UnMarshal。我们可以通过在Java 类中标注注解的方式将一个Java对象绑定到一段XML,也就是说,在Java类中标注一些注解,这些注解定义了如何将这个类转换为XML,怎么转换,以及一段XML如何被解析成这个类所定义的对象;也可以使用JAXB的XJC工具,通过定义schema的方式实现Java 对象与XML的绑定(这个下次研究)。 下面来了解一下如何通过标注注解来完成 Marshal 和 UnMarshal 的过程。我用的是JAXB2_20101209.jar ,可以到[url]https://www.wendangku.net/doc/ff18890044.html,/[/url] 下载最新版本。 首先看个小例子 定义一个java类 Java代码 package com.why.jaxb; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class People { public String id = "001"; public String name = "灰太狼"; public int age = 26; } Java To XML(Marshal) Java代码 package com.why.jaxb; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; public class Java2XML { /** * @param args * @throws JAXBException */ public static void main(String[] args) throws JAXBException { JAXBContext context = JAXBContext.newInstance(People.class);

科学计算器程序Java代码

科学计算器程序Java代码

MC:清除独立内存里的数字 MR:读出独立内存数字 MS:将显示数字保存到独立内存,并取代内存中原有数字 M+:将显示数字向独立内存累加 (独立内存是一个临时寄放数字的存储器,方便计算) CE:纠错键(CLEAR ERROR).输入数字有错,按它可以重新输入 C:表示清零,将计算器恢复到开机状态 功能举例: 源程序如下: import java.awt.BorderLayout;

import javax.swing.JRadioButtonMenuItem; import javax.swing.JTextField; public class Calucator extends JFrame { private JTextField tf; private JPanel panel1, panel2, panel3, panel4; private JMenuBar myBar; private JMenu menu1, menu2, menu3; private JMenuItem editItem1, editItem2, help1, help2, help3; private JRadioButtonMenuItem seeItem1, seeItem2;//单选框 private JCheckBoxMenuItem seeItem3;//复选框 private ButtonGroup bgb; private String back; private boolean IfResult = true, flag = false;

java,解析想xml,生成xml,步骤,原理

使用要导入dom4j-1.6.1.jar文件 我的dom4j文件在 讲解 生成xml 1:先通过DocumentHelper类的.createDocument()方法生成Document文件2:接着通过DocumentHelper类的createElement("根节点字符串形式")创建根节点 3:通过通过生成的Document的实例的setRootElement(根节点)设置根节点 4:接着可以通过Document的实例的getRootElement()方法得到根节点 5:接着通过根节点(Element类的实例)的.addElement("子节点的字符串形式")添加子节点 6:通过节点类(Element类的实例)的setText("字符串“)设置节点对应的值 7:通过Document类的实例的.asXML();的方式的得到xml字符串; (注意:xml 是字符串String的形式。 可以设置几个同名的根节点(username1<username2) 解析时通过Elment的.elementIterator("user");方法得到迭代器 ) 解析xml 1:通过new SAXReader();得到SAXReader的一个实例 2:通过StringReader(参数是字符串)将xml字符串转化为一个Reader字符输入流 3:通过SAXReader的实例.read(参数是个Reader)得到得到Document 4:通过Document的getRootElement()方法得到根节点(Element类的实例) 5:通过根节点的element("子节点的字符串形式")方法得到子节点 (若有多个同名子节点通过根节点的.elementIterator("user")得到同名节点迭代器)6:通过节点的getTxt();方法得到节点的值 生成xml 例子: private static Document constructDocument()//此处会被下面调用 { Document document = DocumentHelper.createDocument(); Element root = DocumentHelper.createElement("message"); document.setRootElement(root); return document; } document文件。结果是下面的形式

Java科学计算器程序代码

计算器布局显示: 功能举例: ①13+20=33 ②-7*14=-98:先输入7,再单击-/+将其变成负数,然后依次单击×号、14与= ③7!=5040 ④sin30°=0.5:先输入30,然后按下′″按钮转换成角度值,再按下sin即可显示结果 ⑤sqrt(4)=2:利用鼠标点击4后再点击sqrt按键即可显示结果 ⑥2*π=6.2832 …… 源程序如下: import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.DecimalFormat; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JRadioButtonMenuItem; import javax.swing.JTextField;

JavaXML绑定技术样本

Java XML绑定技术 --- 快速操作XML文档 注: 本文系原创, 转载请注明作者 -------- 叶瑞金 /06/10 在开发中, 我们常见XML来存储一些数据。相对于普通的文本文件, XML具 有开放性、支持多语言编码、支持结构性数据等优越性, 我们常见它存储配置 信息, 甚至直接使用它当作数据库使用。 最近由于项目需要, 我对Java XML绑定技术作了些研究, 现在把一些心得 与大家分享一下。 其实用Java读写XML的技术由来已久, 比如Apache的XML API、 xalan、 xerces都是很出名的项目, 都有将近十多年历史了吧。这些API对XML的操作 都是基于XML最底层的DOM和SAX模式, 原来也不算很复杂。我在以前项目中很 多关于配置文件的管理部分都是用这些API来完成的。但不论是用DOM还是SAX, 都要求XML的格式是预先定义好的。也就是说, 如果你已经写好了一份读写XML 的程序, 之后如果这个XML的格式作了修改, 那么你必须修改程序, 以保证能 够正确地从修改后的XML中读写数据。如果XML的格式很复杂, 或者牵涉的XML 文件类型众多, 那么这种修改将是一个浩大的工程。 如果我们能找到一种自动适应XML格式的方法, 能够根据当前XML的格式定 义, 自动地读写XML中的数据, 那么就能够节省我们很多精力和时间。能够把这 种技术称为XML绑定技术(XML Binding), 或者称为Object XML。真的有这样的 程序或框架吗? 我们能够用下面的图示来描述Java XML绑定技术: Person <----------------------------> |----- id<----------------------------> 123 |___ name<----------------------------> tom

Java课设 模拟科学计算器

Java课程设计 设计题目模拟科学计算器 班级计本1120班 姓名王XX 学号 1162042000

一、设计目的 《Java课程设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高自身的应用能力。 二、设计任务 模拟科学计算器 要求:界面模拟Windows中的计算器程序。 实现基本数学运算、函数等功能:加、减、乘、除、阶乘、正弦、余弦和指数运算。 实现要点:添加相关组件并进行按钮事件处理。 三、课题设计思想 对于此计算器程序,首先要设计其GUI界面,总体界面有一个文本框,22个按钮,总体界面用BorderLayout布局。 文本框放置在最north,然后0到9以及+,-,×,÷,.,!的按钮放置到一个面板Panel中,添加到整体布局的center,最后sin,cos,^,=的按钮放在最south,界面设计完成。 本项目用到了Java中的GUI界面和swing组件以及awt布局,所以简单易用,它能完成如下的几个小功能:点击按钮中的数字键和

运算符键就能进行加、减、乘、除阶乘、正弦、余弦和指数运算。还能通过用户自己在文本框中输入数字,进行简单运算;如果输入有误时可以按Clear撤销后重新输入新数据。 四、设计内容 1.需求分析 本项目需要实现一个具有四则运算的计算器,能够实现基本的加、减、乘、除运算,以及其他的辅助功能(阶乘、正弦、余弦、指数运算);界面简洁实用,模拟Windows中的计算器程序,要提供主要的设计思路、类的设计。 2.总体设计 (1)包的描述 本程序导入了 java.awt.BorderLayout包, java.awt.Color包, java.awt.GridLayout包, java.awt.event.ActionEvent包, java.awt.event.ActionListener包, java.text.DecimalFormat包, javax.swing.JButton包, javax.swing.JFrame包, javax.swing.JPanel包, javax.swing.JTextField包

java对象直接转换成xml格式

java对象直接转换成xml格式! import java.io.StringWriter;import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.annotation.XmlRootElement;@XmlRootEle ment(name = "Test") public class Test { private String id; private String name; public String getId() { return id; } public void setId(String id) {

this.id = id; } public String getName() { return name; } public void setName(String name) { https://www.wendangku.net/doc/ff18890044.html, = name; } public static void main(String[] args) throws JAXBException { Test re = new Test(); re.setId("id"); re.setName("name"); StringWriter sw = new StringWriter(); JAXBContext jAXBContext = JAXBContext.newInstance(re.getClass());

用Excel实现检验报告的自动生成

■●莲主_用Excel实现检验报告的自动生成 陈培光1崔运美2 (1.烟台市鸿山建设监理有限责任公司,烟台264000; 2.烟台市建筑材料科学研究所,烟台2删) 摘要针对目前检验报告在形成过程中存在过程繁杂及重复较多的情况,作者在大量实验研究的基础上, 提出了一种新的检验报告生成方法。详细介绍了如何在Excel中建立数据源文件和报告格式,并利用Excel的函数 功能自动调用数据源的数据,自动形成检验报告的过程。从而减少了检验报告形成过程中的重复劳动,确保了检 验报告的唯一性和准确性。 关键词检验报告;Excel;数据源文件;报告格式 DOI:10.3969/j.issIL1000—0771.2010.09.020 O引言 大多数质检机构在编制检验报告时,一般都用专门制作的程序软件,既方便又快捷。而对于一些检验产品比较单一、工作量又不是很大的检验机构,没有配备专门制作的软件。在编制检验报告时,要根据记录编制报告的封页、首页、附贞,有时还要对成批的报告做台帐进行汇总上报,其中有很多内容是在重复填写。而且,在进行报告审核时,要核对记录与报告、记录与台帐、报告各页之间的准确性和完整性,效率低且容易出错。而通过使用Excel,可以不用编程,只需将来样记录(样品台帐)、检验结果记录(结果台帐)编制成Excel表格格式,并制作出报告封页、首页、附页的格式,利用Excel函数,就可以自动提取来样记录、检验结果记录中的内容而自动生成检验报告。不但减少了重复劳动,而且保证了记录与报告及台帐之间数据和信息的唯一性、准确性。 1实施过程 检验报告(含报告封页、首页、附页)里的内容包括两部分:一部分内容是固定不变的,将其称为报告格式;一部分内容是变化的,将其称为数据源,如报告编号、产品名称等,它们以记录的形式存储在数据源文件中。 现以笔者试验室的检验报告编制过程为例,说明具体的实施过程。 1.1用“来样记录”工作表做数据源文件自动生成盐量蕉鲞至Q!Q:塑旦2报告封页和首页 启动Excel2003(其他版本仿照操作),新建一个工作薄,在sheetl中建立名为“来样记录”的工作表做数据源文件,如图l所示。 图l“来样记录”工作表 切换到sheet2工作表中,制作一个“报告首页”的格式,如图2。并在“报告首页”工作表中进行以下操作: 图2“报告首页”工作表格式 1)选定一个单元格,如J4,供打印和查找时输入行号。这个单元格由自己自由选择,如果改变这个单元格的位置,下面的公式中要做相应的修改。 ?6l? 万方数据

java课程设计计算器3科学计算器

import javax.swing.*;// 把 javax包里面的swing包里面的所有东西引进来 import java.awt.*;// 导入awt包里的所有java类 import java.awt.event.*;//导入包event import java.text.DecimalFormat;// 处理文本、日期、数字和消息的类和接口 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.awt.geom.Point2D; public class biaozhunjisuanqi extends JFrame implements ActionListener {// public代表该类公有 //class声明一个类 // biaozhunjisuanqi为类名 // extends 是继承类 //implements代表实现接口 //窗体名称biaozhunjisuanqi继承JFrame类和ActionListener接口,并实现public void actionPerformed(ActionEvent e){}方法 private static final long serialVersionUID = 1L;// serialVersionUID相当于java类的身份证, 默认为1L, serialVersionUID作用是序列化时保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性 private JPanel jContentPane = null; // 创建面板对象, null代表为这些变量赋初值为空,即不分配内存空间,变量不指向任何地址。private是访问控制符,代表这些变量的访问级别为私有,私有级别只能在当前类中进行访问, 这些(JPanel 、JTextArea 、JPanel、 JButton )是java中AWT(包)中的类,用能进行桌面级应用程序的开发,就像平时用的word,上面有各种文本框,菜单栏,工具栏按钮等等,这些都是对象 private JPanel jPanel= null; //JPanel 作为一个容器,可以包容一些组件,然后将这个 JPanel

XML创建与解析常用方法介绍

XML解析方式介绍 1.DOM4J(Document Object Model for Java) 虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。 为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections 类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。 在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java 开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。 DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J. 【优点】 ①大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。 ②支持XPath。 ③有很好的性能。 【缺点】 ①大量使用了接口,API较为复杂。 2.SAX(Simple API for XML) SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX 采用的是事件模型。

java读写xml文件的方法

在java环境下读取xml文件的方法主要有4种:DOM、SAX、JDOM、JAXB 1. DOM(Document Object Model) 此方法主要由W3C提供,它将xml文件全部读入内存中,然后将各个元素组成一棵数据树,以便快速的访问各个节点。因此非常消耗系统性能,对比较大的文档不适宜采用DOM方法来解析。 DOM API 直接沿袭了 XML 规范。每个结点都可以扩展的基于 Node 的接口,就多态性的观点来讲,它是优秀的,但是在Java 语言中的应用不方便,并且可读性不强。 实例: Java代码 1.import javax.xml.parsers.*; 2.//XML解析器接口 3.import org.w3c.dom.*; 4.//XML的DOM实现 5.import org.apache.crimson.tree.XmlDocument; 6.//写XML文件要用到 7.DocumentBuilderFactory factory = DocumentBuilderFactory.newInst ance(); 8. //允许名字空间 9. factory.setNamespaceAware(true); 10. //允许验证 11. factory.setValidating(true); 12. //获得DocumentBuilder的一个实例 13.try { 14. DocumentBuilder builder = factory.newDocumentBuilder(); 15.} catch (ParserConfigurationException pce) { 16.System.err.println(pce); 17.// 出异常时输出异常信息,然后退出,下同 18.System.exit(1); 19.} 20.//解析文档,并获得一个Document实例。 21.try { 22.Document doc = builder.parse(fileURI); 23.} catch (DOMException dom) { 24.System.err.println(dom.getMessage()); 25.System.exit(1); 26.} catch (IOException ioe) { 27.System.err.println(ioe); 28.System.exit(1); 29.}

数据自动生成工具 DataFactory 的使用

数据自动生成工具DataFactory 的简单使用 一、简介: Quest DataFactory 是一种快速的、易于产生测试数据工具,它能建模复杂数据关系,且有带有GUI界面。DataFactory是一个功能强大的数据产生器,它允许开发人员和QA毫不费力地产生百万行有意义的测试数据。 二、工作原理: 首先读取数据库中表的schema,即表的定义之类的内容,以列表的形式显示;然后由用户定制要产生数据的具体内容,如数字范围、字符串长度、要产生数据记录的个数等等,最后运行工程,生成数据。 三、安装: 看到网上DataFactory有5.6版本,但是这里使用的是5.2破解版。笔者没有详细研究这两个版本的区别,有兴趣的读者可以自己查阅相关资料。 四、使用说明: DataFactory支持的数据库类型有:DB2、SQL Server、Oracle以及Sybase,最后是ODBC 数据源。本文以ODBC为例来作介绍。在产生数据之前,需要首先设置好系统ODBC数据源,即添加待操作的数据源(开始--》控制面板--》管理工具--》ODBC数据源)。简单起见,创建一个Access数据库DataFactory.accdb,并在其中创建一个customer表。设数据源名称为test,添加完成之后,如下图所示:

图1: 五、产生数据的具体操作方法: 1. 新建工程,在添加数据库时选择ODBC 图2 :

2. 在“Machine Data Source”选项卡中选择test数据源(图3),确定之后会提示输入密码来登录(图4),不填,确定即可。这样,数据库就添加成功(图5),点击OK。 图3:

计算器设计的java课程设计报告

】 · ( 华东交通大学课程设计 课 程: Java 程序设计 题 目: 计算器设计 年 级: 2010级 专 业: 信息一班 * 学 号: 姓 名: 组 员: 指导教师: 课程设计题目:计算器设计

课程设计(论文)任务书 基础学院信息与计算科学专业2010—1 班 一、课程设计(论文)题目计算器的设计 二、课程设计(论文)工作自2013 年 6 月23日起至2013 年6月27日止。 三、课程设计(论文) 地点: 计算机中心 · 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)使学生掌握系统各功能模块的基本工作原理; (2)掌握Java的基本编程原理和基本的编程方法; (3)使学生学会系统调试; (4)培养学生分析、解决问题的能力; (5)提高学生的软件文档写作能力和团队合作精神。 2.课程设计的任务及要求 ' 1)基本要求: (1)分析系统各功能模块的工作原理; (2)提出系统的设计方案; (3)对所进行编程、调试、修改。 2)创新要求: 在基本要求达到后,可进行创新设计,如:用虚函数,文件流,重载流插入运算符等。3)课程设计论文编写要求 (1)要按照书稿的规格打印誊写设计论文; > (2)论文包括目录、摘要、正文、总结等; (3)毕业论文装订按学校的统一要求完成。 4)答辩与评分标准: (1)达到课程设计的目的与要求,程序的可读性较好,并调试正确,60分; (2)能正确回答老师所提问题,可增加10分; (3)课程设计报告书写规范整齐,可增加10分; (4)心得体会认真总结,可增加10分; (5)程序有创新性,可增加10分; [ 成绩评定实行优秀、良好、中等、及格和不及格五个等级。不及格者需重做。 5)参考文献:

JAVA生成XML文件

package com.inspur.test; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import org.jdom.Document; import org.jdom.Element; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; public class FileDemo { /** *@param args */ public static void main(String[] args) { // TODO Auto-generated method stub String filename="c:\\text.xml"; File file=new File(filename); /** *判断文件是否存在.如果文件不存在则生成一个文件 *则生成一个文件;反之则先删除原有文件,生成一个新的文件 */ if(file.exists()){ try { file.delete(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //创建根节点 Element root=new Element("ObjFlow"); //根节点添加到文档中 Document document=new Document(root); //添加工单基本信息 //创建工单基本信息的节点 Element baseinfo=new Element("BaseInfo"); //创建工单编号节点 Element formOid=new Element("formOid"); //添加工单编号节点内容 formOid.setText("工单编号"); //将工单编号节点添加到基本信息节点下

c语言单元测试用例全自动生成软件wings介绍

wings是一款用于单元测试测试用例驱动框架自动生成工具,简单来说这款工具主要是全自动生成单元测试驱动代码与测试数据。 下面我们尝试使用wings来完成单元测试框架与测试数据的自动生成。 首先准备好需要测试的C语言工程,本文以大型开源软件Mysql为例。 第一步:打开wings工具,选择被测工程的主要目录。 第二步:点击工程操作中的分析生成,对工程目录下的.c文件进行解析,保存为XML 的格式,生成的文件保存在工程目录下的FunXml与GlobalXml中,分别是函数信息与全局变量的信息,点击驱动文件结构图,即可看到对应文件的函数结构信息。

上图可以查看所有.c文件的驱动函数,以及函数所对应的参数信息与全局变量的信息。 第三步:点击功能操作驱动生成,完成项目的驱动框架自动生成,驱动文件保存在wings_projects下的Driver文件夹下。点击驱动文件,即可看到对应.c文件的驱动生成代码。 点击单个函数,可以高亮定位到函数所在位置,并且双击函数参数,可以定位到每个参数的赋值单元,查看每个参数的具体驱动赋值代码。 第四步:点击值功能操作的值生成按钮,则对应生成测试数据。

界面上显示为单个函数的测试数据,可依据需要修改测试次数,重新生成测试数据文件,也可依据需要修改特定的测试数据。 第五步:将驱动文件加载到所在工程目录,与源文件一起编译,即可运行。 如果想查看对应的函数信息与全局变量信息,则右键对应打开对应的Parameter Struture Description(函数信息结构体)与Global Parameter Struture Description(全局变量结构图)。 Parameter Struture Description(函数信息结构体):显示函数的名称,参数个数,参数类型以及复杂类型的展开形式。 Global Parameter Struture Description(全局变量结构图):显示全局变量的结构信息。 使用过程中注意事项: (1)编译源文件过程中,需要手动注释调源文件中的main函数,wings将自动生成调用驱动函数的主函数。 (2)遇到特殊类型的赋值或者系统变量的驱动构造,可自行添加模板赋值方式,添加之后,再次生成驱动文件即可。 例如:遇到FILEL类型的赋值,可在模板中添加对应的赋值方式。

计算器java课程设计(完整版)

目录 一、课设任务及要求 (1) 二、需求分析 (2) 三、设计思路 (3) 四、详细设计 (4) 五、运行调试与分析讨论 (14) 六、设计体会与小结 (18) 七、参考文献 (19)

一、课设任务及要求 1)课设任务: ⑴、设计的计算器应用程序可以完成加法、减法、乘法、除法以及取余运算(可以进行浮点数和负数的运算); ⑵、有求倒数、退格和清零功能。 2)创新要求: 能进行正切、余弦,以及求平方根、指数(包括对e)、自然对数运算。 3)设计要求 ①设计的计算器应用程序可以完成加法、减法、乘法、除法和取余运算。且有小数点、正负号、求倒数、退格和清零功能。 ②课程设计可选用Eclipse、JBuilder、NetBeans等作为开发平台以提高开发效率,通过资料查阅和学习尽可能熟练掌握其中一种集成开发环境。 ③认真按时完成课程设计报告,课程设计报告内容包括:设计任务与要求、需求分析、设计思路、详细设计、运行调试与分析讨论和设计体会与小结六个部分。

二、需求分析 ⑴、开发的技术及功能 本课程设计是要做一个图形界面的计算器,其界面主要是由swing组件中的控件构成。程序实现了计算器的基本功能有:加、减、乘、除基本算术运算(可以进行浮点和负数运算)和sin、cos、tan等三角函数求值运算,同时能进行指数运算和自然对数运算,还有求倒数、退格和清零功能。 ⑵设计思路 设计这个计算器主要是参考Windows操作系统中自带的计算器,由于编者水平和时间的限制,不能将计算器设计到科学型及其他更复杂的类型,在设计过程中还参考了一些其他的优秀设计。但本计算器除了常用的加减乘除(可以进行浮点和负数运算)这些基本运算外,还有求余、求倒、退格、清零,甚至还能进行一些复杂科学的运算,比如余弦(cos)、正切(tan)、指数运算(pow)、自然对数运算(log)、求平方根(sqrt)以及对e的指数运算(exp),并且还能进行连续运算。总体上说来,本计算器设计简单,代码很少,程序很小,但功能却很强大,这是同类计算器所不具备的。 ⑶设计效果图 设计时先在设计界面中添加按钮等控件,后在按钮的actionPerformed 事件中添加代码完成其功能其中调用了Java类中的Math函数库以及各种字符串操作。设计的界面如下: 图1 计算器运行界面

相关文档