package dbConnection;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import jxl.Workbook;
import jxl.write.Alignment;
import jxl.write.Colour;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class jdbcmysql {
private Connection con = null; // Database objects
// 連接object
private Statement stat = null;
// 執行,傳入之sql為完整字串
private ResultSet rs = null;
// 結果集
private PreparedStatement pst = null;
// 執行,傳入之sql為預儲之字申,需要傳入變數之位置
// 先利用?來做標示
public jdbcmysql() {
}
// 建立table的方式
// 可以看看Statement的使用方式
public void createTable() {
String createdbSQL = "CREATE TABLE User (" + " id INTEGER "
+ " , name VARCHAR(20) " + " , passwd VARCHAR(20))";
try {
stat = con.createStatement();
stat.executeUpdate(createdbSQL);
} catch (SQLException e) {
System.out.println("CreateDB Exception :" + e.toString());
} finally {
Close();
}
}
// 新增資料
// 可以看看PrepareStatement的使用方式
public void insertTable(String name, String passwd) {
String insertdbSQL = "insert into User(id,name,passwd) "
+ "select ifNULL(max(id),0)+1,?,? FROM User";
try {
pst = con.prepareStatement(insertdbSQL);
pst.setString(1, name);
pst.setString(2, passwd);
pst.executeUpdate();
} catch (SQLException e) {
System.out.println("InsertDB Exception :" + e.toString());
} finally {
Close();
}
}
// 刪除Table,
// 跟建立table很像
public void dropTable() {
String dropdbSQL = "DROP TABLE User ";
try {
stat = con.createStatement();
stat.executeUpdate(dropdbSQL);
} catch (SQLException e) {
System.out.println("DropDB Exception :" + e.toString());
} finally {
Close();
}
}
/**
* 取得 Oracle連線conn
*
* @return
* @throws IOException
* @throws ClassNotFoundException
* @throws SQLException
*/
public static Connection OracleConn() throws IOException,
ClassNotFoundException, SQLException {
// Oracle 正式機
}
/**
* 取得 MSSQL連線conn
*
* @return
* @throws IOException
* @throws ClassNotFoundException
* @throws SQLException
*/
public static Connection MSSQLConn() throws IOException,
ClassNotFoundException, SQLException {
}
/**
* 取得 Oracle連線conn
*
* @return
* @throws IOException
* @throws ClassNotFoundException
* @throws SQLException
*/
public static Connection OracleConnTest() throws IOException,
ClassNotFoundException, SQLException {
}
/**
* 取得 MSSQL連線conn
*
* @return
* @throws IOException
* @throws ClassNotFoundException
* @throws SQLException
*/
public static Connection MSSQLConnTest() throws IOException,
ClassNotFoundException, SQLException {
}
// 查詢資料
// 可以看看回傳結果集及取得資料方式
public static ResultSet MSSelectTable(String Comm) throws IOException,
SQLException, ClassNotFoundException {
Connection connectino = null; // Database objects
// 連接object
Statement statement = null;
// 執行,傳入之sql為完整字串
ResultSet resultSet = null;
connectino = MSSQLConn();
statement = connectino.createStatement();
// 取繳款書統計使用數量中,有使用的日期。
resultSet = statement.executeQuery(Comm);
return resultSet;
}
public static Integer MSTableCount(String Comm) throws IOException,
SQLException, ClassNotFoundException {
Connection connectino = null; // Database objects
// 連接object
Statement statement = null;
// 執行,傳入之sql為完整字串
ResultSet resultSet = null;
connectino = MSSQLConn();
statement = connectino.createStatement();
// 取繳款書統計使用數量中,有使用的日期。
resultSet = statement.executeQuery(Comm);
return resultSet.getInt(1);
}
public static ResultSet ORSelectTable(String Comm) throws IOException,
SQLException, ClassNotFoundException {
Connection connectino = null; // Database objects
// 連接object
Statement statement = null;
// 執行,傳入之sql為完整字串
ResultSet resultSet = null;
connectino = OracleConn();
statement = connectino.createStatement();
// 取繳款書統計使用數量中,有使用的日期。
resultSet = statement.executeQuery(Comm);
return resultSet;
}
public static void ExportEXL(String FileName, String inputp[][], int rows,
int columns) {
try {
/*
* 1. 建立Workbook 也就是整份的Excel檔案,可指定檔名。 WritableWorkbook workbook =
* Workbook.createWorkbook(new File("test.xls"));
*/
System.out.println("建立Workbook!");
WritableWorkbook workbook = Workbook.createWorkbook(new File(
FileName + ".xls"));
/*
* 2. 建立Sheet 也就是每個Excel檔案下面可以跳tag的sheet表。 WritableSheet sheet =
* workbook.createSheet("My Sheet", 0); 第一個參數是sheet
* name,第二個參數是第幾張sheet,從0開始。
*/
System.out.println("建立Sheet!");
WritableSheet sheet = workbook.createSheet("First Sheet", 0);
// 3. 設定Cell格式(可省略,就會是預設的格式)
System.out.println("設定Cell格式!");
WritableCellFormat cellFormat = new WritableCellFormat();
WritableFont myFont = new WritableFont(WritableFont
.createFont("標楷體"), 12);
cellFormat.setFont(myFont); // 指定字型
myFont.setColour(Colour.BLACK);
// cellFormat.setBackground(Colour.LIGHT_BLUE); // 背景顏色
cellFormat.setAlignment(Alignment.CENTRE); // 對齊方式
// 4. 增加一個文字儲存格Cell
System.out.println("建立EXCEL內的title!");
Label label = new Label(0, 0, "Table Name");
System.out.println("建立EXCEL內的內文!");
for (int c = 0; c < columns; c++) {
for (int r = 0; r < rows; r++) {
label = new Label(c, r, inputp[c][r]);
sheet.addCell(label);
}
}
// 5. 寫入及結束文件
workbook.write(); // 寫入
System.out.println("寫入完成!");
workbook.close(); // 關閉
System.out.println("關閉完成!");
} catch (IOException e) {
System.out.println("EXL IOException:" + e.toString());
} catch (Exception e) {
System.out.println("EXL Exception:" + e.toString());
}
}
// 完整使用完資料庫後,記得要關閉所有Object
// 否則在等待Timeout時,可能會有Connection poor的狀況
private void Close() {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (stat != null) {
stat.close();
stat = null;
}
if (pst != null) {
pst.close();
pst = null;
}
} catch (SQLException e) {
System.out.println("Close Exception :" + e.toString());
}
}
public static String[][] RStoArray(ResultSet resultSet, String rsData[][])
throws SQLException {
ResultSetMetaData rsmd = resultSet.getMetaData();
int columnsCount = rsmd.getColumnCount();
int rowCount = 0;
String[][] temp = new String[columnsCount][100000];
while (resultSet.next()) {
for (int r = 1; r <= columnsCount; r++) {
String CN = rsmd.getColumnName(r);
temp[r - 1][rowCount] = resultSet.getString(CN);
}
rowCount += 1;
}
rsData = new String[columnsCount][rowCount];
for (int i = 0; i < temp.length; i++) {
System.arraycopy(temp[i], 0, rsData[0], i, rowCount);
}
// for (int c = 0; c < rowCount; c++) {
// for (int r = 0; r < rows; r++) {
// inputp[][] = temp[][] ;
// }
// }
int a = 0;
a++;
return rsData;
}
// 查詢所有table名稱和數量
public void SelectMSSQLAllTableNameAndCount() throws IOException,
ClassNotFoundException {
try {
// MSSQL select all table name
String SQLCommStr = "Select table_name From information_schema.tables Where table_type='BASE TABLE'";
// Oracle select all table name
// String SQLCommStr = "Select table_name From User_Tables Order by table_name"
ResultSet resultSet = null;
System.out.println("SQL指令撈資料!");
resultSet = MSSelectTable(SQLCommStr);
System.out.println("SQL指令撈資料[完成]!");
// 轉換
ResultSetMetaData rsmd = resultSet.getMetaData();
int columnsCount = rsmd.getColumnCount();
// int rowsCount = MSTableCount()
String[][] rsData = new String[columnsCount][];
rsData = RStoArray(resultSet, rsData);
// 取得資料庫資訊
System.out.println("轉換完成!");
String[] Count = new String[rsData[0].length];
String[] Time = new String[rsData[0].length];
for (int i = 0; i < rsData[0].length; i++) {
SQLCommStr = "Select Count(*) From " + rsData[0][i];
long StartTime = System.currentTimeMillis(); // 取出目前時間
resultSet = MSSelectTable(SQLCommStr);
long ProcessTime = System.currentTimeMillis() - StartTime; // 計算處理時間
Time[i] = Long.toString(ProcessTime) + " ms" ;
// 轉換
rsmd = resultSet.getMetaData();
columnsCount = rsmd.getColumnCount();
// int rowsCount = MSTableCount()
String[][] tempCount = new String[columnsCount][];
System.out.println(i + 1 + " : " + rsData[0][i] + " OK! - " + Time[i]);
tempCount = RStoArray(resultSet, tempCount);
// 取得資料庫資訊
Count[i] = tempCount[0][0];
}
String[][] printStr = new String[3][rsData[0].length];
System.arraycopy(rsData[0], 0, printStr[0], 0, rsData[0].length);
System.arraycopy(Count, 0, printStr[1], 0, rsData[0].length);
System.arraycopy(Time, 0, printStr[2], 0, rsData[0].length);
ExportEXL("20120508 MSSQL", printStr, rsData[0].length, 3);
System.out.println("產出完成 OK!");
// for (int i=0 ; i<=rsData)
// SQLCommStr = "Select Count(*) From";
} catch (IOException e) {
System.out.println("EXL IOException:" + e.toString());
} catch (Exception e) {
System.out.println("EXL Exception:" + e.toString());
}
}
public void SelectOracleAllTableNameAndCount() throws IOException,
ClassNotFoundException {
try {
// MSSQL select all table name
//String SQLCommStr = "Select table_name From information_schema.tables Where table_type='BASE TABLE'";
// Oracle select all table name
String SQLCommStr = "Select table_name From User_Tables Order by table_name" ;
ResultSet resultSet = null;
System.out.println("SQL指令撈資料!");
resultSet = ORSelectTable(SQLCommStr);
System.out.println("SQL指令撈資料[完成]!");
// 轉換
ResultSetMetaData rsmd = resultSet.getMetaData();
int columnsCount = rsmd.getColumnCount();
// int rowsCount = MSTableCount()
String[][] rsData = new String[columnsCount][];
rsData = RStoArray(resultSet, rsData);
// 取得資料庫資訊
System.out.println("轉換完成!");
String[] Count = new String[rsData[0].length];
String[] Time = new String[rsData[0].length];
for (int i = 0; i < rsData[0].length; i++) {
SQLCommStr = "Select Count(*) From " + rsData[0][i];
long StartTime = System.currentTimeMillis(); // 取出目前時間
resultSet = ORSelectTable(SQLCommStr);
long ProcessTime = System.currentTimeMillis() - StartTime; // 計算處理時間
Time[i] = Long.toString(ProcessTime) + " ms";
// 轉換
rsmd = resultSet.getMetaData();
columnsCount = rsmd.getColumnCount();
// int rowsCount = MSTableCount()
String[][] tempCount = new String[columnsCount][];
System.out.println(i + 1 + " : " + rsData[0][i] + " OK! - " + Time[i]);
tempCount = RStoArray(resultSet, tempCount);
// 取得資料庫資訊
Count[i] = tempCount[0][0];
}
String[][] printStr = new String[3][rsData[0].length];
System.arraycopy(rsData[0], 0, printStr[0], 0, rsData[0].length);
System.arraycopy(Count, 0, printStr[1], 0, rsData[0].length);
System.arraycopy(Time, 0, printStr[2], 0, rsData[0].length);
ExportEXL("20120508 Oracle", printStr, rsData[0].length, 3);
System.out.println("產出完成 OK!");
// for (int i=0 ; i<=rsData)
// SQLCommStr = "Select Count(*) From";
} catch (IOException e) {
System.out.println("EXL IOException:" + e.toString());
} catch (Exception e) {
System.out.println("EXL Exception:" + e.toString());
}
}
public static void main(String[] args) throws IOException,
ClassNotFoundException {
// 測看看是否正常
jdbcmysql SQL = new jdbcmysql();
SQL.SelectMSSQLAllTableNameAndCount();
SQL.SelectOracleAllTableNameAndCount();
}
}
2012年5月7日 星期一
存取資料庫+讀寫EXCEL
2012年4月18日 星期三
AWT、SWT and Swing 的區別
AWT,SWT和Swing的區別
2009-08-07 10:02
GUI 應用程序是軟件的一種主要類型,所以Java的GUI庫應該是標準化並被集成到JRE平台中的。然而不同的操作系統有不同的GUi風格和組件集。有一些組件在所以平台上有相似的觀感。這些共有組件如按鈕,標籤,文本域,單選框等被稱為標準組件。不同的GUI工具集提供了不同的組件集。GUI工具集總是遵循不同的原則來選擇組件類型和特徵以實現。考察一個工具集,有兩個不同的要素:組件類型和組件特徵。 Terms 首先讓我圖解兩個數學概念:最大公約數和最小公倍數。三個集合代表不同的操作系統。相交的部分是最大公約數,合併的部分是最小公倍數。 現在讓我們來考察Java GUI工具集AWT,SWT和Swing的區別 AWT AWT 組件集遵循最大公約數原則,即AWT只擁有所有平台上都存在的組件的公有集合。所以你在AWT中無法獲取如表或樹等高級組件,因為它們在某些平台上不支持。AWT的組件特徵同樣遵循這一原則。它只提高平台上公有的特徵。例如AWT按鈕不能附著圖片,因為在Motif平台上,按鈕是不支持圖片的。 由於它低劣的組件集和特徵,AWT無法吸引開發者。它是Sun不推薦使用的,只是為了確保向下兼容和支持Swing。 SWT SWT 最初的目標之一是為了提供比AWT更為豐富的組件集。它遵循最小公倍數原則以提供一個各個平台上包含的組件的並集。思路是如果一個組件在某個平台上包含,那麼SWT就會包裝它並用java代碼和JNI來調用它。如果一個組件在某一平台上不存在,它就會用繼承並繪製Composite的方式來模擬組件。一個SWT Composite類似於AWT的Canvas。以這種方式,SWT提供了較AWT更為豐富的組件集。值得指出的是SWT的JNI封裝不同於AWT,它的模擬也不同於Swing。 在組件特徵方面,SWT類似於AWT。它遵循最小公倍數原則。在早期的SWT版本中,SWT按鈕因為和AWT同樣的原因不支持附著圖片。在之後的版本中,許多缺失的特徵採用模擬的方式補全。但仍有許多特徵無法採用純粹的模擬實現。SWT將組件的控制交給本地操作系統。它難以擴展。只有例如圖形裝飾等特徵可以藉助模擬繪製來自定義實現。所以嚴格意義上將,SWT組件的組件集和特徵因其難於擴展而不如Swing來得豐富。 Swing Swing 是三者中最強大和靈活的。在組件類型上,它遵循最大公約數原則。由於Swing可以控制自身GUI系統的全部並有很好的可擴展和靈活性,它幾乎可以創建所有你想像得到的組件。唯一的限制是它的AWT容器。在Swing中你還不能跨平台地實現真正的透明化和不規則矩形窗口,因為Swing依賴於AWT頂層容器例如Applet, Window, Frame and Dialog等。除此之外,Swing幾乎實現了所有平台上的標準組件。 在組件特徵上,Swing遵循最小公倍數原則。它擁有所有平台上可提供的組件特徵。不僅如此,你還可以繼承已有的Swing組件並添加新的特性。 上面比較主要是在API級別上的。讓我們將比較的焦點轉移到實現細節上。AWT,SWT和Swing的區別是Swing是純Java實現,而SWT和AWT 是Java和JNI的混合。當然,它們的目標都是相同的,提供一個跨平台的APIs。然而為了達到這一點,SWT和AWT不得不犧牲一些組件和特性以提供一個通用的APIs。 AWT 一個AWT組件通常是一個包含了對等體接口類型引用的組件類。這個引用指向本地對等體實現。舉java.awt.Label為例,它的對等體接口是LabelPeer。LabelPeer是平台無關的。在不同平台上,AWT提供不同的對等體類來實現LabelPeer。在Windows上,對等體類是WlabelPeer,它調用JNI來實現label的功能。這些JNI方法用C或C++編寫。它們關聯一個本地的label,真正的行為都在這裡發生。作為整體,AWT組件由AWT組件類和AWT對等體提供了一個全局公用的API給應用程序使用。一個組件類和它的對等體接口是平台無關的。底層的對等體類和JNI代碼是平台相關的。 SWT SWT也使用JNI的方法論來實現。但細節不同於AWT。SWT的擁護者聽到人們拿SWT和AWT相提並論可是會很生氣的,Steve Northover,SWT之父,就曾為此抱怨過。 沒錯,它們是不同的。讓我們深究SWT的代碼。在SWT中,各個平台上唯一相同的部分是組件的接口,是類和方法的定義簽名。所有的底層代碼都是平台差異的。SWT為每個平台提供了OS類。這個類用JNI封裝了許多本地APIs。SWT組件類通過把這些JNI方法黏合在一起提供一個有意義的功能。 例如,在Windows上,文本域的選擇是由一個系統調用處理的。這個系統調用在Windows的OS類中作為一個本地方法實現。所以在Windows平台的Text的setSelection方法中只用到了一個JNI調用。 然而,在motif上,文本域的選擇包含兩個本地調用。SWT就在motif的OS類中實現了兩個調用。所以在motif上組件類需要作兩次調用來實現文本的選擇。 現在你應該能看出SWT和AWT的最大不同了,它們使用了不同的對等體編程方式來消除平台差異。SWT用java代碼或有JNI實現的java對等體來黏合系統調用。而AWT把代碼包含在對等體中,使情況復雜化了,我個人覺得SWT的方法更加明智。 SWING 到了Swing這裡,一切就變得清晰和直接了。除了頂層容器,Swing的實現不依賴於具體平台。它掌管了所有的控制和資源。Swing所需要的是事件輸入來驅動系統,以及承接自頂層AWT容器的圖形處理,字體和顏色。普通的Swing組件可以看作是AWT容器的一塊邏輯區域。它們並沒有註冊對等體。所有添加到同一頂層容器的Swing組件共享它的AWT對等體以獲取系統資源,如字體,圖形處理等。Swing將組件自己的數據結構存儲在JVM的空間中。它完全由自己管理畫圖處理,事件分發和組件佈局。 由於AWT和SWT都持有對本地組件的引用,它們必須以正確的方式釋放這些引用以避免內存洩露和JVM崩潰。AWT將絕大多數資源管理任務交給系統,將開發者從單調乏味的資源管理中解救出來。然而這使得AWT的實現複雜化了。一旦它實現了,開發者很少有機會犯錯誤並使他們的程序崩潰。 SWT用的是另一種方法。大體上,SWT讓開發者自己來管理資源。它的一條著名的規則是:誰創建,誰釋放。因此開發者必須謹慎地顯式調用dispose方法釋放每一個由他創建的組件和資源。這簡化了SWT的實現模型,但把開發者擺在了因錯誤編碼而易於造成程序崩潰這一風險之上。 模擬方式的區別 SWT和Swing在它們的實現上都使用了模擬。SWT只模擬平台上缺失的組件。區別是SWT的模擬更像是AWT的Canvas實現的模擬。SWT的Composite類有它自己在操作系統中相應的對等體。它從自己的對等體中獲得所有它所需要的資源如圖形處理的對象,字體和顏色等。它直接從操作系統獲取所有的事件並進行處理。然而,Swing組件在操作系統中沒有相應的對等體。它只是一塊頂層容器中的邏輯區域,實際上它從頂層容器的對等體中藉用資源。Swing的事件並不是底層系統產生的事件。它們實際是由頂層容器處理AWT事件所產生的偽事件。我們會在稍後的事件部分中詳細介紹它。 圖形層結構 另一個不同之處是Swing組件的z-order系統是來自於AWT組件的。如上所述,Swing組件與頂層AWT容器共享一個對等體。因此,Swing組件也和頂層容器有相同的z-order。SWT和AWT組件都有不同於頂層容器的z-order,通常是高於頂層容器。故而如果AWT組件和Swing組件混合在一起的話,Swing組件將可能被AWT組件遮住。當操作系統開始更新UI的時候,頂層容器和Swing組件總是先於AWT組件繪製。當它們完成繪製,AWT組件會覆蓋Swing可能繪製過的地方。因此不提倡Swing和AWT組件的混用。如果有一個浮動的Swing組件如菜單,AWT組件很可能遮蓋菜單。以上是AWT,SWT和Swing的區別的介紹 |
2012年4月9日 星期一
[JSP]透過Java語法來取URL的方式
網址如下
http://localhost:8080/lams/tool/lanb11/authoring.do?toolContentID=25713&contentFolderID=402881002b1818e5012b1841830e0005
透過Java語法來取URL的方式:
request.getRequestURL().toString():
http://localhost:8080/lams/tool/lanb11/authoring.do
request.getQueryString():
toolContentID=25713&contentFolderID=402881002b1818e5012b1841830e0005
所以要透過Java語法來取URL整串語法為:
request.getRequestURL().toString()+"?"+request.getQueryString
http://localhost:8080/lams/tool/lanb11/authoring.do?toolContentID=25713&contentFolderID=402881002b1818e5012b1841830e0005
request.getRequestURL().toString():
http://localhost:8080/lams/tool/lanb11/authoring.do
request.getQueryString():
toolContentID=25713&contentFolderID=402881002b1818e5012b1841830e0005
所以要透過Java語法來取URL整串語法為:
request.getRequestURL().toString()+"?"+request.getQueryString
2011年12月28日 星期三
兩個迴圈解決的九九乘法表
public static void main(String[] args) throws IOException {
for (int j=0 ; j<18 ; j++){
for (int i =2 ; i<=5 ; i++){
if (j<9){
System.out.print(i + " * " + (j%9+1) + " = " + i*(j%9+1) + "\t");
}else{
System.out.print((i+4) + " * " + (j%9+1) + " = " + (i+4)*(j%9+1) + "\t");
}
}
if (j==8){
System.out.println();
}
System.out.println();
}
}
for (int j=0 ; j<18 ; j++){
for (int i =2 ; i<=5 ; i++){
if (j<9){
System.out.print(i + " * " + (j%9+1) + " = " + i*(j%9+1) + "\t");
}else{
System.out.print((i+4) + " * " + (j%9+1) + " = " + (i+4)*(j%9+1) + "\t");
}
}
if (j==8){
System.out.println();
}
System.out.println();
}
}
2011年12月16日 星期五
設定字體 java.awt.Font
.setFont(new Font("新細明體", Font.PLAIN, 12));
其中 Font.XXXX; XXX=
PLAIN 一般
BOLD 粗體
ITALIC 協體
BOLD_ ITALIC 粗斜體
其中 Font.XXXX; XXX=
PLAIN 一般
BOLD 粗體
ITALIC 協體
BOLD_ ITALIC 粗斜體
2011年12月15日 星期四
javax.swing.JTable.setAutoResizeMode
setAutoResizeMode
public void setAutoResizeMode(int mode)
當調整表的大小時,設置表的自動調整網要。
參數:
mode - 5 個合法值之一:
AUTO_RESIZE_OFF
初始:完全沒有調整
調整:不會影響其他行
AUTO_RESIZE_NEXT_COLUMN
初始:平均展開
調整:不會影響其他行
AUTO_RESIZE_SUBSEQUENT_COLUMNS
初始:平均展開
調整:調整哪邊影響哪邊之後的columns
AUTO_RESIZE_LAST_COLUMN
初始:平均展開
調整:調整僅影響右邊之後的columns
AUTO_RESIZE_ALL_COLUMNS
初始:平均展開
調整:調整兩邊columns皆會影響
另請參見:
2011年12月14日 星期三
民國轉西元
public static String convertTWDateToADDate(String twDate) {
String addate = "";
if (twDate.length() != 7)
return "";
try {
int yy = Integer.valueOf(twDate.substring(0, 3)).intValue() + 1911;
String year = String.valueOf(yy);
String month = twDate.substring(3, 5);
String day = twDate.substring(5, 7);
addate = year + "-" + month + "-" + day;
} catch (Exception ignore) {
addate = "";
}
return addate;
}
String addate = "";
if (twDate.length() != 7)
return "";
try {
int yy = Integer.valueOf(twDate.substring(0, 3)).intValue() + 1911;
String year = String.valueOf(yy);
String month = twDate.substring(3, 5);
String day = twDate.substring(5, 7);
addate = year + "-" + month + "-" + day;
} catch (Exception ignore) {
addate = "";
}
return addate;
}
2011年12月12日 星期一
秀出路徑下的所有檔案名稱列表
public static void PrintDirFileList(String dir){
//記得Windows上面要加上雙斜線喔
File file = new File(dir);
String[] filelist = file.list();
for (int i = 0; i < filelist.length ; i++){
File tempFile = new File(file.getPath() + "\\" + filelist[i]);
if (tempFile.isDirectory()){
// 若是資料夾則繼續搜尋列表
PrintDirFileList(tempFile.getPath());
}else{
// 檔案路徑
System.out.println(tempFile.getPath());
// 若否則列出檔案名稱
System.out.println(tempFile.getName());
}
}
}
2011年11月27日 星期日
URL 傳值中文編碼&解碼
// 網址
String tempStr = "http://wwwtest.etax.nat.gov.tw/newReport/createReport/Report35_n_Generator.jsp?reportName=TAX35_n&p_cat=351_%E5%9C%8B%E9%9A%9B%E9%81%8B%E8%BC%B8%20&hsn_cd=A&ban=47249755&dst_cd=001&dst_cd_m=03&dst_nm=%E8%B2%A1%E6%94%BF%E9%83%A8%E8%87%BA%E5%8C%97%E5%B8%82%E5%9C%8B%E7%A8%85%E5%B1%80&town_cd=00&be_name=%E7%A5%9E%E9%80%9A%E9%9B%BB%E8%85%A6%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&be_add=%E8%87%BA%E5%8C%97%E5%B8%82%E5%85%A7%E6%B9%96%E5%8D%80%E6%B8%AF%E5%A2%98%E9%87%8C%E5%A0%A4%E9%A0%82%E5%A4%A7%E9%81%93%EF%BC%92%E6%AE%B5%EF%BC%91%EF%BC%98%EF%BC%97%E8%99%9F&be_owner=%E8%8B%97%E8%B1%90%E5%BC%B7&ear_name=testttt&ear_add=testt&ear_owner=twestt&ear_yyy=099&ear_mm=09&gd_yyy=099&gd_mm=09&gd_dd=09&pay_yyy=099&pay_mm=09&pay_dd=18&pw_amt=4277590&b_yy=99&b_mm=09&barcode1=9909226AE&barcode2=A030047249755990909&barcode3=3513J0004277590&tax_cd=35&sub_tax_cd=1&print_date=2011%E5%B9%B411%E6%9C%8828%E6%97%A5%2011%E6%99%8241%E5%88%8654%E7%A7%92&fee=6&area1=%E8%87%BA%E5%8C%97%E5%B8%82&area2=%E4%BF%A1%E7%BE%A9%E5%8D%80&cha=%E2%96%A0&chb=%E2%96%A1&chc=%E2%96%A1&chd=%E2%96%A1&che=20&auto_amt_n=%E2%96%A1&auto_amt_y=%E2%96%A1&be_tel=0987546213&chf=&pw_amt_n=4%2C277%2C590" ;
// 先將參數和網址分開
String Str1[] = tempStr.split("\\?");
// 導向頁面
String ProStr[] = Str1[0].split("/");
System.out.println(ProStr[ProStr.length -1]);
// 各參數
String ValuesStr[] = Str1[1].split("&");
for (int i=0 ; i<ValuesStr.length ; i++){
if (ValuesStr[i].indexOf('%') == -1){
System.out.println(ValuesStr[i]);
}else{
String innerStr = URLDecoder.decode(ValuesStr[i],"UTF-8");
System.out.println(innerStr);
}
}
String tempStr = "http://wwwtest.etax.nat.gov.tw/newReport/createReport/Report35_n_Generator.jsp?reportName=TAX35_n&p_cat=351_%E5%9C%8B%E9%9A%9B%E9%81%8B%E8%BC%B8%20&hsn_cd=A&ban=47249755&dst_cd=001&dst_cd_m=03&dst_nm=%E8%B2%A1%E6%94%BF%E9%83%A8%E8%87%BA%E5%8C%97%E5%B8%82%E5%9C%8B%E7%A8%85%E5%B1%80&town_cd=00&be_name=%E7%A5%9E%E9%80%9A%E9%9B%BB%E8%85%A6%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&be_add=%E8%87%BA%E5%8C%97%E5%B8%82%E5%85%A7%E6%B9%96%E5%8D%80%E6%B8%AF%E5%A2%98%E9%87%8C%E5%A0%A4%E9%A0%82%E5%A4%A7%E9%81%93%EF%BC%92%E6%AE%B5%EF%BC%91%EF%BC%98%EF%BC%97%E8%99%9F&be_owner=%E8%8B%97%E8%B1%90%E5%BC%B7&ear_name=testttt&ear_add=testt&ear_owner=twestt&ear_yyy=099&ear_mm=09&gd_yyy=099&gd_mm=09&gd_dd=09&pay_yyy=099&pay_mm=09&pay_dd=18&pw_amt=4277590&b_yy=99&b_mm=09&barcode1=9909226AE&barcode2=A030047249755990909&barcode3=3513J0004277590&tax_cd=35&sub_tax_cd=1&print_date=2011%E5%B9%B411%E6%9C%8828%E6%97%A5%2011%E6%99%8241%E5%88%8654%E7%A7%92&fee=6&area1=%E8%87%BA%E5%8C%97%E5%B8%82&area2=%E4%BF%A1%E7%BE%A9%E5%8D%80&cha=%E2%96%A0&chb=%E2%96%A1&chc=%E2%96%A1&chd=%E2%96%A1&che=20&auto_amt_n=%E2%96%A1&auto_amt_y=%E2%96%A1&be_tel=0987546213&chf=&pw_amt_n=4%2C277%2C590" ;
// 先將參數和網址分開
String Str1[] = tempStr.split("\\?");
// 導向頁面
String ProStr[] = Str1[0].split("/");
System.out.println(ProStr[ProStr.length -1]);
// 各參數
String ValuesStr[] = Str1[1].split("&");
for (int i=0 ; i<ValuesStr.length ; i++){
if (ValuesStr[i].indexOf('%') == -1){
System.out.println(ValuesStr[i]);
}else{
String innerStr = URLDecoder.decode(ValuesStr[i],"UTF-8");
System.out.println(innerStr);
}
}
2011年11月22日 星期二
Error:The literal 1000000000000 of type int is out of range
明明是宣告 long 的型態,卻出現 The literal 1000000000000 of type int is out of range 的訊息
基本类型:byte 二进制位数:8
包装类:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308
基本类型:char 二进制位数:16
包装类:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535
原來在 1000000000000後面加上1000000000000L就解決了

包装类:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308
基本类型:char 二进制位数:16
包装类:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535
原來在 1000000000000後面加上1000000000000L就解決了
2011年11月21日 星期一
計算程式執行時間 - System.currentTimeMillis()
long StartTime = System.currentTimeMillis(); // 取出目前時間
// ==============================
// 你的程式
// ==============================
long ProcessTime = System.currentTimeMillis() - StartTime; // 計算處理時間
System.out.println( ProcessTime); // 累積計算時間
http://mqjing.blogspot.com/2007/03/java.html
// ==============================
// 你的程式
// ==============================
long ProcessTime = System.currentTimeMillis() - StartTime; // 計算處理時間
System.out.println( ProcessTime); // 累積計算時間
http://mqjing.blogspot.com/2007/03/java.html
2011年11月17日 星期四
數字格式化 to ("$$$,$$$,$$$")
public class TestCode {
public static void main(String[] args) {
// 先將字串轉成數字 再轉回字串
String str = Integer.toString(Integer.parseInt("-123567890")) ;
int k = 0 ;
if (str.indexOf(",") == -1) {
for (k = 0; k < Math.floor((str.length()-(1+k))/3); k++){
// System.out.println(k + " < " + Math.floor((str.length()-(1+k))/3));
// System.out.println("str.length() - (4*k+3): " + Integer.toString((str.length()-(4*k+3))));
// 取出第一個逗號以前的字串
String u = str.substring(0, str.length() - (4*k+3)) ;
if ( !u.equals("-")){ // 若前面的字串為 "-" ,則取消組合。
// 取出第一個逗號以後的字串
String l = str.substring(str.length() - (4*k+3)) ;
// 組合
str = u + ',' + l ;
}
}
}
// System.out.println(k + " < " + Math.floor((str.length()-(1+k))/3));
System.out.println(str);
}
}
public static void main(String[] args) {
// 先將字串轉成數字 再轉回字串
String str = Integer.toString(Integer.parseInt("-123567890")) ;
int k = 0 ;
if (str.indexOf(",") == -1) {
for (k = 0; k < Math.floor((str.length()-(1+k))/3); k++){
// System.out.println(k + " < " + Math.floor((str.length()-(1+k))/3));
// System.out.println("str.length() - (4*k+3): " + Integer.toString((str.length()-(4*k+3))));
// 取出第一個逗號以前的字串
String u = str.substring(0, str.length() - (4*k+3)) ;
if ( !u.equals("-")){ // 若前面的字串為 "-" ,則取消組合。
// 取出第一個逗號以後的字串
String l = str.substring(str.length() - (4*k+3)) ;
// 組合
str = u + ',' + l ;
}
}
}
// System.out.println(k + " < " + Math.floor((str.length()-(1+k))/3));
System.out.println(str);
}
}
2011年11月16日 星期三
String.equals()和String.equalsIgnoreCase()的區別
boolean | equals(Object anObject) 將此字元串與指定的物件比較。 |
boolean | equalsIgnoreCase(String anotherString) 將此 String 與另一個 String 比較,不考慮大小寫。 |
String.equals()會考慮大小寫,而String.equalsIgnoreCase()會忽略大小寫
2011年11月14日 星期一
JFrame 置中的方法
一個最簡單的方法就是先設定其大小,在設定相對位置:
setSize(800, 600);
setLocationRelativeTo(null);
另一個就是利用運算將中心點算出
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setSize(800, 600);
setLocation((d.width-getWidth())/2, (d.height-getHeight())/2);
setSize(800, 600);
setLocationRelativeTo(null);
另一個就是利用運算將中心點算出
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setSize(800, 600);
setLocation((d.width-getWidth())/2, (d.height-getHeight())/2);
2011年11月13日 星期日
搜尋特定目錄位置的檔案清單
import java.io.File;
import java.io.IOException;
public class TestCode {
public static void main(String[] args) {
//CreateDir();
String path = "D:/Documents/My Work/線上申辦/線上申辦 程式說明文件";
File f = new File(path);
if( f.exists()){ // 確認檔案路徑是否存在
if (f.isDirectory()){ // 確認是否為資料夾
String temp[] = f.list(); // 取出該路徑下檔案清單
for (int i =0 ; i<temp.length ; i++){
System.out.println(temp[i]);
String tempSplit[] = temp[i].split("\\.");
for (int j=0 ; j<tempSplit.length ; j++){
System.out.println(tempSplit[j]);
}
if (tempSplit[tempSplit.length-1].equals("doc")){
String si = path + "/" + temp[i];
// System.out.println(si);
File fi = new File(si);
String so = path + "/"+ tempSplit[0] + "." + tempSplit[1] + ".1." + tempSplit[3];
File fo = new File(so);
// System.out.println(so);
fi.renameTo(fo); // 將檔名更改
String s1[] = si.split("/");
String s2[] = so.split("/");
System.out.println(s1[s1.length-1] + " --> " + s2[s2.length-1]);
}
}
}
}
}
import java.io.IOException;
public class TestCode {
public static void main(String[] args) {
//CreateDir();
String path = "D:/Documents/My Work/線上申辦/線上申辦 程式說明文件";
File f = new File(path);
if( f.exists()){ // 確認檔案路徑是否存在
if (f.isDirectory()){ // 確認是否為資料夾
String temp[] = f.list(); // 取出該路徑下檔案清單
for (int i =0 ; i<temp.length ; i++){
System.out.println(temp[i]);
String tempSplit[] = temp[i].split("\\.");
for (int j=0 ; j<tempSplit.length ; j++){
System.out.println(tempSplit[j]);
}
if (tempSplit[tempSplit.length-1].equals("doc")){
String si = path + "/" + temp[i];
// System.out.println(si);
File fi = new File(si);
String so = path + "/"+ tempSplit[0] + "." + tempSplit[1] + ".1." + tempSplit[3];
File fo = new File(so);
// System.out.println(so);
fi.renameTo(fo); // 將檔名更改
String s1[] = si.split("/");
String s2[] = so.split("/");
System.out.println(s1[s1.length-1] + " --> " + s2[s2.length-1]);
}
}
}
}
}
2011年11月4日 星期五
建造指定目錄
/**
* 建造指定目錄
* 此方式會將vatrefund視為檔案= =?
*/
* 建造指定目錄
* 此方式會將vatrefund視為檔案= =?
*/
public static void CreateDir(){ System.out.println(); //String filePath = "WEB-INF/classes/com/hyweb/gip/vatrefund/123"; String filePath = "javagip/gipadmin/site/public/Data/vatReport/123"; File file = new File(filePath); if(!file.exists()) { file.getParentFile().mkdirs(); //File Delfile = new File(filePath); //Delfile.deleteOnExit(); try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
2011年11月3日 星期四
第一個Java程式的基本程式結構
http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/FirstJava.htm
首先請編輯一個HelloWorld.java的文字檔案,注意副檔名是*.java, 請記得主檔名,因為程式碼中要用到它,您的第一個程式是這樣的:
寫Java程式通常都是由定義「類別」開始,
"class"是Java 用來定義類別的關鍵字,
類別的名稱是HelloWorld,這與您所編輯的檔案(HelloWorld.java)主檔名必須相同,
在編寫Java程式 時,一個檔案中可撰寫數個類別,但是只能有一個"public" 類別, 而且檔案主檔名必須與這個"public"類別的名稱相同。
接下來看看 main() 方法(Method),它是Java程式的「進入點」 (Entry point), 程式的執行是由進入點開始的,它一定是個"public" 成員(Member), 這樣它才可以被呼叫;由於它不需要產生物件就要能被執行,所以它必須是個"static"成員。
(public與static的觀念都是物件導向程式上的觀念,之後討論類別與物件時會再看到)
"void"表示這個方法執 行結束後不傳回任何值,Java程式的主 方法不需傳回任何值,所以一律使用void;main()是Java程式的 主方法名稱,其中"String[] args"是 命令列引數 (Command line argument),可以在執行程式時取得使用者指定的相關參數,目前雖然您不使用,但仍要撰寫它,這是規定,args只是個參數名稱,可以隨意命名。你 也可以寫成"String args[]",這是彷造C語言的語法,但Java中偏好"String[] args"的寫法。
首先請編輯一個HelloWorld.java的文字檔案,注意副檔名是*.java, 請記得主檔名,因為程式碼中要用到它,您的第一個程式是這樣的:
- HelloWorld.java
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello! World!"); } }
寫Java程式通常都是由定義「類別」開始,
"class"是Java 用來定義類別的關鍵字,
類別的名稱是HelloWorld,這與您所編輯的檔案(HelloWorld.java)主檔名必須相同,
在編寫Java程式 時,一個檔案中可撰寫數個類別,但是只能有一個"public" 類別, 而且檔案主檔名必須與這個"public"類別的名稱相同。
接下來看看 main() 方法(Method),它是Java程式的「進入點」 (Entry point), 程式的執行是由進入點開始的,它一定是個"public" 成員(Member), 這樣它才可以被呼叫;由於它不需要產生物件就要能被執行,所以它必須是個"static"成員。
(public與static的觀念都是物件導向程式上的觀念,之後討論類別與物件時會再看到)
"void"表示這個方法執 行結束後不傳回任何值,Java程式的主 方法不需傳回任何值,所以一律使用void;main()是Java程式的 主方法名稱,其中"String[] args"是 命令列引數 (Command line argument),可以在執行程式時取得使用者指定的相關參數,目前雖然您不使用,但仍要撰寫它,這是規定,args只是個參數名稱,可以隨意命名。你 也可以寫成"String args[]",這是彷造C語言的語法,但Java中偏好"String[] args"的寫法。
2011年10月31日 星期一
Class.forName()
在一些應用中,無法事先知道使用者將載入什麼類別(例如載入JDBC驅動程式),而必須讓使用者指定類別名稱以載入類別。你可以使用Class的靜態forName()方法實現動態加載類別,以下是個簡單示範,可以指定類別名稱來獲得類別的相關資訊:
try {
Class c = Class.forName(args[0]);
System.out.println("類別名稱:" + c.getName());
System.out.println("是否為介面:" + c.isInterface());
System.out.println("是否為基本型態:" + c.isPrimitive());
System.out.println("是否為陣列:" + c.isArray());
System.out.println("父類別:" + c.getSuperclass().getName());
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("沒有指定類別名稱");
}
catch(ClassNotFoundException e) {
System.out.println("找不到指定的類別");
}
http://caterpillar.onlyfun.net/Gossip/JavaEssence/ClassForName.html
try {
Class c = Class.forName(args[0]);
System.out.println("類別名稱:" + c.getName());
System.out.println("是否為介面:" + c.isInterface());
System.out.println("是否為基本型態:" + c.isPrimitive());
System.out.println("是否為陣列:" + c.isArray());
System.out.println("父類別:" + c.getSuperclass().getName());
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("沒有指定類別名稱");
}
catch(ClassNotFoundException e) {
System.out.println("找不到指定的類別");
}
http://caterpillar.onlyfun.net/Gossip/JavaEssence/ClassForName.html
訂閱:
文章 (Atom)
