
เง้ออออ... - -'
Technology, Project, Software Architecture
public Connection getAS400Connection() throws ClassNotFoundException, SQLException{
Connection conn=null;
final String HOST="10.251.1.20";
final String USER="nidex";
final String PASSWORD="nidex";
try{
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
conn=DriverManager.getConnection("jdbc:as400://"+HOST,USER,PASSWORD);
}catch(ClassNotFoundException cex){
cex.printStackTrace();
throw cex;
}catch(SQLException sex){
sex.printStackTrace();
throw sex;
}
return conn;
}
Database Tool ที่ใช้เปิด Connection ไปยัง Database ต่างๆ รวมถึง AS/400
package csi.sample;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
public class As400Conn {
public static void printColTypes(ResultSetMetaData rsmd)
throws SQLException {
int columns = rsmd.getColumnCount();
for (int i = 1; i <= columns; i++) {
int jdbcType = rsmd.getColumnType(i);
String name = rsmd.getColumnTypeName(i);
System.out.print("Column " + i + " is JDBC type " + jdbcType);
System.out.println(", which the DBMS calls " + name);
}
}
public Connection getAS400Connection()
throws ClassNotFoundException, SQLException{
Connection conn=null;
final String HOST="10.251.1.20";
final String USER="nidex";
final String PASSWORD="nidex";
try{
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
conn=DriverManager.getConnection("jdbc:as400://"+HOST,USER,PASSWORD);
}catch(ClassNotFoundException cex){
cex.printStackTrace();
throw cex;
}catch(SQLException sex){
sex.printStackTrace();
throw sex;
} return conn;
}
public static void main(String[] args) {
try{
As400Conn as400=new As400Conn();
final String LIBRARY="MVXCDTA3";
final String TABLE="MITMAS";
Connection conn=as400.getAS400Connection();
Statement stmt=conn.createStatement();
String query="select * from "+LIBRARY+"."+TABLE;
ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
printColTypes(rsmd);
System.out.println("");
int numberOfColumns = rsmd.getColumnCount();
for (int i = 1; i <= numberOfColumns; i++) {
if (i > 1) System.out.print(", ");
String columnName = rsmd.getColumnName(i);
System.out.print(columnName);
}
System.out.println("");
while (rs.next()) {
for (int i = 1; i <= numberOfColumns; i++) {
if (i > 1) System.out.print(", ");
String columnValue = rs.getString(i);
System.out.print(columnValue);
}
System.out.println("");
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
<%@page import="java.util.*"%>
<%@page import="data.connect.DBConnect"%>
<%@page import="java.sql.Connection"%>
<%@page import="net.sf.jasperreports.engine.*"%>
<%@page import="net.sf.jasperreports.engine.data.JRAbstractBeanDataSourceProvider"%>
<%@page import="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"%>
<%@page import="net.sf.jasperreports.engine.export.*"%>
<%
String dataSource = request.getParameter("DataSource");//DataSource
String sReportPath = getServletContext().getRealPath("/Reports/"
+ request.getParameter("ReportName") + ".jrxml");
//Mapping Query String to Report's Parameter
Map<String, Object> parameters = new HashMap<String, Object>();
Enumeration eParaName = request.getParameterNames();
if (eParaName != null){
while (eParaName.hasMoreElements()) {
Object obj = eParaName.nextElement();
parameters.put(obj.toString(), request.getParameter(obj.toString()));
}
}
//Compile Report jrxml --> jasper
JasperReport jasperReport = JasperCompileManager.compileReport(sReportPath);;
JasperPrint jasperPrint=null;
try {
if (dataSource == null) { //Check Data Source Type
//Get Data from Connection
//Create connection to Database
Connection connection=DBConnect.getMySqlConnection();
jasperPrint =
JasperFillManager.fillReport(jasperReport, parameters, connection);
}
else{
//Get Data from Data Source Class
JRAbstractBeanDataSourceProvider dsf
= (JRAbstractBeanDataSourceProvider)Class.forName(dataSource).newInstance();
JRBeanCollectionDataSource ds = (JRBeanCollectionDataSource)dsf.create(jasperReport);
if (ds != null) {
jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ds);
}
}
//Stream output to PDF file
ServletOutputStream sosStream = response.getOutputStream();
JRExporter exporter = new JRPdfExporter();//PDF Export
exporter.setParameter( JRExporterParameter.JASPER_PRINT, jasperPrint );
//Set Stream header
response.setHeader (
"Content-Disposition", "attachment;filename=\""
+request.getParameter("ReportName")+".pdf\"");
exporter.setParameter( JRExporterParameter.OUTPUT_STREAM, sosStream);
exporter.exportReport();
sosStream.close();
}
catch (Exception ex1){
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex1.getMessage());
ex1.printStackTrace();
return;
}
%>
package data.factory;
import java.io.Serializable;
import java.util.Date;
public class Employee implements Serializable {
private static final long serialVersionUID = -2601582524413665788L;
private String empNo;
private String empName;
private String depNo;
private String depName;
private Date startDate;
public Employee(String empNo, String empName,
String depNo, String depName, Date startDate) {
super();
this.empNo = empNo;
this.empName = empName;
this.depNo = depNo;
this.depName = depName;
this.startDate = startDate;
}
public String getDepNo() {return depNo;}
public void setDepNo(String depNo) {this.depNo = depNo;}
public String getEmpName() {return empName;}
public void setEmpName(String empName) {this.empName = empName;}
public String getEmpNo() {return empNo;}
public void setEmpNo(String empNo) {this.empNo = empNo; }
public Date getStartDate() {return startDate;}
public void setStartDate(Date startDate) {this.startDate = startDate;}
public String getDepName() {return depName;}
public void setDepName(String depName) {this.depName = depName;}
}
package data.factory;
import java.sql.*;
import java.util.*;
import java.util.Date;
import data.connect.DBConnect;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRAbstractBeanDataSourceProvider;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class EmployeeReport
extends JRAbstractBeanDataSourceProvider {
public EmployeeReport() {
super(Employee.class);
}
public void dispose(JRDataSource arg0) throws JRException {
}
public JRDataSource create(JasperReport arg0) throws JRException {
ArrayList<Employee> list=new ArrayList<Employee>();
String sSQL="SELECT EmpNo , EmpName , "
+"StartDate , employee.DepNo,DepName"
+" FROM employee "
+" INNER JOIN department"
+" ON employee.DepNo = department.depno "
+" where employee.DepNo='S01'"
+" order by EmpNo";
try{
Connection connection=DBConnect.getMySqlConnection();
PreparedStatement prs=connection.prepareStatement(sSQL);
ResultSet rs=prs.executeQuery();
while(rs.next()){
list.add(new Employee(rs.getString("EmpNo")
,rs.getString("EmpName")
,rs.getString("DepNo"),rs.getString("DepName")
,new Date(rs.getDate("StartDate").getTime())));
}
}
catch(Exception ex){
ex.printStackTrace();
}
return new JRBeanCollectionDataSource(list);
}
}
5. สร้าง Report โดยใช้ Report Wizard ตามปกติ โดยจะเห็น Properties ของ Entity Bean เป็น Field ใน Report
2. ใช้ Report Wizard สร้าง Report ขึ้นมาจาก Connection ที่สร้างไว้ (menu File-> Report Wizard)
3. ในช่อง SQL Query ให้ใส่ SQL เพื่อดึงข้อมูลที่จะให้แสดงใน Report และเมื่อกด Next จะแสดง Field ทั้งหมดที่ SQL Select ขึ้นมา ให้เลือก Field ที่จะแสดงและกด Next ต่อไป
4. เลือก Group และเลือก Template ที่จะใช้แล้ว ก็จะได้ Report ออกมาแบบนี้ (เลือก Tabular layout, classicT.xml) แก้ Report Title ให้เป็นตามต้องการ
5. ไปที่ menu Build->Execute (with active connection) เพื่อเป็นการ Preview Report กับ Data
function showLoading() {
var m = window.createPopup();
var n = m.document.body;
var width=200;
var height=100;
var left = parseInt((screen.availWidth/2) - (width/2));
var top = parseInt((screen.availHeight/2) - height);
n.style.border="solid 2px black";
n.innerHTML = "Loading Data ....";
m.show( left, top, width, height, document.body);
}












