mac下使用 pages 文稿编写的数据库设计文档,虽然 mac 下也有 word,但还是习惯用 pages,感觉它要比 word 开启的速度快一些,使用起来也挺方便的。那使用 pages 设计了数据库表结构之后,又不想一个一个字段的去创建数据表结构,所以想到了 java如何读取解析mac下的pages文稿,实现数据库正向工程;这里的正向工程就是生成 SQL 建表语句。
Pages 文稿是一款功能强大的文字处理软件,让你能够制作精美的文档。你甚至能使用 Apple Pencil 在你的 iPad 上添加手写备注和手绘插图。利用实时协作功能,你的团队成员可以共同协作,不论他们使用 Mac、iPad、iPhone, 还是使用 PC。原文:https://blog.csdn.net/testcs_dn/article/details/80768968
实现步骤java 是不能直接读取解析 pages 文稿的,有的文章提到在 Windows 下查看 pages 文稿的方法是把扩展名改为 tar ,然后把它解压出来,会提到PDF文件,直接打开就能看到文件中的内容啦,但是这个我试过,看到的内容很不清楚,而且不能编辑。
上面提到 mac 下也有 word,所以先导致为 word,选择 docx 格式
然后再使用 word 的另存为网页的功能(为什么这样做?其实 java 解析 word 也是比较麻烦的,个人感觉)
这样我们就得到了 htm 格式的文件,如果你写过爬虫,相信接下来就明白怎么做了吧!
我选择使用 Jsoup 框架。
上代码:原文:https://blog.csdn.net/testcs_dn/article/details/80768968
package com.weixiao; import java.io.File; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; /** * 读取网页中的表格,生成建表语句 * BuildCreateSQL * @author lipw * @date 2018年6月22日上午9:55:34 */ public class BuildCreateSQL { public static void doCreateSQL(String fileName){ File file = new File(fileName); Document doc = null; if (file.exists()) { try { // 解析网页,默认为 gbk 编码 doc = Jsoup.parse(file, "gbk"); // 选择网页中的表格元素,这里使用与 Jquery 兼容的 Selector 格式 Elements tableElements = doc.select("body > div > table"); int tableCount = 0; for (Element eleTable : tableElements){ // 我的文档中第一个表是修订历史表,所以过滤掉 if (tableCount == 0){ tableCount+=1; continue; } // 不考虑性能,所以直接使用 String String sql = ""; String tableComment = ""; Elements trElements = eleTable.select("tr"); for (Element eleTr : trElements){ // 根据上图表结构看到的,第一行是表名,第二行是备注,只有两列 Elements tdElements = eleTr.select("td"); if (tdElements.size() == 2){ if (sql.length() == 0){ sql = "DROP TABLE IF EXISTS `" + tdElements.get(1).text().toLowerCase() + "`;\r\n"; sql += "CREATE TABLE `" + tdElements.get(1).text().toLowerCase() + "` (\r\n"; }else{ tableComment = tdElements.get(1).text(); } } // 定义字段的行有8列 if (tdElements.size() == 8){ // 判断是否为空行或表头行 if (!tdElements.get(1).text().isEmpty() && !"字段".equals(tdElements.get(1).text())){ sql += " `" + tdElements.get(1).text().toLowerCase() + "` "; // 处理数据类型 switch (tdElements.get(2).text().toLowerCase()){ case "bigint": sql += "bigint(20)"; break; case "int": sql += "int(11)"; break; case "decimal": sql += "decimal" + tdElements.get(3).text(); break; case "varchar": sql += "varchar(" + tdElements.get(3).text() + ")"; break; case "bit": sql += "bit"; break; case "tinyint": sql += "tinyint"; break; case "datetime": sql += "datetime"; break; case "date": sql += "date"; break; case "time": sql += "time"; break; case "text": sql += "text"; break; case "blob": sql += "blob"; break; default: break; } // 是否允许为空 if ("N".equals(tdElements.get(5).text()) || "不为空".equals(tdElements.get(1).text())){ sql += " NOT NULL"; } // 是否为自增字段 if ("自增".equals(tdElements.get(7).text())){ sql += " AUTO_INCREMENT"; } // 处理注释 sql += " COMMENT '" + tdElements.get(4).text(); if (!tdElements.get(7).text().isEmpty()){ sql += ";" + tdElements.get(7).text(); } sql += "',\r\n"; } } } // 处理主键,设计规则中默认 id 为主键 sql += " PRIMARY KEY (`id`)\r\n"; // 处理表的引擎、编码、注释等信息 sql += ") ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='" + tableComment + "';"; System.out.println(""); System.out.println(""); System.out.println(sql); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } } public static void main(String[] args) { // TODO Auto-generated method stub doCreateSQL("/Users/aven/gswd/网站/网站数据库设计_v1.0.htm"); } }
生成效果:原文:https://blog.csdn.net/testcs_dn/article/details/80768968
DROP TABLE IF EXISTS `log`; CREATE TABLE `log` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号;自增', `user_type` int(11) COMMENT '用户类型;0=未知', `user_id` bigint(20) COMMENT '用户编号', `operation` int(11) COMMENT '操作类型', `content` varchar(2000) COMMENT '日志内容', `create_time` datetime COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='日志表';小结 原文:https://blog.csdn.net/testcs_dn/article/details/80768968
其实应该使用 PowerDesigner、Rational Rose、Visio 等建模工具来设计数据库的,然后是基于它们的正向工程。在 windows 下习惯使用 Visio,但 Visio 好像只有一个 2005 企业版有正向工程的功能,我也没有找到亲测可用的版本。所以一般是设计文档,然后建表,再反向工程,生成关系图。
这里使用 pages,word 自带的格式转换功能,实现了自己想要的结果;
有时候想到达到目的,就是需要学会拐弯抹角,正所谓好事多磨。