import java.io.*;
import java.sql.*;
public class JavaTest{
public static void main(String[] args){
try{
abc("5a");
}catch(Exception e){
System.out.println(e.getMessage());
}
}
public static void abc(String a)throws MyException{
int value=0;
try{
value+=(100/Integer.parseInt(a));
}catch(Exception e){
throw new MyException(e);
}
}
}
class MyException extends Exception{
private Exception e;
MyException(Exception e){
this.e=e;
}
public String getMessage(){
if(e instanceof NumberFormatException){
return "數字格式錯誤";
}else if(e instanceof ArithmeticException){
return "數值錯誤";
}
return "發生不明錯誤,程式即將關閉,若有疑問請洽網路工程師";
}
}
2007年3月23日 星期五
自己的例外類別範例
2007年3月21日 星期三
列舉型別
J2SE 5.0最新的使用方式:列舉型別(enumerated type)
(跟java.util.Enumeration一點關係都沒有)
example
==========================================================================
//MyWeek可視為類別,所以可以單獨寫或內類別
enum MyWeek{
mw0("星期日"),//呼叫建構方法
mw1("星期一"),
mw2("星期二"),
mw3("星期三"),
mw4("星期四"),
mw5("星期五"),
mw6("星期六");//分號表示列舉宣告結束
private String name;
//1.對應上面的呼叫
//2.注意:此建構方法的存取方法只能private或不宣告,(否則會compiler error)
宣告成private是比較貼切的,因為enum的精神就是不讓使用者自己建構物件,
只能使用程式設計師所定義的元件
private MyWeek(String name){
this.name=name;
}
//須OverRide
public String toString(){
return name;
}
}
public class JavaTest{
public static void main(String[] args){
MyWeek m=MyWeek.mw4;
/*列舉型別非常特殊的使用方式,switch可以引入列舉變數,
不再限定使用int型別,在實務上非常的實用。*/
switch(m){
case mw0:
System.out.println(0);
break;
case mw1:
System.out.println(1);
break;
case mw2:
System.out.println(2);
break;
case mw3:
System.out.println(3);
break;
case mw4:
System.out.println(4);
break;
case mw5:
System.out.println(5);
break;
case mw6:
System.out.println(6);
break;
}
}
}
/*
這是舊式的寫法
1.缺點一:使用者可以自行建立MyWeek物件 例:MyWeek mw=new MyWeek("星期八",10);
class MyWeek{
public static final MyWeek mw1=new MyWeek("星期一",1);
public static final MyWeek mw2=new MyWeek("星期二",2);
public static final MyWeek mw3=new MyWeek("星期三",3);
public static final MyWeek mw4=new MyWeek("星期四",4);
public static final MyWeek mw5=new MyWeek("星期五",5);
public static final MyWeek mw6=new MyWeek("星期六",6);
public static final MyWeek mw0=new MyWeek("星期日",0);
private String name;
private int number;
MyWeek(String name,int number){
this.name=name;
this.number=number;
}
public String toString(){
return name;
}
public int getNumber(){
return number;
}
}
*/
2007年3月14日 星期三
Proxool連接池
Proxool連接池是另一套功能更強大、好用的連接工具
下載位址:http://proxool.sourceforge.net/download.html
使用方式非常簡單:
Step 1.
把下載的Jar檔複製到Tomcat\webapps\webHome\WEB-INF\lib
Step 2.
建立以下兩個檔案
Tomcat\webapps\webHome\WEB-INF\web.xml
Tomcat\webapps\webHome\WEB-INF\classes\Proxool.properties
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.configuration.ServletConfigurator
</servlet-class>
<init-param>
<param-name>propertyFile</param-name>
<param-value>WEB-INF/classes/Proxool.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
Proxool.properties
jdbc-0.proxool.alias=mySQL
jdbc-0.proxool.driver-class=com.mysql.jdbc.Driver
jdbc-0.proxool.driver-url=jdbc:mysql://localhost/sellweb
jdbc-0.user=root
jdbc-0.password=root
jdbc-0.proxool.maximum-connection-count=10
jdbc-0.proxool.prototype-count=4
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
jdbc-0.proxool.verbose=true
jdbc-0.proxool.statistics=10s,1m,1d
jdbc-0.proxool.statistics-log-level=DEBUG
verbose=true ==>true 表示取得詳細的連線池訊息,對連線池的資料進行定時統計
statistics=10s,1m,1d ==>統計的時隔可以分為s(econds),、m(inutes)、h(ours)與d(ays)
簡易測試網頁
<%@page import="java.sql.*"%>
<%@page contentType="text/html;charset=Big5"%>
<%
Connection connection = null;
try {
connection = DriverManager.getConnection("proxool.mySQL");
if (connection != null) {
out.println("資料庫連線測試成功!");
}
connection.close();
}
catch(SQLException e) {
out.println("失敗"+e.toString());
}
%>
2007年3月4日 星期日
資料庫轉換的心得分享
為了工作上需要,必需將Sql2000的資料全部轉移到Mysql,
一筆一筆的輸入實在太慢了,所以就到網路找到一個軟體「mssql-to-mysql」,
轉移資料非常快速,一下子就用好了。
若有需要再貼使用說明圖吧。
在使用「mssql-to-mysql」在進行資料庫轉換的時後,會顯示沒有InnoDB。
什麼叫InnoDB呢?
原來Mysql資料表預設型態是不使用foreign key的,稱為MyISAM,若要使用foreign key的功能,必需將InnoDB開啟,而Mysql預設是沒打開的,所以現在要打開它。
找到my.ini,修改內容如下(其實需要設定更多,而我只要能run,就行了)
# Use this option if you have a MySQL server with InnoDB support enabled
# but you do not plan to use it. This will save memory and disk space
# and speed up some things.
#把下面這行換作註解
#skip-innodb
#換成下面這行,啟動 innodb
innodb_checksums
修改完之後,重新啟動mysql就行了。
相關詳細的設定說明:
1.InnoDB 中文參考手冊 --- 犬犬(心帆)翻譯
2.綠光森林:在mysql上使用foreign key
資料庫連接池(Connection Pool)-簡化取得Connection的過程
在看jsp網頁程式的時後,發現每個網頁都有寫連線的程式,
感覺以後要轉換資料庫,或是資料庫改名的時後,必須一頁一頁改,
看到了Connection Pool的說明,再怎麼困難也要學起來…以後就輕鬆了。
1.透過Connection Pool的設定,可以簡化取得資料庫連線(Connection)的過程
2.若以後連接方式有改變,例如抽換連線Driver,可以只需改連接池的設定即可,不需一頁一頁JSP修改
3.連接池的運作方式是一開始向資料庫要許多連線,放在池(Pool)內,有需要的人從池中取得連線,不用時交還
4.Tomcat可透過JNDI協定設定資料來源(即連接池)
先假設Wep App 的名稱為test,MySQL的帳號:root,密碼:root,連接到sellweb這個資料庫
在server.xml內的<context></context>中加入:
<Context path="/test" docBase="test" debug="0" crosscontext="true" reloadable="true">
<Resource name="jdbc/MySQL" auth="Container" type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/sellweb"
username="root" password="root"
maxActive="20" maxIdle="10" maxWait="-1"/>
</Context>
並在web.xml定義JNDI的資源
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app ....省略>
<resource-ref>
<description>JNDI JDBC DataSource of JSPLesson</description>
<res-ref-name>jdbc/MySQL</res-ref-name>
<res-type>javax.sql.DataSoure</res-type>
<res-auth>Container</res-auth>
</resource-ref>
重新啟動Tomcat
InitialContext類別屬於javax.naming套件,DataSource介面屬於javax.sql套件,Connection介面屬於java.sql套件。所以均需要引入上述套件。
index.jsp
<%
Context initContext = new InitialContext(); //建立InitialContext物件
String strLookup = "java:comp/env/jdbc/MySQL";
DataSource ds =(DataSource)initContext.lookup(strLookup);
Connection conn = ds.getConnection(); //取得資料庫連結
Statement stmt = conn.createStatement();
String sql="select * from board ";
ResultSet rs=stmt.executeQuery(sql);
while( rs.next() ){
out.print(rs.getString(1));
out.print(rs.getString(2));
}
%>
參考:
1.Tomcat5.5.9的JNDI設定
2.JSP動態網頁入門實務 作者:郭尚君、李盈君 出版社:文魁資訊
3.上課資料