java数据导出为excel表格_将数据库表中数据导出到文本文件

java数据导出为excel表格_将数据库表中数据导出到文本文件公司开发新系统,需要创建几百个数据库表,建表的规则已经写好放到Excel中,如果手动创建的话需要占用较长的时间去做,而且字段类型的规则又被放到了另一张表,如果手动去一个一个去匹配就很麻烦,所以我先把两张表都导入数据库中,建表的数据如下:其中字段类型被存放到了另一个表中,根据字段的code从另一表去取字段类型:然后通过java程序的方式,从数据库中取出数据自动生成建表语句,代码如下:(主要是提供思路,对于不同的建表规则不能完全适用,SQL语句为oracle数据库SQL语句)importjava.i

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

公司开发新系统,需要创建几百个数据库表,建表的规则已经写好放到Excel中,如果手动创建的话需要占用较长的时间去做,而且字段类型的规则又被放到了另一张表,如果手动去一个一个去匹配就很麻烦,所以我先把两张表都导入数据库中,建表的数据如下:
在这里插入图片描述
其中字段类型被存放到了另一个表中,根据字段的code从另一表去取字段类型:
在这里插入图片描述

然后通过java程序的方式,从数据库中取出数据自动生成建表语句,生成的语句效果是这样的:
在这里插入图片描述

代码如下:(主要是提供思路,对于不同的建表规则不能完全适用,SQL语句为oracle数据库SQL语句)

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TableBuild { 

public static void main(String[] args) throws Exception { 

TableBuild tableBuild = new TableBuild();
tableBuild.ready();
}
void ready() throws Exception { 
//数据准备,先从数据库中取出建表的表名字段等信息,全部添加到datalist中
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/createtable?characterEncoding=UTF-8&serverTimezone=UTC","root", "root");
Statement statement = con.createStatement();
String sql1 = "select * from data";
ResultSet rs = statement.executeQuery(sql1);
List<Data> datalist = new ArrayList<Data>();
while(rs.next()) { 

Data d = new Data();
d.setTablename(rs.getString("tablename"));//表名
d.setTablecname(rs.getString("tablecname"));//表注释
d.setFiledname(rs.getString("filedname"));//字段名
d.setFiledcname(rs.getString("filedcname"));//字段注释
d.setIskey(rs.getString("iskey"));//是否为主键
d.setIsnull(rs.getString("isnull"));//是否可为空
d.setCode(rs.getString("code"));//用来匹配字段格式的
datalist.add(d);
}
build(con,datalist);
}
void build(Connection con,List<Data> datalist) throws SQLException, IOException { 
//生成建表语句文本
StringBuffer CT = new StringBuffer();//用来生成建表语句
StringBuffer AddTip = new StringBuffer();//用来生成添加注释语句
StringBuffer PK = new StringBuffer();//用来生成联合主键语句
StringBuffer createtablesql = new StringBuffer();//最终组合成的完整建表语句
List<String> PKlist = new ArrayList<String>();//用来暂时存放主键字段名的list
int i;
for(i=0;i<=(datalist.size()-1);i++){ 

if(datalist.get(i).getTablename().length()==0) continue;//如果表名为空的数据项,则跳过
if(datalist.get(i).getFiledname().length()==0){ 
//一个新表开始,重新创建一个表,因为数据库存储的数据,每一个表结束会另起一行,数据中只包含表名,没有数据名,
System.out.println(datalist.get(i).getTablename()+"表创建");//控制台打印建表提示
CT.append("create table " + datalist.get(i).getTablename() + "(\r\n");//添加建表语句
AddTip.append("comment on table "+datalist.get(i).getTablename()+" is '"+datalist.get(i).getTablecname()+"';\r\n");//添加表注释
continue;
}else{ 
//除去创建一个新表,剩下的为字段的创建
System.out.println("\t"+datalist.get(i).getFiledname()+"字段创建");//控制台打印字段提示
CT.append("\t"+datalist.get(i).getFiledname());//字段名
//以下为字段类型的取值,针对其他不同的数据规则以下代码一般不适用,由于本次任务字段类型被放到了另一张表中,所以需要使用data表中的code去匹配对应的type表中的type类型,以此来确定字段类型
String code = datalist.get(i).getCode();//
String sql2 = "select type from type where code = '"+code+"'";
Statement statement = con.createStatement();
ResultSet rs = statement.executeQuery(sql2);
String type = null;
while (rs.next()){ 

type = rs.getString("type");
}
if(type.equals("YYYY-MM-DD")||type.equals("YYYY-MM-DD HH:MM:SS")){ 
//日期类型
CT.append(" date");
}else if(type.indexOf("n(")!=-1){ 
//形如18n(2)这种type为number类型,写成number(18,2)
String t1 = "";
String t2 = "";
List<String> t = Arrays.asList(type.split(""));
for(int j = 0;j<t.size();j++){ 

if(t.get(j).charAt(0)>=48 && t.get(j).charAt(0)<=57){ 

t1 += t.get(j);
}
else break;
}
for(int j=0;j<t.size();j++){ 

if(t.get(j).charAt(0)==40){ 

for(int k=j+1;k<t.size();k++){ 

if(type.charAt(k) >= 48 && type.charAt(k) <= 57){ 

t2 += t.get(k);
}
}
}
}
CT.append(" number("+t1+","+t2+")");
}else if(type.indexOf("n")!=-1) { 
//剩下为varchar2类型
String t = "";
for (int j = 0; j < type.length(); j++) { 

if (type.charAt(j) >= 48 && type.charAt(j) <= 57) { 

t += type.charAt(j);
}
}
CT.append(" varchar2(" + t + ")");
}else{ 
}
//字段类型结束
if(datalist.get(i).getIskey().equals("Y")){ 
//字段是否是联合主键
PKlist.add(datalist.get(i).getFiledname());//是则把字段名加入到联合主键集合中
}
if(datalist.get(i).getIsnull().equals("N")){ 
//字段是否可为空
CT.append(" not null");
}
CT.append(",");
//把联合主键拼接到建表语句的末尾
if(i==(datalist.size()-1)||!datalist.get(i).getTablename().equals(datalist.get(i+1).getTablename())){ 
//当下一条数据开始为新的表时
if(PKlist.size()>0){ 

//添加联合主键
PK.append("\tCONSTRAINT PK_" + datalist.get(i).getTablename() + " PRIMARY KEY (");
for(String str : PKlist){ 
//把存有主键的list用逗号分隔开转化成String类型
PK.append(str).append(",");
}
PK = PK.deleteCharAt(PK.length()-1);//去掉拼接完成后最后一个逗号
PKlist.clear();//清空PKlist
PK.append(")");
CT.append("\r\n");
CT.append(PK);//把生成的主键语句拼接到建表语句中
PK.delete(0,PK.length());//拼接完后清空创建主键语句
CT.append("\r\n);");
}
}
CT.append("\r\n");
//添加字段注释
AddTip.append("comment on column "+datalist.get(i).getTablename()+'.'+datalist.get(i).getFiledname()+" is '"+datalist.get(i).getFiledcname()+"';\r\n");
//在建表语句结束之后拼接上注释语句,一起放到汇总的sql语句当中
if(i==(datalist.size()-1)||!datalist.get(i).getTablename().equals(datalist.get(i+1).getTablename())){ 
//当下一条数据开始为新的表时
createtablesql.append(CT);
createtablesql.append(AddTip);
CT.delete(0,CT.length());
AddTip.delete(0,AddTip.length());
}
}
}
//输出到文本文件
File f = new File("1.txt");
if(!f.exists()){ 

f.createNewFile();
}
BufferedWriter output = new BufferedWriter(new FileWriter(f));
output.write(createtablesql.toString());
output.close();
}
}

Data类代码:

public class Data { 

private String tablename;
private String tablecname;
private String filedname;
private String filedcname;
private String iskey;
private String isnull;
private String code;
public String getTablename() { 

return tablename;
}
public void setTablename(String tablename) { 

this.tablename = tablename;
}
public String getTablecname() { 

return tablecname;
}
public void setTablecname(String tablecname) { 

this.tablecname = tablecname;
}
public String getFiledname() { 

return filedname;
}
public void setFiledname(String filedname) { 

this.filedname = filedname;
}
public String getFiledcname() { 

return filedcname;
}
public void setFiledcname(String filedcname) { 

this.filedcname = filedcname;
}
public String getIskey() { 

return iskey;
}
public void setIskey(String iskey) { 

this.iskey = iskey;
}
public String getIsnull() { 

return isnull;
}
public void setIsnull(String isnull) { 

this.isnull = isnull;
}
public String getCode() { 

return code;
}
public void setCode(String code) { 

this.code = code;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/196066.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 少儿编程app排名_终于明白少儿编程软件哪个好「建议收藏」

    小孩子学习语言的能力很强。虽然成年人大脑的效率可能更高,但人越年轻,大脑越具有可塑性。今天小编主要给大家分享少儿编程软件哪个好,希望对你们有帮助!1.费雪思考&学习code-a-pillar(付费,基于iOS/Android)费雪思考&学习code-a-pillar这个应用程序有一个独特的优势:它包含一个应用程序和一个实物的玩具。虽然让孩子们通过实践学习技术和编程是一个好主…

  • arp病毒查杀_arp病毒攻击有哪些典型现象

    arp病毒查杀_arp病毒攻击有哪些典型现象XX公司网络卡断问题1.问题现象2017年XX公司机关网络出现几次异常情况,并寻求内外部专家对异常情况进行诊断分析,均未找到原因,具体情况如下:1.XX分公司机关网络IP地址为10.0.0.1

  • 淘宝装修html代码大全_上古卷轴装修材料代码

    淘宝装修html代码大全_上古卷轴装修材料代码http://blog.sina.com.cn/s/blog_506f1f940100hv9d.html淘宝网店装修HTML代码大全,包括淘宝装修代码,插入图片代码,公告滚动代码,不不一定要懂网站知识,不一定要懂HTML语言,看完这个就可以装修网店的,你不一定要全部看完,可以当成是一个字典查找就好了。一、插入图片代码:注:先把图片上传到网络相册网络地址,把它拷贝下来,

    2022年10月26日
  • 【转载】教你使用 Reflexil 反编译.NET

    【转载】教你使用 Reflexil 反编译.NET

    2021年11月21日
  • linux常用命令 创建文件_linux 删除文件夹命令

    linux常用命令 创建文件_linux 删除文件夹命令1、vivi1.txt会直接创建并打开一个文件1.txt2、touchtouch的作用是更改一个文件或目录的时间。touch2.txt如果2.txt不存在,则创建空文件2.txt3、echo echo“abcd”>3.txt可以直接创建文件3.txt并将abcd写入。4、less、more、cat 三者都是将文件内容输出到标准输出,其中less和mo

    2022年10月27日
  • 成为黑客需要学习什么技能?

    成为黑客需要学习什么技能?1.学习如何编程这当然是最基本的黑客技能。如果你还不会任何编程语言,我建议你从Python开始。它设计清晰,文档齐全,合适初学者入门。它是一门很好的入门语言,并且不仅仅只是个玩具;它非常强大、灵活,也适合做大型项目。我有一篇Python评价详细说明这点。好的教程可以在Python网站得到。Java也是好的入门语言。它比Python难得多,但是生成的代码速度也快得…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号