這個功能需求是這樣的,編碼是由5個條件限定而成,前四個是從列表中隨意選擇,後乙個是根據型別按照序列遞增,整個編碼是由這5個條件組合而成,如下圖所示:
此外還需滿足:1)生成的最終編碼是唯一的;2)可以批量生成。
我們先看單項生成的例子。
一、單項生成
背景:資料庫裡有匯入歷史資料,生成規則是按照選擇的字元+流水號組合而成,且生成的編碼唯一;流水號自增,從01開始。
思路:從資料庫裡select出5級條件限定的流水號的最大值,遞增1;組合5個條件即可;解決了生成唯一性的問題,不需要檢查重複值。
生成**:
public arraylistsingen(string l1,string l2,string l3,string l4,string l5) throws sqlexception, parseexception else if(temp>9)
}else
sc=new skucode();//物件賦值
sc.setl1(l1);
sc.setl2(l2);
sc.setl3(l3);
sc.setl4(l4);
sc.setl5(l5);
sc.setsku(l1+"-"+l2+"-"+l3+"-"+l4+"-"+l5);//生成編碼格式
sc.setcreatetime(today);
sclist.add(sc);//新增到物件列表
}
}else if(l5!=null&&l5.equals("s+流水號")) else if(temp>9)
}else
sc=new skucode();
sc.setl1(l1);
sc.setl2(l2);
sc.setl3(l3);
sc.setl4(l4);
sc.setl5(l5);
sc.setsku(l1+"-"+l2+"-"+l3+"-"+l4+"-"+l5);
sc.setcreatetime(today);
sclist.add(sc);}}
return sclist;//返回物件列表
}
寫入資料庫**:
//新增方法(寫入資料庫)
public void add(skucode sc) throws sqlexception catch(sqlexception e)
}
二、多項生成
多項生成的基本**與單項生成基本相同,不過在生成時多了一項迴圈,前端傳來引數生成多少條,這邊就迴圈幾次
生成**(部分):
public arraylistgen(string l1,string l2,string l3,string l4,string l5,string num) throws sqlexception,parseexception else
sc=new skucode();
sc.setl1(l1);
sc.setl2(l2);
sc.setl3(l3);
sc.setl4(l4);
sc.setl5(l5);
sc.setsku(l1+"-"+l2+"-"+l3+"-"+l4+"-"+l5);
sc.setcreatetime(today);
sclist.add(sc);
} }else else
sc=new skucode();
sc.setl1(l1);
sc.setl2(l2);
sc.setl3(l3);
sc.setl4(l4);
sc.setl5(l5);
sc.setsku(l1+"-"+l2+"-"+l3+"-"+l4+"-"+l5);
sc.setcreatetime(today);
sclist.add(sc);}}
}}
三、檢測重複值
背景:這塊是遺留問題,資料庫裡的歷史資料導致有部分編碼的流水號是從中途開始的,例如從80開始;那麼按照上述規則取最大值肯定是從81開始遞增;實際需要從01開始。
思路:流水號直接從01開始遞增,將整個編碼跟資料庫比對,如果資料庫裡存在,則跳過這個流水號往下遞增,如果不存在則輸出結束迴圈。
缺點:資料量大的話效能會崩潰
生成**(部分):
//多項生成方法
public arraylistgen(string l1,string l2,string l3,string l4,string l5,string num) throws sqlexception,parseexception else
sc=new skucode();
sc.setl1(l1);
sc.setl2(l2);
sc.setl3(l3);
sc.setl4(l4);
sc.setl5(l5);
sc.setsku(l1+"-"+l2+"-"+l3+"-"+l4+"-"+l5);
string sku=sc.getsku();
string sql1 = "select count(sku) from sku where sku like ? and type=2";//資料庫比對是否存在該項生成的編碼
conn=dbutil.getconnection();
ps=conn.preparestatement(sql1);
ps.setstring(1, sku);
resultset rs=ps.executequery();
while(rs.next())
}while(count!=0);//不存在則結束迴圈;存在的話返回流水號繼續遞增再比對
sc.setcreatetime(today);
sclist.add(sc);//新增物件列表}}
四、前端傳入部分**
request.setcharacterencoding("utf-8");
string l1=request.getparameter("l1");
string l2=request.getparameter("l2");
string l3=request.getparameter("l3");
string l4=request.getparameter("l4");
string l5=request.getparameter("l5");
skucodedaoimpl skucode = new skucodedaoimpl();
arraylistsclist = skucode.singen(l1,l2,l3,l4,l5);//傳參
for (skucode s : sclist)%>
以上就是全部實現方式,新手編碼不成熟,以作總結。 JSP的編碼問題
真是太奇怪了。今天做jsp的作業的時候,從資料庫取出來的中文直接set到session裡的話,再取出來竟然變成了亂碼。問老師,老師竟說這是正常的。說有些時候,jsp放資料到session裡會亂碼,而有些時候,又不會亂碼。會不會亂碼,存在不確定性。這太鬱悶了!老師說,遇到這種問題的時候,需要把字串的編...
jsp中的編碼問題
1.名詞解釋及其作用 1.contenttype page contenttype text html charset utf 8 2.pageencoding page pageencoding utf 8 3.html頁面charset 4.setcharacterencoding reques...
Thinkphp 修改U方法按路由規則生成url
tp開戶路由後,使用u方法是不會按路由規則生成url的,一般我們是要手動修改模版,把裡面的u方法去掉,手動修改鏈結,如果是已經寫好的程式,後期才新增路由,修改起鏈結就太麻煩了 今天無聊就修改了一下u方法,讓它按路由規則生成url,再不用一條條修改模版了哈哈哈哈哈哈 下面 新增到 thinkphp c...