2015年2月10日 星期二

Jasperreport - JRMapCollectionDataSource

jasperreport使用JRMapCollectionDataSource方式取代Connection Expression

Ireport設定:
1. 設置paramter為JRMapCollectionDataSource
2. 子報表設定Filed為JRMapCollectionDataSource指定名稱(大小寫需相同)

Java Code:

 private static BasicDataSource dataSource ;
private static JdbcTemplate jdbcTemplate ;

private static String sql1 = "SELECT LOGIN_ID, USER_NAME, USER_EMAIL FROM USER_DATA " ;
private static String sql2 = "SELECT LOGIN_ID, LOGIN_DT, LOGIN_RMK FROM LOGIN_LOG " ;
private static String mJrFile = "D:\\Jasperreport\\mainReport.jasper" ; //主報表路徑
private static String sJrFile = "D:\\Jasperreport\\" ; //子報表路徑

public static void main(String[] args) throws Exception{
   //模擬專案執行
   //connection 以Spring jdbcTemplate控管
   dataSource = new BasicDataSource() ;
   dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver") ;
   dataSource.setUrl("jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.101)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xe)(SERVER=DEDICATED)))") ;
   dataSource.setUsername("zenii") ;
   dataSource.setPassword("zenii") ;
   dataSource.setMaxActive(30) ;
   dataSource.setMaxWait(10000) ;
   dataSource.setMaxIdle(10) ;
   dataSource.setDefaultAutoCommit(true) ;
   jdbcTemplate = new JdbcTemplate(dataSource) ;
 
   //輸出路徑
   String outputPath = "D:\\Jasperreport\\test.pdf";
   try{
//get connection
Connection con = null;
try {
   con = getConnection();
} catch (Exception e) {
   e.printStackTrace();
}

JRPdfExporter exporter = new JRPdfExporter();
Map<String, Object> pt = new HashMap<String, Object>();
//paramter
pt.put("SUBREPORT_DIR", sJrFile);

List<DataBean> queryData1 = getData("sql1");
ArrayList<Map<String, ?>> dataAry1 = new ArrayList<Map<String, ?>>();
for(int i=0 ; i<queryData1.size() ; i++){
   Map<String, Object> data = new HashMap<String, Object>();
   data.put("loginId", queryData1.get(i).getLoginId());
   data.put("userName", queryData1.get(i).getUserName());
   data.put("userEmail", queryData1.get(i).getUserEmail());
   dataAry1.add(data);
}
pt.put("DataSource1", new JRMapCollectionDataSource(dataAry1));

List<DataBean> queryData2 = getData("sql2");
ArrayList<Map<String, ?>> dataAry2 = new ArrayList<Map<String, ?>>();
for(int i=0 ; i<queryData2.size() ; i++){
   Map<String, Object> data = new HashMap<String, Object>();
   data.put("loginId", queryData2.get(i).getLoginId());
   data.put("loginDt", queryData2.get(i).getLoginDt());
   data.put("loginRmk", queryData2.get(i).getLoginRmk());
   dataAry2.add(data);
}
pt.put("DataSource2", new JRMapCollectionDataSource(dataAry2));

//compiler report
JasperPrint print = JasperFillManager.fillReport(mJrFile, pt, con);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputPath);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);

//export report
exporter.exportReport();
System.out.println("執行成功.");

   }catch(Exception e){
System.out.println(e.toString());  
   }
}

public static List<DataBean> getData(String sqlName) {
   StringBuffer sql = new StringBuffer();
   if(sqlName.equals("sql1")){
sql.append(sql1);
   }else{
sql.append(sql2);
   }
   return jdbcTemplate.query(sql.toString(), new BeanRowMapper<DataBean>(DataBean.class));
}
public static Connection getConnection() throws Exception{
return jdbcTemplate.getDataSource().getConnection() ;
}

2014年12月2日 星期二

(Java)讀取xls置入ArrayList

以下為Java讀取xls置入ArrayList的方式

    private static ArrayList<String[]> dataList = new ArrayList<String[]>(); //檔案內容
    
    private FormulaEvaluator evaluator ;
    
    public FormulaEvaluator getEvaluator() {
return evaluator;
    }
    
    public static void main(String args[]) throws Exception{
String filePath = "D:";
//確認檔案路徑
       if(StringUtils.isBlank(filePath)){
return;
       }else{
//real file path
if(filePath.startsWith("/")){
              rFilePath = filePath + "/XXX.xls";
}else{
              rFilePath = filePath + "\\XXX.xls";
}
        }
        //讀取檔案內容
        try {
FileInputStream fis = new FileInputStream(rFilePath);
POIFSFileSystem fs = new POIFSFileSystem(fis);
HSSFWorkbook wb = new HSSFWorkbook(fs);
 
             addData(wb,"sheet1");
addData(wb,"sheet2");

//print
if(dataList.size()>0){
               for(int p1=0 ; p1<dataList.size() ; p1++){
for(int p2 =0 ; p2<dataList.get(p1).length ; p2++){
                        if(p2==dataList.get(p1).length-1){
System.out.println(dataList.get(p1)[p2]);
                        }else{
System.out.print(dataList.get(p1)[p2]+"|");
                        }
}
               }
}
} catch (Exception e) {
e.printStackTrace();
        }
    }

    public static boolean addData(HSSFWorkbook wb,String sheetName){
HSSFSheet sheet = wb.getSheet(sheetName);
int totalRow = sheet.getLastRowNum()+1;
if(sheet == null || totalRow == 0){
           errorCode.append(sheetName+"無資料");
           return false;
}else{
           for (int i = starDataNo; i < totalRow; i++) {
HSSFRow row = sheet.getRow(i);
String[] dataRow = new String[row.getLastCellNum()];
if(row!=null){
                   for(int j=0 ; j<row.getLastCellNum() ; j++){
dataRow[j] = row.getCell(j).toString().trim();
                   }
                   dataList.add(dataRow);
}
           }
}
return true;
    }

2014年6月30日 星期一

找不到指定的 VM 安裝:類型 標準 VM

Eclipse Error:When build war file
找不到指定的 VM 安裝:類型 標準 VM,名稱 jdk1.6.0_31

此問題為ANT抓不到JDK,Eclipse解決辦法:
1.選擇外部配置











2.選擇已安裝的JDK即可進行build











2013年5月9日 星期四

ORACLE (PL/SQL) REPLACE 用法

REPLACE(字串 or COLUMN,字符 or 字串,替代字符 or 替代字串)

EX:
REPLACE( ' &a&b&c&d& ' , ' & ' , ' * ' )

→ *a*b*c*d*



TABLE
COLUMN_A → &a&b&c&d
COLUMN_B → *a*b*c*d
  
SELECT REPLACE ( COLUMN_A , ' & ' , ' ^ ' ) AS CLUMN_1 ,
               REPLACE ( COLUMN_B , ' * ' , ' ^ ' ) AS CLUMN_2 FROM TABLE

COLUMN_1 → ^a^b^c^d
COLUMN_2 → ^a^b^c^d


2013年4月21日 星期日

When we grow up

2013/04/22    當我們長大了-by Brad

今年,我28歲。

今年,我剛退伍。

今年,我進入職場。



今天,是進入職場的2個月又2天。

很開心,我做了所謂的Programer。

但2個月後的今天,熱情,壯志,夢想,卻漸漸遠去。

不斷的適應,不斷的學習,不斷的努力,支撐的是毅力,是夢想。

從來,我不是個聰明的孩子。

但我總是相信著一句話,努力就會出頭天。

或許,再努力一點,再多一點努力,世界會更開闊一點。





































期待,曙光會再次降臨身邊。