在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

通过读取excel文件生成sql语句

2017-2-7 13:39| 发布者: zhangjf| 查看: 453| 评论: 0

摘要: package com.dj.dao.utils;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import jav ...
  1. package com.dj.dao.utils;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.FileReader;
  7. import java.io.FileWriter;
  8. import java.io.IOException;
  9. import java.io.InputStream;
  10. import java.io.OutputStreamWriter;
  11. import java.io.Writer;
  12. import java.text.SimpleDateFormat;
  13. import java.util.ArrayList;
  14. import java.util.Date;
  15. import java.util.List;
  16. import javax.persistence.EntityManager;
  17. import javax.persistence.PersistenceContext;
  18. import javax.persistence.Query;
  19. import jxl.Cell;
  20. import jxl.Sheet;
  21. import jxl.Workbook;
  22. import jxl.format.Alignment;
  23. import jxl.format.Border;
  24. import jxl.format.BorderLineStyle;
  25. import jxl.write.Label;
  26. import jxl.write.WritableCellFormat;
  27. import jxl.write.WritableFont;
  28. import jxl.write.WritableSheet;
  29. import jxl.write.WritableWorkbook;
  30. public class ExcelToSql {
  31. public static void main(String[] args) throws Exception {
  32. // ArrayList<String> tableNames = excelToSql();
  33. //exceldel1();
  34. /*ArrayList<String> tableNames = new ArrayList<String>();
  35. tableNames.add("T_UBMP_SUPPLIEREXPERIENCEINFO");
  36. copyFile(tableNames);*/
  37. //getTables();
  38. System.out.println("select name,remarks from sysibm.systables where type='T' and creator = 'UBMPOA' AND NAME LIKE 'T_UBMP\_%\_%' escape '\' order by name asc");
  39. SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");//设置日期格式
  40. System.out.println(df.format(new Date()));
  41. }
  42. @PersistenceContext
  43. private static EntityManager entityManager;
  44. public static void getTables() {
  45. Query query = entityManager
  46. .createNativeQuery("select name,remarks from sysibm.systables where type='T' and creator = 'UBMPOA' AND NAME LIKE 'T_UBMP_%'");
  47. List result = query.getResultList();
  48. System.out.println(result);
  49. System.out.println(((Object[])result.get(0))[0]);
  50. for(int index = 0; index < result.size(); index ++){
  51. String tableName = ((Object[])result.get(index))[0].toString();
  52. String tableNamedesc = ((Object[])result.get(index))[1].toString();
  53. System.out.println(tableName+":"+tableNamedesc);
  54. }
  55. }
  56. public static void excelToSql() throws Exception{
  57. jxl.Workbook readwb = null;
  58. FileOutputStream os = null;
  59. String file = "D:\sanxia\doc\trunk\新oa\数据库设计\已分配\乌商项目管理平台表结构汇总1.xls";
  60. String file2 = "D:\sanxia\doc\trunk\新oa\数据库设计\已分配\乌商项目管理平台表结构汇总2.xls";
  61. InputStream instream = new FileInputStream(file);
  62. readwb = Workbook.getWorkbook(instream);
  63. FileOutputStream os1 = new FileOutputStream(file2);// 创建一个输出流
  64. WritableWorkbook writewb = Workbook.createWorkbook(os1);
  65. WritableSheet sheet1 = writewb.createSheet("汇总", 0);
  66. int rowhz = 0;
  67. // for (int sheetNum = 2; sheetNum < 5; sheetNum++) {
  68. for (int sheetNum = 1; sheetNum < readwb.getNumberOfSheets(); sheetNum++) {
  69. Sheet readsheet = readwb.getSheet(sheetNum);
  70. int rsRows = readsheet.getRows();
  71. int colnum = readsheet.getColumns();
  72. for(int row = 0; row < rsRows; row ++){
  73. if(row == 0){
  74. sheet1.mergeCells(0, rowhz, 5, rowhz);
  75. }
  76. for(int col = 0; col < colnum; col ++){
  77. Cell str = readsheet.getCell(col, row);
  78. // CellFormat st = str.getCellFormat();
  79. WritableFont font1 = new WritableFont(WritableFont.createFont("Microsoft Sans Serif"),9);
  80. WritableCellFormat cellFormat1 = new WritableCellFormat(font1);
  81. cellFormat1.setAlignment(Alignment.LEFT);
  82. cellFormat1.setBackground((jxl.format.Colour.LIGHT_TURQUOISE));
  83. cellFormat1.setBorder(Border.ALL,BorderLineStyle.THIN);
  84. Label label = new Label(col, rowhz, str.getContents().toString(),cellFormat1);
  85. //Label label1 = new Label(col, rowhz, "123");
  86. sheet1.addCell(label);
  87. }
  88. rowhz = rowhz +1;
  89. }
  90. System.out.println(sheetNum);
  91. rowhz = rowhz + 2;
  92. System.out.println(rowhz);
  93. }
  94. writewb.write();
  95. os1.flush();
  96. readwb.close();
  97. try {
  98. if (writewb != null)
  99. writewb.close();
  100. if (os1 != null)
  101. os1.close();
  102. } catch (IOException e) {
  103. e.printStackTrace();
  104. }
  105. /*
  106. * //利用已经创建的Excel工作薄,创建新的可写入的Excel工作薄 jxl.write.WritableWorkbook wwb
  107. * = Workbook.createWorkbook(new File( "F:/红楼人物1.xls"), readwb);
  108. * //读取第一张工作表 jxl.write.WritableSheet ws = wwb.getSheet(0);
  109. * //获得第一个单元格对象 jxl.write.WritableCell wc = ws.getWritableCell(0,
  110. * 0); //判断单元格的类型, 做出相应的转化 if (wc.getType() == CellType.LABEL) {
  111. * Label l = (Label) wc; l.setString("新姓名"); } //写入Excel对象
  112. * wwb.write(); wwb.close();
  113. */
  114. }
  115. public static ArrayList<String> exceldel1(){
  116. ArrayList<String> tableNames = new ArrayList<String>();
  117. jxl.Workbook readwb = null;
  118. try {
  119. System.out.println("开始读取");
  120. // 构建Workbook对象, 只读Workbook对象
  121. // 直接从本地文件创建Workbook
  122. // InputStream instream = new FileInputStream("D:\sanxia\doc\trunk\新oa\数据库设计\已分配\乌商项目管理平台表结构汇总xsy.xls");
  123. InputStream instream = new FileInputStream("D:\sanxia\doc\trunk\新oa\数据库设计\待审查\张维科\数据库最新设计xsy.xls");
  124. readwb = Workbook.getWorkbook(instream);
  125. String path = "D:\sanxia\doc\trunk\新oa\数据库设计\待审查\张维科\20160112.sql";
  126. for (int sheetNum = 0; sheetNum < readwb.getNumberOfSheets(); sheetNum++) {
  127. // Sheet的下标是从0开始
  128. // 获取第一张Sheet表
  129. Sheet readsheet = readwb.getSheet(sheetNum);
  130. // 获取Sheet表中所包含的总列数
  131. int rsColumns = readsheet.getColumns();
  132. // 获取Sheet表中所包含的总行数
  133. int rsRows = readsheet.getRows();
  134. // 获取指定单元格的对象引用
  135. String sql = "";
  136. String tableName = "";
  137. String PK = "";
  138. for (int i = 0; i < rsRows; i++) {
  139. Cell[] str = readsheet.getRow(i);
  140. if (i == 0) {
  141. tableName = str[0].getContents().toString();
  142. int startIndex = tableName.indexOf("(");
  143. if (-1 == startIndex) {
  144. startIndex = tableName.indexOf("(");
  145. }
  146. int endIndex = tableName.indexOf(")");
  147. if (-1 == endIndex) {
  148. endIndex = tableName.indexOf(")");
  149. }
  150. // System.out.println(tableName+":"+startIndex+"|"+endIndex);
  151. tableName = tableName.substring(startIndex + 1,
  152. endIndex);
  153. if (tableName == null || "".equals(tableName.trim())) {
  154. System.out.println("表名未知,请检查");
  155. break;
  156. }
  157. tableName = tableName.toUpperCase();
  158. tableNames.add(tableName);
  159. System.out.println("tableName:" + tableName);
  160. //sql = sql + "drop table " + tableName + ";n";
  161. sql = sql + "nCREATE TABLE " + tableName;
  162. sql = sql + "n(n";
  163. }
  164. if (i == 1) {
  165. continue;
  166. }
  167. if (i >= 2) {
  168. if (i < 6) {
  169. if (str[5].getContents().toString().contains("PK")) {
  170. PK = PK + "," + str[1].getContents().toString();
  171. }
  172. }
  173. String colName = String.format("%-30s", str[1]
  174. .getContents().toString());
  175. String colSize = String.format("%-20s", str[3]
  176. .getContents().toString());
  177. if ("M".equals(str[4].getContents().toString())
  178. || "m".equals(str[4].getContents().toString())
  179. || "y".equals(str[4].getContents().toString())
  180. || "Y".equals(str[4].getContents().toString())) {
  181. sql = sql + "t" + colName + " " + colSize
  182. + " NOT NULL ,n";
  183. } else {
  184. sql = sql + "t" + colName + " " + colSize
  185. + " ,n";
  186. }
  187. }
  188. }
  189. if (PK.length() < 1) {
  190. System.out.println("表主键无主键,请自行添加,注意最后一列去掉逗号");
  191. } else {
  192. sql = sql + "tt PRIMARY KEY (" + PK.substring(1)
  193. + ") n";
  194. }
  195. sql = sql + ");n";
  196. // sql = sql +
  197. // "CREATE INDEX "+tableName+".INDEX1 ON "+tableName+"(KEY1,KEY2); --请自行替换KEY1、KEY2n";
  198. for (int i = 0; i < rsRows; i++) {
  199. Cell[] str = readsheet.getRow(i);
  200. if (i == 0) {
  201. String tableNamePre = str[0].getContents().toString();
  202. int startIndex = tableNamePre.indexOf("(");
  203. if (-1 == startIndex) {
  204. startIndex = tableNamePre.indexOf("(");
  205. }
  206. tableNamePre = tableNamePre.substring(0, startIndex);
  207. ;
  208. if (tableNamePre == null
  209. || "".equals(tableNamePre.trim())) {
  210. System.out.println("表名称未知,请检查");
  211. break;
  212. }
  213. String comment = tableNamePre;
  214. sql = sql + "COMMENT ON TABLE " + tableName + " IS '"
  215. + comment + "';n";
  216. }
  217. if (i == 1) {
  218. continue;
  219. }
  220. if (i >= 2) {
  221. String remark = str[5].getContents().toString();
  222. remark = remark.replace("'", "");
  223. remark = remark.replace(""", "");
  224. remark = remark.replace(",", "");
  225. remark = remark.replace(",", "");
  226. remark = remark.replace("。", "");
  227. remark = remark.replace(".", "");
  228. String comment = "";
  229. if ("".equals(remark.trim())) {
  230. comment = str[2].getContents().toString();
  231. } else {
  232. comment = str[2].getContents().toString() + ": "
  233. + remark;
  234. }
  235. sql = sql + "COMMENT ON COLUMN " + tableName + "."
  236. + str[1].getContents().toString() + " IS '"
  237. + comment + "';n";
  238. }
  239. }
  240. sql = sql.toUpperCase();
  241. String pathbak = "D:\sanxia\doc\trunk\新oa\系统设计\数据库设计\sql\compare\";
  242. File file = new File(path);
  243. //File file = new File(path + tableName + ".sql");
  244. // if(file.exists()){
  245. // file = new File(pathbak + tableName + ".sql");
  246. // System.err.println(tableName+"文件已存在,请在比较文件中查看");
  247. // }
  248. Writer outTxt = new OutputStreamWriter(new FileOutputStream(
  249. file, true), "unicode");
  250. outTxt.write(sql);
  251. outTxt.close();
  252. }
  253. /*
  254. * //利用已经创建的Excel工作薄,创建新的可写入的Excel工作薄 jxl.write.WritableWorkbook wwb
  255. * = Workbook.createWorkbook(new File( "F:/红楼人物1.xls"), readwb);
  256. * //读取第一张工作表 jxl.write.WritableSheet ws = wwb.getSheet(0);
  257. * //获得第一个单元格对象 jxl.write.WritableCell wc = ws.getWritableCell(0,
  258. * 0); //判断单元格的类型, 做出相应的转化 if (wc.getType() == CellType.LABEL) {
  259. * Label l = (Label) wc; l.setString("新姓名"); } //写入Excel对象
  260. * wwb.write(); wwb.close();
  261. */
  262. } catch (Exception e) {
  263. e.printStackTrace();
  264. } finally {
  265. readwb.close();
  266. }
  267. return tableNames;
  268. }
  269. /**
  270. * 复制单个文件
  271. *
  272. * @param oldPath
  273. * String 原文件路径 如:c:/fqf.txt
  274. * @param newPath
  275. * String 复制后路径 如:f:/fqf.txt
  276. * @return boolean
  277. */
  278. public static void copyFile(ArrayList<String> tableNames) {
  279. String path = "F:\wlmq_manage\workspace\ubmpoa\src\com\dj\action\uccb\projectBuild\";
  280. String sourceFile = "BuildreqAction.java";
  281. File modActionFile = new File(path+sourceFile);
  282. if(!modActionFile.exists()){
  283. System.out.print("原Action文件不存在");
  284. return;
  285. }
  286. for(String tableName:tableNames){
  287. try {
  288. String beanName = tableName.substring(7,8).toUpperCase()+tableName.substring(8).toLowerCase();
  289. String newFileName = beanName+"Action.java";
  290. //InputStream inStream = new FileInputStream(path+sourceFile); // 读入原文件
  291. //FileOutputStream fs = new FileOutputStream(path+newFileName);
  292. FileReader fr=new FileReader(path+sourceFile);
  293. BufferedReader br=new BufferedReader(fr);
  294. FileWriter write = new FileWriter(path+newFileName) ;
  295. while(br.readLine()!=null){
  296. String s=br.readLine();
  297. System.out.println(s);
  298. write.write(s+"n");
  299. /* if(s == null ){
  300. continue;
  301. }else if("".equals(s.trim())){
  302. write.write(s+"n");
  303. }else{
  304. write.write(s.replace("Buildreq", beanName)+"n");
  305. }*/
  306. }
  307. br.close();
  308. fr.close();
  309. write.close();
  310. } catch (Exception e) {
  311. System.out.println("复制单个文件操作出错");
  312. e.printStackTrace();
  313. }
  314. }
  315. }
  316. }
复制代码

来自: http://my.oschina.net/u/2540218/blog/602464

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-9 07:51

Copyright 2015-2025 djqfx

返回顶部