jsp按規則生成編碼問題

2021-08-19 19:24:31 字數 3528 閱讀 1247

這個功能需求是這樣的,編碼是由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...