import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; class Field{ String name; // 列名 int size; // 列容量 String type; // 列数据类型 boolean allowNull;// 列是否允許为空 * 利用ResultSetMetaData从数据库的某表中获取字段信息并存到csv文件 * @author horn1 public class ColumnSeeker { private static Logger log = Logger.getLogger(ColumnSeeker.class); private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; private static final String DB_URL = "jdbc:mysql://192.168.161.130:3306/test"; private static final String USER = "root"; private static final String PSWD = "12345678"; private List fields; * 从DB里取字段 * @param tablename * @return public List fetchAllColumns(String tablename){ fields=new ArrayList(); Connection conn = null; Statement stmt = null; try { Class.forName(JDBC_DRIVER).newInstance(); conn = DriverManager.getConnection(DB_URL, USER, PSWD); stmt = conn.createStatement(); String sql = "select * from emp order by id limit 1"; ResultSet rs = stmt.executeQuery(sql); ResultSetMetaData rsMetadata = rs.getMetaData(); while (rs.next()) { int count = rsMetadata.getColumnCount(); for (int i=1; i allowNulls=new ArrayList(); List allowType=new ArrayList(); List allowSize=new ArrayList(); List allowName=new ArrayList(); for(Field f:fields) { allowNulls.add(String.valueOf(f.allowNull)); allowType.add(f.type); allowSize.add(String.valueOf(f.size)); allowName.add(f.name); String line=""; line =String.join(",", allowSize)+ System.getProperty("line.separator"); fileWriter.write(line); line =String.join(",", allowType)+ System.getProperty("line.separator"); fileWriter.write(line); line =String.join(",", allowNulls)+ System.getProperty("line.separator"); fileWriter.write(line); line =String.join(",", allowName)+ System.getProperty("line.separator"); fileWriter.write(line); fileWriter.flush(); fileWriter.close(); return true; } catch (IOException e) { e.printStackTrace(); return false; * 仅将非空列输出到CSV * @param csvFilename * @return public boolean saveNotnullToCsv(String csvFilename) { try { FileWriter fileWriter = new FileWriter(new File(csvFilename), true); List allowNulls=new ArrayList(); List allowType=new ArrayList(); List allowSize=new ArrayList(); List allowName=new ArrayList(); for(Field f:fields) { if(f.allowNull==false) { allowNulls.add(String.valueOf(f.allowNull)); allowType.add(f.type); allowSize.add(String.valueOf(f.size)); allowName.add(f.name); String line=""; line =String.join(",", allowSize)+ System.getProperty("line.separator"); fileWriter.write(line); line =String.join(",", allowType)+ System.getProperty("line.separator"); fileWriter.write(line); line =String.join(",", allowNulls)+ System.getProperty("line.separator"); fileWriter.write(line); line =String.join(",", allowName)+ System.getProperty("line.separator"); fileWriter.write(line); fileWriter.flush(); fileWriter.close(); return true; } catch (IOException e) { e.printStackTrace(); return false; public static void main(String[] args) { ColumnSeeker cs=new ColumnSeeker(); cs.fetchAllColumns("emp"); cs.printFields(); cs.saveAllToCsv("d:\\all.csv"); cs.saveNotnullToCsv("d:\\notnulls.csv"); log.info("Completed");

输出的CSV文件截图:

--END-- 2019年11月2日11:05:53