java把excel表的資料匯入到mysql資料庫
阿新 • • 發佈:2018-12-17
用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);
}
}
估計還有不少漏洞,只是基本可用,新手小白鼠一隻,歡迎大佬們點評;有需要修改的地方還請不吝賜教