2008年6月30日 星期一

[Java] URLEncoder 使用方式

若要在網址列傳中文字串,需要編碼
URLEncoder.encode("要編碼的字串","UTF-8")
相對的,有加密也有解密,通常Bowser會自己解
URLDecoder.decode("要解碼的字串","UTF-8")

[Java] JavaMail 使用方式

今天因為要把補發密碼的方式,改為用Email的方式,所以去JavaWorld挖出了下面的程式碼,之後有時間在補詳細的說明好了
public void dosend() {
try {
//設定所要用的Mail 伺服器和所使用的傳送協定
Properties props = new Properties();
props.put("mail.host", mailserver);
props.put("mail.transport.protocol", "smtp");
Session session = Session.getInstance(props,null);
session.setDebug(true);
MimeMessage msg = new MimeMessage(session);
//設定傳送郵件的發信人
msg.setFrom(new InternetAddress(From));
//設定傳送郵件至收信人的信箱
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(To));
//設定信中的主題
msg.setSubject(Subject);
//設定送信的時間
msg.setSentDate(new Date());
//設定傳送信的MIME Type
msg.setText(messageText);
//送信
Transport.send(msg);

} catch (Exception e) {
e.printStackTrace();
}
}

[Java] Hashtable 使用方法

宣告使用Hashtable的程式碼如下:
import java.util.Hashtable;

Hashtable<String, String>ht = new Hashtable<String, String>();

把值放入Hatable的程式碼ht.put(名稱, 變數)

ht.put("ID","abcde");

取出ht.get(名稱)

String text = ht.get("ID");

text輸出的文字為abcde

[Java] Vector 的用法

Vector類似陣列,我稱為可變動性陣列,下面為宣告方式
import java.util.Vector;

Vector vc = new Vector();

增加值的方法
vc.add(20); //0
vc.add(40); //1
vc.add(30); //2

取出值的方法vc.get(int index)
vc.get(0);

也可以排序,但須另使用Collections這個類別,程式碼如下
import java.util.Collections;

Collections.sort(vc);

輸出結果,以上面的例子為例:20,40,30 => 20,30,40

2008年6月29日 星期日

[Java] 產生亂數的方法

簡單來說,就是回傳一個正的double數值,他是介於0.0~1.0之間,但不包含1.0的值。

而如果我們要產生一個1~42的亂數,該怎樣做呢?答案其實很簡單,因為Math.random()是回傳0.0~1.0之間的值,所以我們可以把Math.random()乘以42後,即會變成0.0~42.0的值,但不包含42,再強制轉換成int型態後,再加上1即可。

而程式碼來說明,即是下段程式碼:
import java.lang.Math;

int rnum = (int)(Math.random()*42+1);

[Hibernate] hibernate one-to-many mapping

資料表
Parent{
column:id,name
PK:id
}
Child{
column:id,name,ref_parent_id
PK:id
FK:ref_parent_id
}


DAO資料模型
package eg;
public class Parent{
private Integer Id;
private String Name;
private Set Children;
/*
getter and setter 省略
*/
}


package eg;
public class Child{
private Integer Id;
private String Name;
private Parent RefParent;
/*
getter and setter 省略
*/
}

hibernte mapping檔案
Parent.hbm.xml{
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="eg">
<class name="Parent" table="Parent">
<id column="id" name="Id" type="integer">
<generator class="native">
</id>
<property column="name" length="50"
name="Name" type="string"/>
<set cascade="all" inverse="true" name="Children">
<key column="ref_parent_id"><!--重要:Children的FK而不是PK-->
<one-to-many class="Child">
</set>
</class>
</hibernate-mapping>
}


Child.hbm.xml{
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="eg">
<class name="Child" table="Child">
<id column="id" name="Id" type="integer">
<generator class="native">
</id>
<property column="name" generated="never" length="50"
name="Name" type="string"/>
<many-to-one class="Parent" column="ref_parent_id" name="RefParent" null="true">
</class>
</hibernate-mapping>
}

實際操作
取得Parnet List,連帶取得Child的Set

//open session lazy=true
Query query = null;
Session hsession = null;
List<Parent> list=null;
int i=0;
query=hsession.createQuery("FROM Parent");//
query.setFirstResult(0);
query.setMaxResults(5);//取5筆
list=query.list();
for(i=0;i<list.size();i++){
out.println("Parent 有 "+list.get(i).getChildren().size()+"個Child");
}
//close session

//取得指定Parent,關閉session,再取得Parent的Children
//open session lazy=true 延遲讀取
Query query = null;
Session hsession = null;
List<Parent> list=null;
int i=0,n=1;
query=hsession.createQuery("FROM Parent p WHERE p.Id=:id");
query.setInteger("id",n);
Parent p =(Parent)query.uniqueResult();
Hibernate.initialize(p.getChildren());
//close session
out.println("Parent 有 "+p.getChildren().size()+"個Child");

[Java] String 的方法 trim() 去除空白字元

在下面的例子中 display 前後有空白字元,可以用字串中的trim()去除空白字元

String display = " abc ";

System.out.println(display.trim());

印出的結果:abc

[Hibernate] hibernate one-to-one mapping

資料表
ObjA{
column:id,name
PK:id
}


ObjB{
column:ref_obja_id,name
PK:ref_obja_id
FK:ref_obja_id
}


DAO資料模型
package eg;
public class ObjA{
private Integer Id;
private String Name;
private ObjB ObjB;
/*
getter and setter 省略
*/
}


package eg;
public class ObjB{
private Integer RefObjAId;
private String Name;
private ObjA RefObjA;
/*
getter and setter 省略
*/
}



hibernte mapping檔案
ObjA.hbm.xml{
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="eg">
<class name="ObjA" table="ObjA">
<id column="id" name="Id" type="integer">
<generator class="native">
</id>
<property column="name" length="50"
name="Name" type="string"/>
<one-to-one name="ObjB"
class="ObjB"
cascade="all"
/>
</class>
</hibernate-mapping>
}


ObjB.hbm.xml{
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="eg">
<class name="ObjB" table="ObjB">
<id column="ref_obja_id" name="RefObjAId" type="integer">
<generator class="foreign">
<param name="property">RefObjA</param>
</generator>
</id>
<property column="name" generated="never" length="50"
name="Name" type="string"/>
<one-to-one name="RefObjA"
class="ObjA"
constrained="true"
/>
</class>
</hibernate-mapping>
}

[Java] StringBuffer使用方式

import java.lang.StringBuffer

StringBuffer xml = new StringBuffer();
xml.append("要輸出的字串");
xml.toString();

[Java] String 的方法 split (切割字串)

String display = "a&b&c";

String[] arrayS = display.split("&");

回傳一個字串的陣列 可用for把值給取出

在Blogger中貼上程式碼

CODE{
display: block; /* fixes a strange ie margin bug */
font-family: Courier New;
font-size: 8pt;
overflow:auto;
background: #f0f0f0 url(http://klcintw.images.googlepages.com/Code_BG.gif) left top repeat-y;
border: 1px solid #ccc;
padding: 10px 10px 10px 21px;
max-height:200px;
height:200px; // for IE6
line-height: 1.2em;
}



從以下來源找到的
http://klcintw4.blogspot.com/2006/11/blog-post_03.html

[Java] SimpleDateFormate使用方式

import java.text.SimpleDateFormat;

SimpleDateFormat df =
new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

String display = df.format(System.currentTimeMillis());
System.out.println(display);

df.parse(String source)可回傳Date()型態
Date d = df.parse("2010-01-01");





yyyy:代表西元年
MM:月份
dd:日
HH:時
mm:分
ss:秒

[Java] 將字串轉成整數

String a = "12345";
int b = Integer.parseInt(a);

2008年6月28日 星期六

[Hibernate] hibernate DAO 資料表對應物件

public class Account {

private String apid;
private String id;
private String pw;

get和set,用eclipse可以自動產生 如下

public String getApid() {
  return apid;
}
public void setApid(String apid) {
  this.apid = apid;
}

}

2008年6月24日 星期二

JavaScript login驗證

chkform=function(){
var PhoneNumber=document.getElementById('PhoneNum');

 if(PhoneNum.value==''){
  alert('請輸入帳號');
  PhoneNum.focus();
  return false;
 }

}

在表單送出時 可以用JavaScript 去驗證是否有欄位沒有填
表單範例
<form id="form1" name="form1" method="post" action="xxx.jsp" onsubmit="javascript:return(chkform());>
<input name="PhoneNum" id="PhoneNum" type="text">
<input type="submit" name="Submit" value="確認" />