今天下午看了廠商DEMO了RFID模組,
在無限RFID的那個模組我這邊應該是沒有應用的可能,
但是另外一個教學用RFID模組我到是有一點好奇,
可以讀取和修改卡片的資料,
當作儲值卡、電子錢包來用的話,
倒是可以用來作為線上交費的功能,
可是這樣的話不僅要能夠用那個模組連接資料庫,
而且每個想使用此功能的人家裡都要有一台,
這樣成本過高大概不會有人想要用.
重點在於他是用.NET來寫應用程式,
要改成網頁形的話還要改寫成JAVA來跟JSP結合,
這樣子應該還要花上不短的時間,
我認為想要把他結合到專題裡恐怕有些困難!
2009年4月28日 星期二
商品到期機制的資料刪除(5/8修改)
原本我的商品到期以後只有設定顯示商品到期,
但是後來加入到期後刪除資料的地方卻發生錯誤,
while(rs.next)
{
int id=rs.getint(article_id);
...
if(設定時間==目前時間)
{
stmt.executeUpdate("delete from time where article_id=id;");
}
}
發生錯誤的地方如上,
如果以這樣方式的話,
在刪除一筆資料時不會錯誤,
但如果有多筆資料的設定時間都一樣時,
刪除第一筆完後就會發生錯誤,
我猜測的原因是因為當刪除時,
rs的指標會因為在刪除第一筆資料後,
檢查下一筆時因為同樣需要刪除,
導致指標可會指向錯誤而發生錯誤.
(後來確定是由於是使用同一個STMT,
所以當我刪除以後就會失去的原本的資料)
而我原本設計成如果到期,
則跳到另一個網頁刪除後再跳回,
想不到同樣會出現錯誤,
而最後我就想直接從rs的地方下手,
上網搜尋了以後發現了rs.deleteRow()函式,
此函是可以直接把目前rs指標指向的資料整筆刪除,
不過一開始要把stmt的rs權限設定為CONCUR_UPDATABLE,
讓它可以去改資料庫的內容,
然後把程式碼改成:
while(rs.next)
{
...
if(設定時間==目前時間)
{
rs.deleteRow()
}
}
這樣就可以直接把到期的商品資料做刪除的動作了.
但是後來加入到期後刪除資料的地方卻發生錯誤,
while(rs.next)
{
int id=rs.getint(article_id);
...
if(設定時間==目前時間)
{
stmt.executeUpdate("delete from time where article_id=id;");
}
}
發生錯誤的地方如上,
如果以這樣方式的話,
在刪除一筆資料時不會錯誤,
但如果有多筆資料的設定時間都一樣時,
刪除第一筆完後就會發生錯誤,
我猜測的原因是因為當刪除時,
rs的指標會因為在刪除第一筆資料後,
檢查下一筆時因為同樣需要刪除,
導致指標可會指向錯誤而發生錯誤.
(後來確定是由於是使用同一個STMT,
所以當我刪除以後就會失去的原本的資料)
而我原本設計成如果到期,
則跳到另一個網頁刪除後再跳回,
想不到同樣會出現錯誤,
而最後我就想直接從rs的地方下手,
上網搜尋了以後發現了rs.deleteRow()函式,
此函是可以直接把目前rs指標指向的資料整筆刪除,
不過一開始要把stmt的rs權限設定為CONCUR_UPDATABLE,
讓它可以去改資料庫的內容,
然後把程式碼改成:
while(rs.next)
{
...
if(設定時間==目前時間)
{
rs.deleteRow()
}
}
這樣就可以直接把到期的商品資料做刪除的動作了.
2009年4月26日 星期日
本週進度
我本週預計先協助組員將每個商家的物品列表完成,
完成以後就可以開始設計商家RSS訂閱系統,
目前整組除了使用者方面的進度比較慢以外,
而商品和搜尋部分都很順利進行中,
較複雜的RSS和GOOGLE MAP部分也應該很快就可以開始進行.
完成以後就可以開始設計商家RSS訂閱系統,
目前整組除了使用者方面的進度比較慢以外,
而商品和搜尋部分都很順利進行中,
較複雜的RSS和GOOGLE MAP部分也應該很快就可以開始進行.
商品到期機制
由於商家和上傳商品的部分尚未整合好,進階搜尋也已經完成,所以我就開始設計商品到期機制.
這個部分不難,主要的問題在於如何得到上傳商品的時間,
而這個功能可以用Calendar.getInstance()來得到系統目前時間,
不用像getyear()、getmonth()這樣分開來抓資料,
例如,
Calendar c=Calendar.getInstance( );
c.get(Calendar.YEAR);
可取得年.
又例如,
c.get(Calendar.MONTH);
可取得月.
所以我上傳商品的就寫入目前的時間和限制的日數,
然後當有使用者查看商品時,
就將上傳時的時間加上限制日數,
和查看時的時間來做比較,
如果相同就顯示商品到期,
不同就給予查看.
另外Calendar.getInstance()的詳細用法和欄位常數可以看這投影片:
點我!!!
這個部分不難,主要的問題在於如何得到上傳商品的時間,
而這個功能可以用Calendar.getInstance()來得到系統目前時間,
不用像getyear()、getmonth()這樣分開來抓資料,
例如,
Calendar c=Calendar.getInstance( );
c.get(Calendar.YEAR);
可取得年.
又例如,
c.get(Calendar.MONTH);
可取得月.
所以我上傳商品的就寫入目前的時間和限制的日數,
然後當有使用者查看商品時,
就將上傳時的時間加上限制日數,
和查看時的時間來做比較,
如果相同就顯示商品到期,
不同就給予查看.
另外Calendar.getInstance()的詳細用法和欄位常數可以看這投影片:
點我!!!
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陣列.
訂閱:
文章 (Atom)