package com.cn.wjq.util;
import java.io.FileOutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.cn.wjq.model.BeanInfo;
import com.cn.wjq.model.ClassType;
import com.cn.wjq.model.ColumnInfo;
public class Generator {
private final static Logger LOGGER = LoggerFactory.getLogger(DatabaseUtil.class);
private static final String SQL = "SELECT * FROM ";
public static final String packagePath = "com.cn.wjq.beam"; // 生成文件路径
public static final String nextLine = "\r\n";
public static final String tab = "\t";
public static final String towtab = "\t\t";
public static final String ent = "\r\n\t";
public static final String pub = "public ";
public static final String pri = "private ";
public static final String imp = "import ";
public static final String filePath = System.getProperty("user.dir");
public static final String dirPath = filePath + "\\src\\";
public static Pattern linePattern = Pattern.compile("_(\\w)");
public static Pattern linePattern2 = Pattern.compile("^[a-z]");
public static int createNum = 0;
// 获取数据库下的表字段信息
public static BeanInfo getColumnInfos(String tableName) throws SQLException {
BeanInfo beanInfo = new BeanInfo();
// 存入表名
beanInfo.setTableName(tableName);
// 存入表对应的类名
String tableN = formChangeToLower(tableName);
StringBuilder className = upCaseFirstWord(tableN);
beanInfo.setClassName(className.toString());
// 获取列的信息
List<ColumnInfo> columnInfos = new ArrayList<>();
// 获取列名
List<String> columnNames = new ArrayList<>();
// 获取列的类型种类
List<String> columnTypes = new ArrayList<>();
// 连接数据库
Connection connection = DBConnectUtil.getConnection();
PreparedStatement pStatement = null;
String tableSql = SQL + tableName;
try {
pStatement = connection.prepareStatement(tableSql);
// 结果集元数据
ResultSetMetaData resultSetMetaData = pStatement.getMetaData();
// 得到表的列数
int columnCount = resultSetMetaData.getColumnCount();
for (int i = 0; i < columnCount; i++) {
ColumnInfo columnInfo = new ColumnInfo();
// 获取列名
String columnName = resultSetMetaData.getColumnName(i + 1);
// 获取列的类型
String columnType = resultSetMetaData.getColumnTypeName(i + 1);
columnInfo.setColumnName(columnName);
columnInfo.setColumnType(columnType);
columnNames.add(columnName);
columnInfos.add(columnInfo);
// 获取列的类型种类
String columnTypeString = columnType.toString();
if (!columnTypes.contains(columnTypeString)) {
columnTypes.add(columnType);
}
}
} catch (SQLException e) {
LOGGER.error("getColumnNames failure", e);
} finally {
DBConnectUtil.release(pStatement, connection);
}
beanInfo.setColumnNames(columnNames);
beanInfo.setColumnInfos(columnInfos);
beanInfo.setColumnTypes(columnTypes);
return beanInfo;
}
// 生成javaBean
public static void generateInJava(BeanInfo beanInfo) throws Exception {
StringBuilder javaBuilder = new StringBuilder();
FileOutputStream fos = null;
javaBuilder.append("package " + packagePath + ";");
javaBuilder.append(nextLine);
// 拼接导入的jar
String importJar = pieceImportJar(beanInfo);
javaBuilder.append(importJar);
// 拼接类名
javaBuilder.append(nextLine);
javaBuilder.append(pub + "class " + beanInfo.getClassName() + "{");
javaBuilder.append(nextLine);
// 开始拼接属性
List<ColumnInfo> columnInfos = beanInfo.getColumnInfos();
String propertyString = pieceProperty(columnInfos);
javaBuilder.append(propertyString);
// 拼接get与set方法
String methodString = pieceGetAndSetMethod(columnInfos);
javaBuilder.append(methodString);
javaBuilder.append(nextLine);
javaBuilder.append("}");
// 获取路径,打印
String sendPath = dotToSlash(packagePath);
String javaFilePath = dirPath + dotToSlash2(sendPath) + "\\" + beanInfo.getClassName() + ".java";
fos = new FileOutputStream(javaFilePath, true);
fos.write(javaBuilder.toString().getBytes());
createNum++;
System.out.println("create " + beanInfo.getClassName() + ".java");
fos.close();
}
// 对import的jar包进行拼接
private static String pieceImportJar(BeanInfo beanInfo) {
StringBuilder javaBuilder = new StringBuilder();
// 获取字段的类型
List<String> columnTypes = beanInfo.getColumnTypes();
// List columnTypes = getColumnTypes(beanInfo);
// 拼接导入的jar
for (Object type : columnTypes) {
if ("DATE".equals(type.toString()) || "DATETIME".equals(type.toString())) {
javaBuilder.append("import java.util.Date;");
javaBuilder.append(nextLine);
}
}
return javaBuilder.toString();
}
// 对表属性进行拼接
private static String pieceProperty(List<ColumnInfo> columnInfos) {
StringBuilder javaBuilder = new StringBuilder();
// 开始拼接属性
for (ColumnInfo columnInfo : columnInfos) {
if ("INT".equals(columnInfo.getColumnType().toString())) {
javaBuilder.append(tab + pri + " Integer " + formChangeToLower(columnInfo.getColumnName()) + ";");
javaBuilder.append(nextLine);
} else if ("VARCHAR".equals(columnInfo.getColumnType().toString())) {
javaBuilder.append(tab + pri + " String " + formChangeToLower(columnInfo.getColumnName()) + ";");
javaBuilder.append(nextLine);
} else if ("DECIMAL".equals(columnInfo.getColumnType().toString())) {
javaBuilder.append(tab + pri + " Long " + formChangeToLower(columnInfo.getColumnName()) + ";");
javaBuilder.append(nextLine);
} else if ("DATE".equals(columnInfo.getColumnType().toString())
|| "DATETIME".equals(columnInfo.getColumnType().toString())) {
javaBuilder.append(tab + pri + " Date " + formChangeToLower(columnInfo.getColumnName()) + ";");
javaBuilder.append(nextLine);
} else if ("DOUBLE".equals(columnInfo.getColumnType().toString())) {
javaBuilder.append(tab + pri + " Double " + formChangeToLower(columnInfo.getColumnName()) + ";");
javaBuilder.append(nextLine);
}
javaBuilder.append(nextLine);
}
return javaBuilder.toString();
}
// 拼接get与set方法
private static String pieceGetAndSetMethod(List<ColumnInfo> columnInfos) {
StringBuilder javaBuilder = new StringBuilder();
// 拼接get与set方法
for (ColumnInfo columnInfo : columnInfos) {
if ("INT".equals(columnInfo.getColumnType().toString())) {
// 单词首字母要大写 get
javaBuilder.append(tab + pub + " Integer get"
+ upCaseFirstWord(formChangeToLower(columnInfo.getColumnName())) + "(){");
javaBuilder.append(nextLine);
javaBuilder.append(towtab + "return " + formChangeToLower(columnInfo.getColumnName()) + ";");
javaBuilder.append(nextLine);
javaBuilder.append(tab + "}");
javaBuilder.append(nextLine);
// 单词首字母要大写 set
javaBuilder
.append(tab + pub + " void set" + upCaseFirstWord(formChangeToLower(columnInfo.getColumnName()))
+ "(Integer " + formChangeToLower(columnInfo.getColumnName()) + "){");
javaBuilder.append(nextLine);
javaBuilder.append(towtab + "this." + formChangeToLower(columnInfo.getColumnName()) + "="
+ formChangeToLower(columnInfo.getColumnName()) + ";");
javaBuilder.append(nextLine);
javaBuilder.append(tab + "}");
javaBuilder.append(
没有合适的资源?快使用搜索试试~ 我知道了~
java把excel表的数据导入到mysql数据库
共38个文件
class:12个
java:8个
jar:7个
3星 · 超过75%的资源 需积分: 46 63 下载量 192 浏览量
2018-10-25
10:36:49
上传
评论 8
收藏 6.76MB RAR 举报
温馨提示
用java把excel表的数据导入到数据库(可能有些类型还没考虑完全,抽空写的) 简单的思路 一、先获取数据库表的字段名、主键名, 二、读取excel文件的数据(注意:excel文件的数据表字段的顺序与该表的顺序一致,有空再做导出) 三、拼接sql
资源推荐
资源详情
资源评论
收起资源包目录
ExeclTool.rar (38个子文件)
ExeclTool
.project 909B
.settings
.jsdtscope 567B
org.eclipse.wst.common.component 479B
org.eclipse.jdt.core.prefs 364B
org.eclipse.wst.common.project.facet.core.xml 345B
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.jsdt.ui.superType.name 6B
src
com
cn
wjq
dao
MysqlImpl.java 3KB
main
MyMain.java 949B
model
BeanInfo.java 1KB
ClassType.java 317B
ColumnInfo.java 827B
util
DBConnectUtil.java 2KB
Generator.java 14KB
ExcelInsertPiece.java 5KB
config
props
db.properties 166B
build
classes
com
cn
wjq
dao
MysqlImpl.class 4KB
main
MyMain.class 2KB
model
ClassType.class 1KB
ColumnInfo.class 1KB
BeanInfo.class 2KB
beam
ReadExcel.class 4KB
JdbcUtil.class 9KB
DatabaseUtil.class 7KB
util
DBConnectUtil.class 3KB
Generator.class 11KB
DatabaseUtil.class 6KB
ExcelInsertPiece.class 6KB
demo
config
props
db.properties 166B
WebContent
WEB-INF
lib
log4j-1.2.12.jar 350KB
mysql-connector-java-5.1.41-bin.jar 970KB
poi-ooxml-3.7-20101029.jar 487KB
slf4j-log4j12.jar 8KB
poi-3.9.jar 1.78MB
slf4j-api-1.5.8.jar 23KB
poi-ooxml-schemas-3.8.jar 4.49MB
META-INF
MANIFEST.MF 39B
.classpath 842B
共 38 条
- 1
资源评论
- baoyc2020-05-31都是报错的 还少类少包
- qq_166361632019-04-23還沒試過行不行
JQdmengxiang
- 粉丝: 5
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功