主要功能,通过读取配置文件,来从数据库里提取字段和值,写入到regedit,xml,text,excel,pdf中。程序是dos界面的,由于仓促没有写windows界面,如果各位有兴趣,可以改成windows界面的。由于有配置文件的缘故,所以所有的操作不需要改写代码,只需在配置文件中改写就可以了。
主程序:
import java.io.*;
import java.util.prefs.*;
import java.sql.*;
import jxl.*;
import jxl.write.*;
import java.util.*;
import java.util.Properties;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;
import java.awt.Color;
/*
*author:kenshin
*effect:from database reading values ,output regedit or text or xml or excel or pdf.
*create time:2004/6/8
*modify time:2004/6/9
*copyright:2004
*/
public class PrefsDemo {
static Preferences prefsdemo;
static String[] field=new String[1000];
static String [] values=new String[1000];
static int account=0,maxCount=0;
static String path=null,driver=null,user=null,password=null,odbcname=null;
static String txtname=null,xmlname=null,excelname=null,pdfname=null,sql=null;
static String author=null,createtime=null,effect=null,version=null;
public static void main(String args[]){
String rnumber=null;
int number=0;
BufferedReader buf;
//initialize config file
Initconfig();
//connection database
DBconnection();
//goto enterLoop
enterLoop:
while(number<=6){
try{
//choice output formatting
System.out.println("please choice input formatting!!!");
System.out.print("1:input regedit 2:input xml 3:input text");
System.out.println(" 4:excel 5:pdf 6:all 7:exit");
System.out.print("input a number,not a character:");
//keyword input
buf=new BufferedReader(new InputStreamReader(System.in));
rnumber=buf.readLine();
//change "number" type
number=Integer.parseInt(rnumber);
if(number>7){
System.out.println("please input an number of between 1 to 7 ");
number=0;
continue enterLoop;
}
switch(number){
case 1:
//output regedit
RegeditOutput(); break;
case 2:
//output xml
XmlOutput(); break;
case 3:
//output text
TextOutput(); break;
case 4:
//output excel
ExcelOutput(); break;
case 5:
//output excel
PdfOutput(); break;
case 6:
//output all
RegeditOutput();
XmlOutput();
TextOutput();
ExcelOutput();
PdfOutput();
break;
}
}
catch(IOException e){System.err.println(e);}
catch(NumberFormatException e){
System.out.println("please input an number type!");
number=0;
continue enterLoop;
}
}
}
/*************************************************
*effect:initialize config file
*input value :null
*return value:null
*create time:2004/6/11
*edit time:null
*************************************************/
static void Initconfig(){
Properties prop = new Properties();
String propFileName = "config.properties";
FileInputStream fis;
try{
fis = new FileInputStream(new File(propFileName));
prop.load(fis);
//get config file's values
path = prop.getProperty("path");
odbcname = prop.getProperty("odbc");
driver = prop.getProperty("driver");
user = prop.getProperty("user");
password = prop.getProperty("password");
txtname = prop.getProperty("txtname");
xmlname = prop.getProperty("xmlname");
excelname = prop.getProperty("excelname");
pdfname = prop.getProperty("pdfname");
author = prop.getProperty("author");
createtime = prop.getProperty("createtime");
effect = prop.getProperty("effect");
version = prop.getProperty("version");
sql = prop.getProperty("sql");
//close inputstream
fis.close();
System.out.println("*************************");
System.out.println("*config read successfull*");
System.out.println("*************************");
}
catch(IOException e){System.err.println(e);}
}
/*************************************************
*effect:connection database
*input value :null
*return value:null
*create time:2004/6/9
*edit time:null
*************************************************/
static void DBconnection(){
//jdbc-odbc variable initialize
Connection con=null;
Statement stm=null;
ResultSet rs=null;
//jdbc-odbc bridge
try{
Class.forName(driver);
con=DriverManager.getConnection(odbcname,user,password);
stm=con.createStatement();
rs=stm.executeQuery(sql);
//get columncount values
account=rs.getMetaData().getColumnCount();
System.out.println("*************************");
System.out.println("*DB connect successfull *");
System.out.println("*************************");
//get database ColumnName
for(int i=1;i<=account;i++){
field[i]=rs.getMetaData().getColumnName(i);
}
while(rs.next()){
for(int j=1;j<=account;j++){
++maxCount;
values[maxCount]=rs.getString(field[j]);
System.out.println(values[maxCount]);
}
}
//close database
rs.close();
stm.close();
con.close();
}
catch(Exception e){
System.err.println(e);
}
}
/*************************************************
*effect:output regedit
*input value :null
*return value:null
*create time:2004/6/9
*edit time:null
*************************************************/
static void RegeditOutput(){
prefsdemo = Preferences.userRoot().node("/com/sunway/spc");
//wirte regedit
prefsdemo.put("author",author);
prefsdemo.put("createtime",createtime);
prefsdemo.put("effect",effect);
prefsdemo.put("version",version);
System.out.println("regedit create successfull!");
}
/*************************************************
*effect:output xml
*input value :null
*return value:null
*create time:2004/6/9
*edit time:null
*************************************************/
static void XmlOutput(){
//write xml
try{
File myfile = new File(path+xmlname);
if(!(myfile.exists())){
myfile.createNewFile();
}
// write file
FileOutputStream fos = new FileOutputStream(path+xmlname);
prefsdemo.exportNode(fos);
}
catch (Exception e){
System.err.println("Cannot export nodes: " + e);
}
System.out.println("xml create successfull ");
}
/*************************************************
*effect:output text
*input value :null
*return value:null
*create time:2004/6/9
*edit time:null
*************************************************/
static void TextOutput(){
//field length
int length1[]=new int[1000];
//values length
int length2[]=new int[1000];
String space=" ";
String str1="-------------------------";
String str2[]=new String[1000];
String str3[]=new String[1000];
//check "/n"
int q=1;
//initialize str1[] str2[]
for(int i=1;i<=maxCount;i++){
str2[i]="";
str3[i]="";
}
try{
//create file
File myfile = new File(path+txtname);
if(!(myfile.exists())){
myfile.createNewFile();
}
// write file
FileWriter fw=new FileWriter(path+txtname);
for(int i=1;i<=maxCount;i++){
if(i<=account){
length1[i]=25-field[i].length();
//account length2 length
for(int j=1;j<=length1[i];j++){
str2[i]=str2[i]+" ";
}
}
length2[i]=25-values[i].length();
//account length3 length
for(int j=1;j<=length2[i];j++){
str3[i]=str3[i]+" ";
}
}
//write field
for(int i=1;i<=account;i++){
fw.write(field[i]);
fw.write(str2[i]+space);
}
//write "-"
fw.write("\n");
for(int i=1;i<=account;i++){
fw.write(str1+space);
}
//write values
fw.write("\n");
for(int i=1;i<=maxCount;i++){
fw.write(values[i]+str3[i]+space);
if(i==account*q){
fw.write("\n");
q*=2;
}
}
fw.close();
}
catch(FileNotFoundException e){System.err.println(e);}
catch(IOException e){e.printStackTrace();}
System.out.println("text create successfull ");
}
/*************************************************
*effect:output excel
*input value :null
*return value:null
*create time:2004/6/9
*edit time:2004/6/10
*************************************************/
static void ExcelOutput(){
//label1:field label2:values
Label label1=null,label2=null;
int result=0,rows=0;
try{
//create an new file
File myfile = new File(path+excelname);
if(!(myfile.exists())){
myfile.createNewFile();
System.out.println("an new excel create successful");
}
//create an new excel
WritableWorkbook workbook = Workbook.createWorkbook(myfile);
//use first excel's sheet
WritableSheet sheet = workbook.createSheet("record", 0);
// add table title and values
for(int i=1;i<=account;i++){
//add table title
label1 = new Label(i-1, 0, field[i]);
sheet.addCell(label1);
}
//account rows values
result=maxCount/account;
for(int i=1;i<=result;i++){
for(int m=1;m<=account;m++){
rows++;
label2=new Label(m-1,i,values[rows]);
sheet.addCell(label2);
}
}
workbook.write();
workbook.close();
}
catch(Exception e){System.err.println(e);}
System.out.println("excel create successfull ");
}
/*************************************************
*effect:output pdf file
*input value :null
*return value:null
*create time:2004/6/11
*edit time:null
*************************************************/
static void PdfOutput(){
Document document;
Rectangle pageRect;
try{
document=new Document(PageSize.A4, 50, 50, 100, 50);
pageRect=document.getPageSize();
PdfWriter.getInstance(document, new FileOutputStream(path+pdfname));
HeaderFooter header = new HeaderFooter(new Phrase("student information"), false);
header.setBorder(2);
header.setAlignment(Element.ALIGN_RIGHT);
document.setHeader(header);
//add page
HeaderFooter footer = new HeaderFooter(new Phrase("the"),new Phrase("page"));
footer.setAlignment(Element.ALIGN_CENTER);
footer.setBorder(1);
document.setFooter(footer);
//open document
document.open();
//create table
Table table = new Table(account);
table.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);
table.setBorder(Rectangle.NO_BORDER);
int hws[] = new int[account];
for(int i=1;i<=account;i++){
hws[i-1]=20;
}
table.setWidths(hws);
table.setWidth(100);
//add field
for(int i=1;i<=account;i++){
table.addCell(new Phrase(field[i]));
}
//add values
for(int i=1;i<=maxCount;i++){
table.addCell(new Phrase(values[i]));
}
//add table to pdf file
document.add(table);
//close pdf file
document.close();
}
catch(Exception e){System.out.println(e);}
System.out.println("pdf create successfull ");
}
}
*******************************************************************
配置文件
[author information]
author=kenshin
createtime=2004/6/08
effect=from database reading values ,output regedit or text or xml or excel or pdf
version=0.1
[date]
#date
date=2004
#saving path
path=f:\\kenshin\[database odbc information]
#table:Info
#field:<Name>,<Copyright>,<Author>
#odbc name
odbc=jdbc:odbc:xml
#driver
driver=sun.jdbc.odbc.JdbcOdbcDriver
#user
user=""
#password
password=""
#database select statement
sql=select * from Info
[argument]
#text file name
txtname=Info.txt
#xml file name
xmlname=Info.xml
#excel file name
excelname=Info.xls
#pdfname file name
pdfname=info.pdf