1. 程式人生 > >匯出一個數據庫下所有的表的資料結構,然後生成一個包含多個表sheet的excel文件

匯出一個數據庫下所有的表的資料結構,然後生成一個包含多個表sheet的excel文件

檢視一個表的資料結構:
SELECT
    IFNULL(COLUMN_NAME,'') AS columnmName,
    IFNULL(COLUMN_TYPE,'') AS columnType,
    IFNULL(DATA_TYPE ,'')AS dataType,
    IFNULL(CHARACTER_MAXIMUM_LENGTH,'') AS length,
    IFNULL(IS_NULLABLE,'') AS isNullable,
    IFNULL(COLUMN_DEFAULT,'') AS columnDefault,
    IFNULL(COLUMN_COMMENT,'') AS columnComment
FROM
    INFORMATION_SCHEMA. COLUMNS
WHERE
    -- fangwifi_new 為資料庫名稱,fangwifi_advance 表名,到時候只需要修改成你要匯出表結構的資料庫即可
    table_schema = 'fangwifi_new'

AND table_name = 'fangwifi_advance'   

檢視一個數據庫有多少個表:

    SELECT
                table_name as tableName
            FROM
                information_schema. TABLES
            WHERE

                table_schema = 'fangwifi_new'

廢話不多說,上程式碼:

import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.fangwifi.dao.user.UserDao;
import com.fangwifi.domain.user.Table;


public class PoiTest {
    public static void main(String[] args) {
        try {
            FileOutputStream out = new FileOutputStream("c:\\房微愛.xls");
            ExportExcelUtils eeu = new ExportExcelUtils();
            HSSFWorkbook workbook = new HSSFWorkbook();
            String[] headers = {"序號","列名","資料型別","欄位型別",    "長度","是否為空","預設值" ,"備註 "};
            
            
             ClassPathXmlApplicationContext context = new
                     ClassPathXmlApplicationContext("/spring-config.xml");
             UserDao userDao= (UserDao) context.getBean("userDao");
             List<Table> allTables = userDao.listTablesBySchema(new Table());
             for(  int k=0; k<allTables.size();k++){
                 Table table = allTables.get(k);
                 Table tableQuery = new Table();
                 tableQuery.setSchema("fangwifi_new");
                 tableQuery.setTableName(table.getTableName());
                 List<Table> list = userDao.listTablesByTable(tableQuery);
                 List<List<String>> data = new ArrayList<List<String>>();
                 for(int i=0; i < list.size();i++){
                     Table t = list.get(i);
                     List rowData = new ArrayList();
                     rowData.add(String.valueOf(i+1));
                     rowData.add(t.getColumnmName());
                     rowData.add(t.getColumnType());
                     rowData.add(t.getDataType());
                     rowData.add(t.getLength());
                     rowData.add(t.getIsNullable());
                     rowData.add(t.getColumnDefault());
                     rowData.add(t.getColumnComment());
                     data.add(rowData);
                 }
                 eeu.exportExcel(workbook, k, tableQuery.getTableName(), headers, data, out);
             }
            
            //原理就是將所有的資料一起寫入,然後再關閉輸入流。
            workbook.write(out);
            System.out.println("匯出完成");
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
}

import java.io.OutputStream;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;


public class ExportExcelUtils {
    /**
     * @Title: exportExcel
     * @Description: 匯出Excel的方法
     * @author: evan @ 2014-01-09
     * @param workbook
     * @param sheetNum (sheet的位置,0表示第一個表格中的第一個sheet)
     * @param sheetTitle  (sheet的名稱)
     * @param headers    (表格的標題)
     * @param result   (表格的資料)
     * @param out  (輸出流)
     * @throws Exception
     */
    public void exportExcel(HSSFWorkbook workbook, int sheetNum,
            String sheetTitle, String[] headers, List<List<String>> result,
            OutputStream out) throws Exception {
        // 生成一個表格
        HSSFSheet sheet = workbook.createSheet();    
        workbook.setSheetName(sheetNum, sheetTitle);
        // 設定表格預設列寬度為20個位元組
        sheet.setDefaultColumnWidth((short) 20);
        // 生成一個樣式
        HSSFCellStyle style = workbook.createCellStyle();
        // 設定這些樣式
        style.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        style.setBorderTop(HSSFCellStyle.BORDER_THIN);
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        // 生成一個字型
        HSSFFont font = workbook.createFont();
        font.setColor(HSSFColor.BLACK.index);
        font.setFontHeightInPoints((short) 12);
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        // 把字型應用到當前的樣式
        style.setFont(font);
 
        // 指定當單元格內容顯示不下時自動換行
        style.setWrapText(true);
 
        // 產生表格標題行
        HSSFRow row = sheet.createRow(0);
        for (int i = 0; i < headers.length; i++) {
            HSSFCell cell = row.createCell((short) i);
        
            cell.setCellStyle(style);
            HSSFRichTextString text = new HSSFRichTextString(headers[i]);
            cell.setCellValue(text.toString());
        }
        // 遍歷集合資料,產生資料行
        if (result != null) {
            int index = 1;
            for (List<String> m : result) {
                row = sheet.createRow(index);
                int cellIndex = 0;
                for (String str : m) {
                    HSSFCell cell = row.createCell((short) cellIndex);
                    cell.setCellValue(str.toString());
                    cellIndex++;
                }
                index++;
            }
        }
    }

}

相關推薦

匯出個數所有資料結構然後生成一個包含sheet的excel

檢視一個表的資料結構:SELECT    IFNULL(COLUMN_NAME,'') AS columnmName,    IFNULL(COLUMN_TYPE,'') AS columnType,    IFNULL(DATA_TYPE ,'')AS dataType, 

同時修改某個數所有所有欄位的編碼格式(mysql)

最近在進行原始碼的二次開發,突然之間有了一個小的需求,就這麼悄悄的突然出現了。 需求原因就不說了,只說這個怎麼實現的。我是用的是mysql資料庫,其他的略有不同,具體到哪一點就只能具體變化了。 看網上有的說直接把資料庫或者表的編碼做改變就行了,可是這樣對欄位來說都沒有影響。

統計個數庫內所有的記錄條數總和統計個數中有多少張的SQL語句

--統計一個數據庫內所有表的記錄條數總和select SUM(rowcounts)from (SELECT OBJECT_NAME(id) AS [TBName],MAX(rowcnt)[rowcounts]       FROM sys.sysindexes GROUP B

SQL如何獲取個數中的所有的名稱、一個所有欄位的名稱

1.查詢資料庫中的所有資料庫名: SELECT Name FROM Master..SysDatabases ORDER BY Name 2.查詢某個資料庫中所有的表名: SELECT Name FROM SysObjects Where XType='U' ORDER BY

sql語句怎麼在個數中查詢擁有同一欄位名的所有

1. SELECT TABLE_NAME  FROM INFORMATION_SCHEMA.COLUMNS  WHERE COLUMN_NAME = '欄位名' 2. SELECT COLUMN_NAME,TABLE_NAME FROM INFORMATION_SCHE

mysql 怎樣清空個數中的所有

Mysql清空表是很重要的操作,也是最常見的操作之一,下面就為您詳細介紹Mysql清空表的實現方法,希望能夠對您有所幫助。 方法1:重建庫和表 一。只匯出表結構 匯出整個資料庫結構(不包含資料) mysqldump -h localhost -uroot -p12345

SQL如何查詢個數中的所有?

1.讀取庫中的所有表名 select name from sysobjects where xtype='u' 2.讀取指定表的所有列名 select name from syscolumns where id=(select max(id) from sysobjects

SqlServer將數中的復制到另個數

步驟 .cn 一個 使用 目標表 插入 ctrl eat 根據 在使用SqlServer的過程中,我們可能需要將表從一個數據庫復制到另一個數據庫中,今天,我為大家介紹這種操作的具體方法及步驟。可能對大部分人來說是很簡單的東西,但是還是要記錄下來,好記性不如爛筆頭嘛。希望可以

Sql Server 導入還有個數中的

數據庫 tex .net mark manage alt img 資源管理 一個數據庫 在涉及到SQL Server編程或是管理時一定會用到數據的導入與導出, 導入導出的方法有多種,此處以SQL Server導入表數據為例。闡述一下:1、打開SQL Server Mana

SQLSERVER復制數一個到另個數中(可跨服務器)

led 數據 rom msdb pan 錯誤 ons 數據庫 ble 一、復制數據庫某一個表到另一個數據庫中(同一服務器) SELECT * INTO 表1 FROM 表2 --復制表2如果只復制結構而不復制內容或只復制某一列只要加WHERE條件就好了 例子:SELECT

藉助個數來維護主鍵(mybatis呼叫儲存過程)

###建立主鍵表 CREATE TABLE c_table_key ( table_name varchar(50) NOT NULL COMMENT ‘需要建立主鍵的表名’, last_key bigint(20) NOT NULL COMMENT ‘最後一次使用的主鍵,新的主鍵將在此

SQL SERVER 將個數中的資料複製到另個數

第一種情況:將A資料庫.dbo.A表的資料追加到B資料庫.dbo.B表中 (條件:此時B資料庫中已建立好了B表) insert into B資料庫.dbo.B表 select * from A資料庫.dbo.A表 [where條件] 此T-SQL語句會有異常   &n

MySQL查詢個數裡面有多少張

6. MySQL查詢一個數據庫裡面有多少張表 XXX是你的資料庫名稱 SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES WHERE table_schema = 'XXX' GROUP BY t

定時將資料庫A中的同步到另個數

以下是核心配置 需要注意的是 這裡是一個表 一個表進行的同步,多張表時均需要在標籤中進行配置,另外目標資料庫中的表結構需要建好 需要更新的欄位都要再 和 中; 另外注意資料庫的地址和使用者名稱以及密碼都要改為自己使用的。 <?xml version

中的資料複製到另個數

1. 在 src 目錄下建立 jdbc.properties #Oracle oracle.driver=oracle.jdbc.driver.OracleDriver oracle.jdbcUrl=jdbc:oracle:thin:@localhost:1521:orcl

SQL 把個數裡面的某張表裡的資料插入到另外個數裡面的

insert into 需要插入的表名 select * from 資料庫.dbo.表名 where 插入條件='2016-06-02 00:00:00.000'   insert into inventory_hr select * from CS12.dbo.inventory

通過 SQL Server 檢視訪問另個數伺服器的方法

-訪問不同電腦上的資料庫(遠端只要聯好網就一樣)   --如果經常訪問或資料量大,建議用連結伺服器   --建立連結伺服器   exec   sp_addlinkedserver     'srv_lnk','','SQLOLEDB','遠端伺服器名或ip地址'   exec

資料庫一個的某欄位內容匯入到另個數的某欄位中

示例:insert into user (name)select namefrom A.dbo.user例項:匯入會員表:(member_info,要匯入的目標表,shualodb.dbo.KS_User,hualodb(另個數據庫)的源表)insert member_info(memberId,member

python中把資料庫 資料存入另個數

把'aa'資料庫中資料存入default ##############################################  student =Student.objects.using('aa').order_by('id').filter(pk__gt=1)

MS SQL中複製到另外個數

--複製結構+資料 select * into 資料庫名.dbo.新表名 from 資料庫名.dbo.原表名 select * into Stockholder.dbo.SHInfo from dspring.dbo.HIREMEN --只複製結構