1. 程式人生 > >java把excel表的資料匯入到mysql資料庫

java把excel表的資料匯入到mysql資料庫

用java把excel表的資料匯入到資料庫(可能有些型別還沒考慮完全,抽空寫的)

————————————————————————————————————————————————————————————

簡單的思路

一、先獲取資料庫表的欄位名、主鍵名,

二、讀取excel檔案的資料(注意:excel檔案的資料表字段的順序與該表的順序一致,有空再做匯出)

三、拼接sql

上程式碼:

一、先連線資料庫

package com.cn.wjq.util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class DBConnectUtil {

	private static String driver;
	
	private static String username;
	
	private static String pwd;
	
	private static String url;
	
	static {
		try {
			ClassLoader classLoader = DBConnectUtil.class.getClassLoader();
			
			InputStream resourceAsStream = classLoader.getResourceAsStream("config/props/db.properties");
			
			Properties properties=new Properties();
			
			properties.load(resourceAsStream);
			
			url = properties.getProperty("url");
			
			username = properties.getProperty("user");
			
			pwd = properties.getProperty("password");
			
			driver = properties.getProperty("driver");
			
			Class.forName(driver);
		}catch (IOException e) {

			e.printStackTrace();
		} catch (ClassNotFoundException e) {

			e.printStackTrace();
		}
	}
	
	public static Connection getConnection() throws SQLException {
		Connection conn = (Connection) DriverManager.getConnection(url, username, pwd);
		if (conn == null) {
			System.out.println("Failed to connect database...");
		} else {
			System.out.println("database connected successful...");
		}
		return conn;
	}
	
	public static void release(ResultSet rs, PreparedStatement sta, Connection conn) {

		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (sta != null) {
			try {
				sta.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		System.out.println("Resource release successful...");
	}

	public static void release(PreparedStatement sta, Connection conn) {
		if (sta != null) {
			try {
				sta.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		System.out.println("Resource release successful...");
	}
	
}

二、獲取表的資訊(當時沒想好,寫了個生成實體類程式碼(也就拼接))

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(nextLine);
			} else if ("VARCHAR".equals(columnInfo.getColumnType().toString())) {
				// 單詞首字母要大寫 get
				javaBuilder.append(tab + pub + " String 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()))
								+ "(String " + formChangeToLower(columnInfo.getColumnName()) + "){");
				javaBuilder.append(nextLine);
				javaBuilder.append(towtab + "this." + formChangeToLower(columnInfo.getColumnName()) + "="
						+ formChangeToLower(columnInfo.getColumnName()) + ";");
				javaBuilder.append(nextLine);
				javaBuilder.append(tab + "}");
				javaBuilder.append(nextLine);
			} else if ("DECIMAL".equals(columnInfo.getColumnType().toString())) {
				// 單詞首字母要大寫 get
				javaBuilder.append(tab + pub + " Long 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()))
								+ "(Long " + formChangeToLower(columnInfo.getColumnName()) + "){");
				javaBuilder.append(nextLine);
				javaBuilder.append(towtab + "this." + formChangeToLower(columnInfo.getColumnName()) + "="
						+ formChangeToLower(columnInfo.getColumnName()) + ";");
				javaBuilder.append(nextLine);
				javaBuilder.append(tab + "}");
				javaBuilder.append(nextLine);
			} else if ("DATE".equals(columnInfo.getColumnType().toString())
					|| "DATETIME".equals(columnInfo.getColumnType().toString())) {
				// 單詞首字母要大寫 get
				javaBuilder.append(tab + pub + " Date 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()))
								+ "(Date " + formChangeToLower(columnInfo.getColumnName()) + "){");
				javaBuilder.append(nextLine);
				javaBuilder.append(towtab + "this." + formChangeToLower(columnInfo.getColumnName()) + "="
						+ formChangeToLower(columnInfo.getColumnName()) + ";");
				javaBuilder.append(nextLine);
				javaBuilder.append(tab + "}");
				javaBuilder.append(nextLine);
			} else if ("DOUBLE".equals(columnInfo.getColumnType().toString())) {
				// 單詞首字母要大寫 get
				javaBuilder.append(tab + pub + " Double 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()))
								+ "(Double " + formChangeToLower(columnInfo.getColumnName()) + "){");
				javaBuilder.append(nextLine);
				javaBuilder.append(towtab + "this." + formChangeToLower(columnInfo.getColumnName()) + "="
						+ formChangeToLower(columnInfo.getColumnName()) + ";");
				javaBuilder.append(nextLine);
				javaBuilder.append(tab + "}");
				javaBuilder.append(nextLine);
			}
			javaBuilder.append(nextLine);
		}
		return javaBuilder.toString();
	}

	// 轉換路徑格式
	// 例如:com/apache/convertor --> com\apache\convertor
	private static String dotToSlash2(String path) {
		String newPath = path.replace("/", "\\");
		return newPath;
	}

	// 轉換路徑格式
	// 例如:com.apache.convertor --> com/apache/convertor
	private static String dotToSlash(String name) {
		String newName = name.replace(".", "/");
		return newName;
	}

	// 字串轉小寫
	private static String formChangeToLower(String name) {
		return name.toLowerCase().replace("_", "");
	}

	// 屬性首字母改成大寫
	private static StringBuilder upCaseFirstWord(String columnName) {

		StringBuilder stringBuilder = new StringBuilder();
		String firstWord = columnName.substring(0, 1).toUpperCase();
		String afertWord = columnName.substring(1);
		stringBuilder.append(firstWord + afertWord);
		return stringBuilder;
	}

	// 轉換為駝峰命名
	private static String formChangeToHump(String name) {
		name = name.toLowerCase();
		Matcher m = linePattern.matcher(name);
		StringBuffer sb = new StringBuffer();
		while (m.find()) {
			m.appendReplacement(sb, m.group(1).toUpperCase());
		}
		m.appendTail(sb);
		StringBuffer sb1 = new StringBuffer();
		Matcher m1 = linePattern2.matcher(sb.toString());
		if (m1.find()) {
			m1.appendReplacement(sb1, m1.group(0).toUpperCase());
		}
		m1.appendTail(sb1);
		return sb1.toString();
	}

	public static void main(String[] args) throws Exception {
		String tableName = "gjjdepositeinfo";
		BeanInfo beanInfo = getColumnInfos(tableName);
		List<ColumnInfo> columnInfos = beanInfo.getColumnInfos();
		for (int i = 0; i < columnInfos.size(); i++) {
			System.out.println(columnInfos.get(i).getColumnName() + "..." + columnInfos.get(i).getColumnType());
		}
		generateInJava(beanInfo);
		System.out.println(beanInfo.getColumnNames().toString());
	}
}

三、記錄表格的資訊實體類

package com.cn.wjq.model;

import java.util.List;

public class BeanInfo {

	//表名稱
	private String tableName;
	
	//表對應的類名
	private String className;
	
	
	//列的資訊
	private List<ColumnInfo> ColumnInfos;

	//列的型別種類
	private List<String> columnTypes;

	//列的類名
	private List<String> columnNames;
	
	public String getTableName() {
		return tableName;
	}

	public void setTableName(String tableName) {
		this.tableName = tableName;
	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

	public List<ColumnInfo> getColumnInfos() {
		return ColumnInfos;
	}

	public void setColumnInfos(List<ColumnInfo> columnInfos) {
		ColumnInfos = columnInfos;
	}

	public List<String> getColumnTypes() {
		return columnTypes;
	}

	public void setColumnTypes(List<String> columnTypes) {
		this.columnTypes = columnTypes;
	}

	public List<String> getColumnNames() {
		return columnNames;
	}

	public void setColumnNames(List<String> columnNames) {
		this.columnNames = columnNames;
	}

	@Override
	public String toString() {
		return "BeanInfo [tableName=" + tableName + ", className=" + className + ", ColumnInfos=" + ColumnInfos
				+ ", columnTypes=" + columnTypes + ", columnNames=" + columnNames + "]";
	}

	
}

四、讀取excel

package com.cn.wjq.util;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.cn.wjq.dao.MysqlImpl;
import com.cn.wjq.model.BeanInfo;


public class ExcelInsertPiece {

	public ExcelInsertPiece() {
	}

	public static void start(InputStream in, String path,BeanInfo beanInfo) throws Exception {
		Workbook book = getWorkBook(in, path); // 1.獲取工作簿
		List<Sheet> sheets = getSheets(book); // 2.獲取所有工作表
		SheetIterator(sheets,beanInfo); // 3.對所有工作表進行操作
	}

	// 1.獲取工作簿
	public static Workbook getWorkBook(InputStream in, String path) throws FileNotFoundException, IOException {
		return path.endsWith(".xls") ? (new HSSFWorkbook(in))
				: (path.endsWith(".xlsx") ? (new XSSFWorkbook(in)) : (null));
	}

	// 2.獲取所有工作表
	private static List<Sheet> getSheets(Workbook book) {
		int numberOfSheets = book.getNumberOfSheets();
		System.out.println("numberOfSheets:" + numberOfSheets);
		List<Sheet> sheets = new ArrayList<Sheet>();
		for (int i = 0; i < numberOfSheets; i++) {
			sheets.add(book.getSheetAt(i));
		}
		return sheets;
	}

	// 3.對所有工作表進行操作
	private static void SheetIterator(List<Sheet> sheets,BeanInfo beanInfo) {
			for (int i = 0; i < sheets.size(); i++) {    //迴圈每一張工作表
				Sheet sheet = sheets.get(i);
				if (sheet.getLastRowNum() > 1) {    //判斷是否為空表,獲取有資料的最後一行的行數。如果為零則為空表
					System.out.println(sheet.getSheetName() + "=============");     //列印不為空的工作表名字
				}
				Iterator<Row> iterator = sheet.iterator();   //迭代器
				//用兩個while迴圈遍歷所有單元格
				while (iterator.hasNext()) {           //遍歷每一行
					Row nextRow = iterator.next();
					if (nextRow.getRowNum() < 1) {
						continue;    
						//nextRow.getRowNum()就是獲取行數,由表中看出第一行(getRowNum()=0)為表頭,直接跳過
					}
					//從第二行開始是有用的資料,要儲存早資料庫,第二行:nextRow.getRowNum()=1
					Iterator<Cell> cellIterator = nextRow.cellIterator();
					int size = beanInfo.getColumnNames().size();
					List<Object> columnValues=new ArrayList<>();
					while (cellIterator.hasNext()) {         //遍歷每一行的每一列
						Cell cell = cellIterator.next();
						if (cell.getColumnIndex()>=0&&cell.getColumnIndex()<size) {
							String cellValue = "";
							DecimalFormat df = new DecimalFormat("#");
							switch (cell.getCellType()) { 
					        case HSSFCell.CELL_TYPE_STRING: 
					            cellValue =cell.getRichStringCellValue().getString().trim(); 
					            columnValues.add(cellValue);
					            break; 
					        case HSSFCell.CELL_TYPE_NUMERIC: 
					        	//將單元格內容設定為number型別,也可以這樣寫cell.setCellType(Cell.CELL_TYPE_NUMERIC);
		                	    cell.setCellType(0);
								SimpleDateFormat ftm = new SimpleDateFormat("yyyy-MM-dd");
								double value = cell.getNumericCellValue();
								System.out.println(value+"...");
								Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
								//判斷是否屬於時間型別
								if (HSSFDateUtil.isCellDateFormatted(cell)) {
									columnValues.add(ftm.format(date));
									//如果這裡列印的話,還是會打印出數字,但是儲存到資料庫會變成日期格式
									System.out.println(ftm.format(date).toString());
								}else {
									//基本型別
									columnValues.add(value);
								}
					            break; 
					        case HSSFCell.CELL_TYPE_BOOLEAN: 
					            cellValue =String.valueOf(cell.getBooleanCellValue()).trim(); 
					            columnValues.add(cellValue);
					            break; 
					        case HSSFCell.CELL_TYPE_FORMULA: 
					            cellValue =cell.getCellFormula(); 
					            columnValues.add(cellValue);
					            break; 
					        default: 
					        	cell.setCellType(1); 
								columnValues.add(cell.getStringCellValue().toString());
					            break; 
					        }
						}
					}
					try {
						//到這裡已經遍歷完一行Execl的所有單元格,並存儲到model裡面了,現在呼叫方法儲存到資料庫
						MysqlImpl mysqlImpl = new MysqlImpl();  
						System.out.println(columnValues.toString());
						if (columnValues.size()==1&&columnValues.get(0)==null||columnValues.get(0)=="") {
							//判斷excel表中的這條資料是否為空
							continue;
						}else if (mysqlImpl.exist(beanInfo, columnValues)) {
							System.out.println("此物件已存在於資料庫,不可重複新增");
							continue;
						}
						else {
							mysqlImpl.save(beanInfo, columnValues);
						}
					} catch (Exception e) {
						e.printStackTrace();
					}
					System.out.println("   ");
				}
				System.out.println("   ");
			}
		}
}

五、開始拼接sql先查詢是否存在該表主鍵存在,不存在在讀取excel的程式碼中再執行插入

package com.cn.wjq.dao;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import com.cn.wjq.model.BeanInfo;
import com.cn.wjq.util.DBConnectUtil;

public class MysqlImpl {

	private static final String sql_findById = " SELECT * FROM ";
	private static final String sql_save = " INSERT INTO ";
	
	@SuppressWarnings("resource")
	public Integer save(BeanInfo beanInfo,List<Object> columnValus) throws Exception {
		Connection conn = null;
		PreparedStatement prep = null;
        int i = 0;
		try {
			conn = DBConnectUtil.getConnection();
			StringBuilder sqlBuilder=new StringBuilder();
			//拼接sql
			//" INSERT INTO t_reader(id,dept,course,credit,book_num,publish_date,book_name) VALUES(?,?,?,?,?,?,?)";
			sqlBuilder.append(sql_save);
			sqlBuilder.append(beanInfo.getTableName()+"(");
			//拼接sql的屬性
			List<String> columnNames = beanInfo.getColumnNames();
			int prepCount=0;
			ok:
			for(int j=0;j<columnNames.size();j++) {
				if (j==columnNames.size()-1) {
					prepCount++;
					sqlBuilder.append(columnNames.get(j)+") VALUES(");
					for (int j2 = 0; j2 < prepCount; j2++) {
						if (j2==prepCount-1) {
							sqlBuilder.append("?)");
							break ok;
						}
						sqlBuilder.append("?,");
					}
				}
				sqlBuilder.append(columnNames.get(j)+",");
				prepCount++;
			}
			String sqlString = sqlBuilder.toString();
			prep = conn.prepareStatement(sqlString);
			for(int k=0;k<columnValus.size();k++) {
				prep.setObject(k+1, columnValus.get(k));
				
			}
			i  = prep.executeUpdate();
			 if(i>0){
				System.out.println("1 row affected...");
			 }else if(i==0){
				 System.out.println("insert failed...");
			 }
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DBConnectUtil.release( prep, conn);
		}
		return i;
	}
	
	//判斷該主鍵是否存在
	//SELECT * FROM t_reader WHERE id = ?
	public boolean exist(BeanInfo beanInfo,List<Object> columnValus) {
		Connection connection=null;
		PreparedStatement prepareStatement=null;
		ResultSet resultSet=null;
		DatabaseMetaData dbMetaData = null;
		boolean exist=false;
		ResultSet primaryKeyResultSet =null;
		String primaryKeyColumnName =null;
		StringBuilder sqlBuilder=null;
		try {
			connection = DBConnectUtil.getConnection();
			dbMetaData = connection.getMetaData(); 
			String tableName = beanInfo.getTableName();
			List<String> columnNames = beanInfo.getColumnNames();
			primaryKeyResultSet = dbMetaData.getPrimaryKeys(null,null,tableName);  
			while(primaryKeyResultSet.next()){  
			    primaryKeyColumnName = primaryKeyResultSet.getString("COLUMN_NAME");  
			} 
			if (primaryKeyColumnName!=null) {
				sqlBuilder=new StringBuilder();
				sqlBuilder.append(sql_findById);
				sqlBuilder.append(beanInfo.getTableName()+" WHERE "+primaryKeyColumnName+"=?");
				prepareStatement = connection.prepareStatement(sqlBuilder.toString());
				ok:
				for(int i=0;i<columnValus.size();i++) {
					if (primaryKeyColumnName.equals(columnNames.get(i))) {
						prepareStatement.setObject(1, columnValus.get(i));
						break ok;
					}
				}
				resultSet = prepareStatement.executeQuery();
				if (resultSet.next()==true) {
					exist=true;
				}else {
					exist=false;
				}
			}
			
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		
		return exist;
	}
	
}

六、main方法

package com.cn.wjq.main;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;

import com.cn.wjq.model.BeanInfo;
import com.cn.wjq.model.ColumnInfo;
import com.cn.wjq.util.ExcelInsertPiece;
import com.cn.wjq.util.Generator;

public class MyMain {

	public static void main(String[] args) throws Exception {
		String tableName1="t_cousre";
		//輸入表名
		BeanInfo beanInfo = Generator.getColumnInfos(tableName1);
		List<ColumnInfo> columnInfos = beanInfo.getColumnInfos();
		for (int i = 0; i < columnInfos.size(); i++) {
			System.out.println(columnInfos.get(i).getColumnName() + "..." + columnInfos.get(i).getColumnType());
		}
		Generator.generateInJava(beanInfo);
		
		//String path = "c:/t_reader工作表.xls";
		String path = "c:/couse工作表.xls";
		InputStream in = new FileInputStream(new File(path));
		ExcelInsertPiece.start(in,path,beanInfo);	
	}
}

估計還有不少漏洞,只是基本可用,新手小白鼠一隻,歡迎大佬們點評;有需要修改的地方還請不吝賜教