由於商家和上傳商品的部分尚未整合好,進階搜尋也已經完成,所以我就開始設計商品到期機制.
這個部分不難,主要的問題在於如何得到上傳商品的時間,
而這個功能可以用Calendar.getInstance()來得到系統目前時間,
不用像getyear()、getmonth()這樣分開來抓資料,
例如,
Calendar c=Calendar.getInstance( );
c.get(Calendar.YEAR);
可取得年.
又例如,
c.get(Calendar.MONTH);
可取得月.
所以我上傳商品的就寫入目前的時間和限制的日數,
然後當有使用者查看商品時,
就將上傳時的時間加上限制日數,
和查看時的時間來做比較,
如果相同就顯示商品到期,
不同就給予查看.
另外Calendar.getInstance()的詳細用法和欄位常數可以看這投影片:
點我!!!
2009年4月26日 星期日
2009年4月22日 星期三
==和 java.lang.String.equals()的不同
因為有時判斷的時候明明==的意思是正確的,但是依然會出現錯誤,所以我就放上這一篇做參考
轉載自:http://www.javaworld.com.tw/jute/post/view?bid=29&id=9578&sty=3&age=0&tpg=1&ppg=1
當比較兩個字串(String)時,使用 '==' 運算子和 java.lang.String.equals()這個
method有什麼不同呢?
'=='這個運算子會看看這兩個字串的references是不是指向同一個字串object。而
java.lang.String.equals()這個method則會比較這兩個字串的"值"是不是一樣的。換句
話說,比較這兩個字串是不是有相同的字元序列。
當使用String literals(一串被雙引號括住的字元)時,使用 '=='運算子和使用equals
method 的結果會是一樣的。所有的String literals都是指向同一個String 類別的
instances。系統中有一個pool,當有新的String literals出現時,系統會先去檢查pool
之中,是不是已經存在一個和這個新的String literals有相同內容的物件。如果存在,
則會傳回一個指向這個此物件的reference。若不存在,則會將此String literals放到
pool中,然後傳回這個物件的reference。
舉個例子:
String s1 = "hello";
String s2 = "hell"+"o";
System.out.println("Using equals op"+ (s1==s2)); //True
System.out.println("Using equals method" + (s1.equals(s2))); //True
當字串是由"new"這個關鍵字所造出來的時候,則不是這麼一回事。
String s3 = new String("hello");
String s4 = new String("hello");
System.out.println("Using equals op" + (s3==s4)); //False
System.out.println("Using equals method" + (s3.equals(s4))); //True
傳用"new"這個關鍵字時,會造出兩個不同的物件,所以會有兩個不同的references,即
使在底層的string literal是一樣的。在上面的例子中,'=='運算子傳回false,因為兩
個references是不同的。而equals method則傳回true,因為這兩個物件所代表是同樣的
字元序列。
轉載自:http://www.javaworld.com.tw/jute/post/view?bid=29&id=9578&sty=3&age=0&tpg=1&ppg=1
當比較兩個字串(String)時,使用 '==' 運算子和 java.lang.String.equals()這個
method有什麼不同呢?
'=='這個運算子會看看這兩個字串的references是不是指向同一個字串object。而
java.lang.String.equals()這個method則會比較這兩個字串的"值"是不是一樣的。換句
話說,比較這兩個字串是不是有相同的字元序列。
當使用String literals(一串被雙引號括住的字元)時,使用 '=='運算子和使用equals
method 的結果會是一樣的。所有的String literals都是指向同一個String 類別的
instances。系統中有一個pool,當有新的String literals出現時,系統會先去檢查pool
之中,是不是已經存在一個和這個新的String literals有相同內容的物件。如果存在,
則會傳回一個指向這個此物件的reference。若不存在,則會將此String literals放到
pool中,然後傳回這個物件的reference。
舉個例子:
String s1 = "hello";
String s2 = "hell"+"o";
System.out.println("Using equals op"+ (s1==s2)); //True
System.out.println("Using equals method" + (s1.equals(s2))); //True
當字串是由"new"這個關鍵字所造出來的時候,則不是這麼一回事。
String s3 = new String("hello");
String s4 = new String("hello");
System.out.println("Using equals op" + (s3==s4)); //False
System.out.println("Using equals method" + (s3.equals(s4))); //True
傳用"new"這個關鍵字時,會造出兩個不同的物件,所以會有兩個不同的references,即
使在底層的string literal是一樣的。在上面的例子中,'=='運算子傳回false,因為兩
個references是不同的。而equals method則傳回true,因為這兩個物件所代表是同樣的
字元序列。
2009年4月19日 星期日
本週進度
由於前兩個禮拜是期末考時間,
所以沒有進度.
另外這週我本來想要做有關商品資料修改的部分,
但是考慮會關係到如果可以修改的話會影響到買家的權益,
例如說有人下標後商家修改內容等,
所以這部分先不做,
改做商品的進階搜尋.
所以沒有進度.
另外這週我本來想要做有關商品資料修改的部分,
但是考慮會關係到如果可以修改的話會影響到買家的權益,
例如說有人下標後商家修改內容等,
所以這部分先不做,
改做商品的進階搜尋.
2009年4月4日 星期六
利用html+JSP傳陣列
傳陣列的問題困擾了我好幾天,主要是因為checkbox傳的名稱都只是單一的變數,沒有辦法寫成陣列,後來發現了request.getParameterValues語法,不過我以為是將a[1].a[2]...這樣的名稱用a來做為抓資料的媒介,想不到是光用a一個名稱就可以抓到多個資料,所以這部分我花了很久時間.
以下是詳細的用法:
while(rs.next())
{
id=rs.getString("article_id");
...
<*input name="delete" type="checkbox" value="<% out.print(id);%>" />
}
先抓取選擇到的id存到delete裡(我原本以為是存成delete[0]、delete[1]、...delete[n],當request.getParameterValues抓值會以delete當參考,不過這樣是錯誤的),
String delete[] = request.getParameterValues("delete");
把delete的值抓到delete陣列裡(會依照打勾的checkbox存值,都沒有的話會是NULL),
int size=java.lang.reflect.Array.getLength(delete);
抓delete陣列的大小(不知道為什麼如果用其他的整數變數似乎會錯誤),
for(int x=0;x<*size;x++)
{
out.println(delete[x]);
}
輸出delete陣列.
以下是詳細的用法:
while(rs.next())
{
id=rs.getString("article_id");
...
}
先抓取選擇到的id存到delete裡(我原本以為是存成delete[0]、delete[1]、...delete[n],當request.getParameterValues抓值會以delete當參考,不過這樣是錯誤的),
String delete[] = request.getParameterValues("delete");
把delete的值抓到delete陣列裡(會依照打勾的checkbox存值,都沒有的話會是NULL),
int size=java.lang.reflect.Array.getLength(delete);
抓delete陣列的大小(不知道為什麼如果用其他的整數變數似乎會錯誤),
for(int x=0;x<*size;x++)
{
out.println(delete[x]);
}
輸出delete陣列.
2009年3月31日 星期二
getString()問題
當一個變數儲存用getString抓取的資料庫的數值之後,無法直接在其他地方利用
以下是在抓取商品ID的最大值後,要儲存在picture的商品ID時候發生的錯誤
String strSQL ;
String test;
String article_idSQL ="SELECT MAX(article_id) FROM article";
rs=stmt.executeQuery(article_idSQL);
while(rs.next()){
test = rs.getString(1);
out.print(test);
}
strSQL = "INSERT INTO picture(picture_name,avail,article_id) values ('"+picture[s]+"','o','"+test+"')";
在執行時會發生test內容雖然是正確的,卻無法順利存入的情況.
解決的辦法是要將test變數做初始化的動作,也就是改成String test="";
就可以順利存入資料庫中,但詳細的錯誤原因不明.
以下是在抓取商品ID的最大值後,要儲存在picture的商品ID時候發生的錯誤
String strSQL ;
String test;
String article_idSQL ="SELECT MAX(article_id) FROM article";
rs=stmt.executeQuery(article_idSQL);
while(rs.next()){
test = rs.getString(1);
out.print(test);
}
strSQL = "INSERT INTO picture(picture_name,avail,article_id) values ('"+picture[s]+"','o','"+test+"')";
在執行時會發生test內容雖然是正確的,卻無法順利存入的情況.
解決的辦法是要將test變數做初始化的動作,也就是改成String test="";
就可以順利存入資料庫中,但詳細的錯誤原因不明.
2009年3月23日 星期一
本週進度(3/27修改)
本週主要進度要認識RSS的原理,不過由於目前的網站狀態比較難以測試,所以決定先把網站基本功能做好,再進一步設計測試RSS.
本週已經測試用QRCODE編寫由資料庫抓出的資料
目前撰寫資料列表網頁部份
本週已經測試用QRCODE編寫由資料庫抓出的資料
目前撰寫資料列表網頁部份
訂閱:
文章 (Atom)