场景
在实际的开发过程中我们可能会遇到,将一个表的字段转换成查询sql,例如:
select name as "姓名",age as "年龄" from acount
或者说根据sql将数据导出到excel中,这时候excel表头的注释不能是字段名称,要应用成相关字段的注释。如果字段少手写也是可以的,麻烦点就在与字段一多就很累。
解决问题
使用工具类MysqlCommentParse就可以帮你解决这个头痛的问题。
public class MysqlCommentParse {
/**
* 注释示例:
* sno int unsigned auto_increment comment '学号',
* name varchar(50) not null comment '姓名',
* create_date date not null comment '创建时间',
* 解析后的sql:
* select SNO as '学号',NAME as '姓名',CREATE_DATE as '创建时间' from account
*/
public static void main(String[] args) {
String fileName = "文件地址\\文件名称.txt";
String table = "表名";
LinkedHashMap<String, String> map = new LinkedHashMap<>();
try {
Scanner sc = new Scanner(new FileReader(fileName));
//分隔符
sc.useDelimiter(",");
//按分隔符读取字符串
while (sc.hasNext()) {
String str = sc.next().toUpperCase();
//判断字段的位置 默认第一个空格出现的位置
int indexColumn = str.indexOf(" ");
//判断注释comment出现的最后位置
int indexComment = str.lastIndexOf("COMMENT");
//获取字段
String column = str.substring(0,indexColumn);
//获取字段注释
String columnComment = str.substring(indexComment + 7, str.length());
map.put(column, columnComment.trim());
}
//拼接成查询sql
StringBuilder sb = new StringBuilder();
sb.append("select ");
for (Map.Entry<String, String> entry : map.entrySet()) {
sb.append(entry.getKey()).append(" as ").append(entry.getValue()).append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append(" from ").append(table);
System.out.println(sb.toString());
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
}
}
示例:
提供一份txt文件,格式如下:
sno int unsigned auto_increment comment '学号',
name varchar(50) not null comment '姓名',
create_date date not null comment '创建时间',
第一步 读取文件内容
工具类中 以 , 为结尾读取第一行数据, 这时候读取的结果:sno int unsigned auto_increment comment '学号',
第二步 java的字符截取
//判断字段的位置 默认第一个空格出现的位置
int indexColumn = str.indexOf(" ");
//判断注释comment出现的最后位置
int indexComment = str.lastIndexOf("COMMENT");
//获取字段
String column = str.substring(0,indexColumn);
//获取字段注释
String columnComment = str.substring(indexComment + 7, str.length());
结果
select SNO as '学号',NAME as '姓名',CREATE_DATE as '创建时间' from account