mac下使用 pages 文稿编写的数据库设计文档,虽然 mac 下也有 word,但还是习惯用 pages,感觉它要比 word 开启的速度快一些,使用起来也挺方便的。那使用 pages 设计了数据库表结构之后,又不想一个一个字段的去创建数据表结构,所以想到了 java如何读取解析mac下的pages文稿,实现数据库正向工程;这里的正向工程就是生成 SQL 建表语句。

Pages 文稿

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;}// 不考虑性能,所以直接使用 StringString 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 blocke.printStackTrace();} catch (Throwable e) {e.printStackTrace();}}}public static void main(String[] args) {// TODO Auto-generated method stubdoCreateSQL("/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 自带的格式转换功能,实现了自己想要的结果;

有时候想到达到目的,就是需要学会拐弯抹角,正所谓好事多磨。

java 如何读取解析 mac 下的 pages 文稿,实现数据库正向工程相关推荐

  1. 如何在Mac上的Pages文稿中升高和降低字符和文本?

    如何在Mac上的Pages文稿中升高和降低字符和文本呢?以下两种方法可使文本相对于其相邻文本更高或更低: 1.将字符设为上标或下标:此操作会将字符升高或降低并使它们变小,这在添加诸如版权或商标符号时很 ...

  2. 如何在Mac上的Pages 文稿中为对象添加说明或标题?

    我们在使用Pages 文稿时,您可以为大多数对象添加标题或描述性说明,包括绘图.方程.图像.图像画廊.影片.形状(不包括线条).表格.文本框和图表.如果文稿中有成组的对象,您还可以添加可应用到整个组的 ...

  3. 在Mac上的Pages文稿中添加水印和背景对象教程

    如何在Mac上的Pages文稿中添加水印和背景对象呢?您可以添加文本.水印.标志或其他图像,这些将显示在文稿每一页的背景中的相同位置.这些重复的元素称为节布局对象.对象越透明,则淡入文稿内容后方背景的 ...

  4. 如何在Mac上调整pages文稿中表格的边框粗细?

    在使用pages文稿的过程中,常常会需要插入表格,插入的表格也是可以调整边框属性的,那我们该如何调整呢?今天小编给大家带来了详细的图文教程,需要的朋友快了看看吧! 方法步骤如下 1.新建Pages文稿 ...

  5. Java循环读取文件夹下文件

    import java.io.FileNotFoundException; import java.io.IOException; import java.io.File; public class ...

  6. Java中读取某个目录下的所有文件和文件夹

    import java.io.File; public class Test1 {public static void main(String[] args) {String path="d ...

  7. java怎么读取文件夹下的_java怎么读取读取文件夹下的所有文件夹和文件?

    下是实现的代码:package com.borland.samples.welcome; import java.io.FileNotFoundException; import java.io.IO ...

  8. java中读取某路径下的文本内容

    path也就是文本存储的路径和文本名称,这个只是个人需要,一般的话,只需要在File file = new File(path);中把path替换成自己的路径就可以了,比如File file = ne ...

  9. mac下安装与配置mysql数据库,Mac下MySQL的安装与配置

    之前一直用的是云服务器,在服务器上装了一个MySQL,但是今天发现到期了,而且续费时发现之前的大学生优惠不能用了,可是明明到6月份,大学生才毕业啊,shit!!!所以没办法只能在自己电脑上装一个MyS ...

  10. Mac下终端登录mysql创建数据库修改字集

    1,启动mysql服务,登录mysql mysql.server start   mysql -u root -p 2, (1)在客户端输入help或者\h,查看MySQL帮助菜单,仔细阅读帮助菜单的 ...

最新文章

  1. 十年最强出行变革竟然不是高铁?我们问了2千多人,得到高清有码的答案
  2. hdu3001(三进制状压)
  3. AngularJs 相应回车事件
  4. 关于SimpleDateFormat线程不安全的源码分析
  5. pytorch 实现MLP(多层感知机)
  6. foobar插件_如何为 caddy 添写自定义插件
  7. 结构方程模型-调节(干扰)效应检验(一)
  8. arm-linux-gcc: No such file or directory
  9. Haproxy+Keepalived+Nginx
  10. 面试遇到“一问三不知”的,真替他老东家捏把汗
  11. Cakephp 创建无模型的Controller
  12. Java 异常类层次结构
  13. 揭秘全球第二大基金公司:先锋基金70人投资团队掌管2万亿美元股票资产
  14. 网络编程知识点复习(第一次)
  15. 互联网赚钱指南!我是如何零成本空手套白狼?
  16. 畅游或将私有化退市股价涨近50%,搜狐“吃饱”后能重回巅峰吗?
  17. 深度技术官网linux,深度系统
  18. Scala之特质特质Trait
  19. MATLAB数字水印设计
  20. 中电药明招募资深Python开发工程师

热门文章

  1. oracle按照成绩排序,oracle 经典分数排名
  2. Chrome断点调试
  3. Pinterest Copy to China——meterial collect
  4. js-通过audioContext实现3D音效
  5. 音乐在计算机中的应用,计算机音乐技术在音乐教育中的应用
  6. linux上系统烧录工具,烧录操作系统安装光盘镜像到 U 盘的方法
  7. [UE4]风格化渲染
  8. 牛客刷题记录之语法入门选择结构篇
  9. Python获取本机ip地址的两种有效方法
  10. 使用brew services管理服务