2008年12月4日 星期四

如果使用javax 的功能

要使用javax 的功能, 只要在classpath中指定dt.jar就可以了.
例如
C:\Program Files\Java\jdk1.6.0_06\lib\dt.jar

2008年12月2日 星期二

自定package sample

package flymilk;
public class u_head_java {

public static void main(String args[]) {

System.out.println("Hello world!!");

}
}

//---------------------------------------------------------
設定class
set classpath=C:\flymilk;.
//---------------------------------------------------------
編譯這個class
javac -d . u_head_java.java
//---------------------------------------------------------
執行這個class
java flymilk.u_head_java
//---------------------------------------------------------

編好的class 放到 目錄下
C:\Tomcat\webapps\ROOT\WEB-INF\classes <--放class
C:\Tomcat\webapps\ROOT\WEB-INF\lib <--放jar 檔

class 裏面的function 必須是public 的

2008年11月14日 星期五

SQL資料庫還原令

如果SQL資料庫備份檔要還原的檔案位置, 和原備份位置不相同,
就要修改指令檔備份

指令範例:

RESTORE DATABASE [DSCSYS]

FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\DSCSYS_backup_200811140000.bak\DSCSYS_backup_200811140000.bak'
WITH MOVE 'DSCSYS_data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\DSCSYS.mdf',
MOVE 'DSCSYS_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\DSCSYS.log',
REPLACE;
GO

2008年10月20日 星期一

使用 apache fileupload (含中文亂碼修正)

之前上傳是使用SmartUpload, 原本是沒問題, 後來tomcat 更新之後.
上傳就出現亂碼, 在網路上花好幾天找解決方法, 但我都設不起來,
我就想下載新版SmartUpload, 後來才發現連SmartUpload網站都消
失了, SmartUpload大概也不會有人更新了. 所以我改用apache
的fileupload , 而且它還持續在更新中. 下面文章是我從各家好手
中的文章試出來, 然後匯整在一起來. 希望能幫大家的忙.
因為找資料試程式真的很辛苦.

一. 先到apache 網站下載 io 及 fileupload 元件
解壓縮後放到C:\Tomcat\webapps\ROOT\WEB-INF\lib 目錄中,
接著重開tomcat 就算成功完裝了.




二.測試上傳功能

<html>
<head>
<title>檔案上傳</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<b>檔案上傳</b></font></p>

<form name="UploadForm" enctype="multipart/form-data" method="post" action="test2.jsp">
<input type="file" name="File1" size="20" maxlength="20"> <br>
<input type="file" name="File2" size="20" maxlength="20"> <br>
<input type="submit"value="上傳">
</form>

</body>
</html>




接收上傳的頁面

<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.util.regex.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>

<%@page contentType="text/html;charset=UTF-8"%>
<%
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");

String enc = System.getProperty("file.encoding");

out.println(enc);
%>
<html>
<head>
<title>文件上傳處理頁面</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<%

DiskFileUpload fu = new DiskFileUpload();

fu.setSizeMax(2*1024*1024);

fu.setSizeThreshold(4096);
//先處存到暫存區
fu.setRepositoryPath(application.getRealPath("/") + "temp/");
//開始上處
List fileItems = fu.parseRequest(request);
// 依序處理上傳文件
Iterator iter = fileItems.iterator();

//檢查上傳的檔案格式
String regExp=".+\\\\(.+)$";

//拒絕文件類型
String[] errorType={".exe",".com",".cgi",".asp"};
Pattern p = Pattern.compile(regExp);
while (iter.hasNext()) {
FileItem item = (FileItem)iter.next();
//如果是request item 就在這接收
if (item.isFormField()){
String name = item.getFieldName();
String value = item.getString();
out.println("name:"+item.getFieldName());
out.println("value:"+item.getString("UTF-8"));
}

//如果是上傳檔案, 就在這接收

if (!item.isFormField()) {
String name = item.getName();
long size = item.getSize();
if((name==null||name.equals("")) && size==0)
continue;
Matcher m = p.matcher(name);
boolean result = m.find();
if (result){
for (int temp=0;temp<errorType.length;temp++){
if (m.group(1).endsWith(errorType[temp])){
throw new IOException(name+": wrong type");
}
}
try{

//儲存檔案到指定位置


item.write(new File(application.getRealPath("/") + "temp/" + m.group(1)));

out.println(name+"  "+size+"<br>");
// out.println(new String(name.toString().getBytes(), "UTF-8")+"  "+size+"<br>");
}
catch(Exception e){
out.println(e);
}

%>
<TABLE class=text width=100% border=0>
<SCRIPT LANGUAGE="JavaScript">
function back(num)
{
num = num * (-1);

window.parent.frames[1].location.reload();
history.go(num);
}
</SCRIPT>

<TR>
<TD width="10%" >
<FORM METHOD="post">
<INPUT TYPE="button" VALUE="回上一頁" onClick="back(1)">

</FORM>
</TD>


</TR>
</table>
<%

}
else
{
throw new IOException("fail to upload");
}
}
}
%>
</body>
</html>

2008年10月5日 星期日

清除SQL 2005 資料庫 LOG

2008年9月30日 星期二

使用IReport 產生EXCEL檔的範例








JasperPrint jasperPrint;
JRResultSetDataSource jrds=null;
/* 帶參數進去給報表 */
Map map = new HashMap();
map.put("name","王小明");
Date d = new Date();
String Pdf_Name= (d.getYear()+1900)+"_"+(d.getMonth()+1)+"_"+d.getDate()+"_"+d.getHours()+"_"+d.getMinutes()+"_"+d.getSeconds();


try{
StrSQL = " SELECT SN, PRODUCT_TYPE, TC001, TD004, TD005, TD008, TB005_A, TA018_A, BAD_RATE_A, TA017_A, TB005_B, TA018_B, BAD_RATE_B, TA017_B, TB005_C, TA018_C, ";
StrSQL += " BAD_RATE_C, TA017_C, TB005_4, TA018_4, BAD_RATE_4, TA017_4, SUB_BAD_RATE ";
StrSQL += " FROM CARD_MOC013R ";
StrSQL += " ORDER BY PRODUCT_TYPE, TC001 ";
//out.println(StrSQL);

rs= stmt.executeQuery(StrSQL);


rs= stmt.executeQuery(StrSQL);
if(!rs.next()){
out.println("沒有資料,請重新查詢!!");
out.println("統計表");
}else{
rs.previous() ;
String fileName = application.getRealPath("MOC013R.jasper");
String outPath = application.getRealPath("MOC013R_"+Pdf_Name+".xls");
String outPath2 = application.getRealPath("MOC013R_"+Pdf_Name+".pdf");

File reportFile1 = new File(application.getRealPath("MOC013R.jasper"));

out.println("統計表_EXCEL版");



JasperPrint report = JasperFillManager.fillReport(fileName,map, new JRResultSetDataSource(rs));
JRAbstractExporter exporter = new JExcelApiExporter();
FileOutputStream output = new FileOutputStream(outPath);

exporter.setParameter(JRExporterParameter.JASPER_PRINT, report);
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, false);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, output);
exporter.exportReport();
output.close();

JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportFile1.getPath());
jasperPrint = JasperFillManager.fillReport(jasperReport,map, new JRResultSetDataSource(rs));

JasperPrintManager.printReportToPdfFile(jasperPrint, outPath2);
/* 把報表轉換成 PDF, 給定 ( RecordSet, 輸出路徑 ) */
JasperExportManager.exportReportToPdfFile(jasperPrint,outPath2);
}

/* 連線關閉 */
} catch (JRException e) {
e.printStackTrace();
}

ireport 的四則運算

IReport 說好用也好用,說難用也很難用!!
它的功能很強,不輸水晶,但操作起來並不直覺。
但習慣後還真不能沒有它。雖然它讓我吃盡苦頭。
如下面是兩數相除,要用下面的語法
new java.lang.Float( ($V{SUM_TA018_C_1}.floatValue()) /($V{SUM_TB005_C_1}.floatValue()) )

如下面僅僅是兩個數相加
(new BigDecimal( Double.parseDouble($V{SUM_week_1_6} +"") +Double.parseDouble($V
{SUM_week_2_4}+"") ))

這個是Boolean判斷式的寫法
new Boolean($V{REPORT_COUNT}.intValue() % 2 == 0)

這是if 判斷的寫法
$F{quantity} == null ? "No data" : String.valueOf($F{quantity})

在IReport 中的四則運算, 不能只單純使用數目的加減乘除, 所以如果忘記或不熟加減乘除的寫法,
可以照下面圖片, 去產生語法範例, 注意喔, 它僅僅是範例, 所以還有改寫成要 去產生語法範例, 注意喔, 它僅僅是範例, 所以還有改寫成要操作的運算式, 在報表中使用.