Hi everyone i have a question and stuck with this problem. i have a table like Brand in mySql db where brandid(varchar) is generating automatically.. im having a Db connection class and a method for generating id. Mycode for id generation is:
public String GetId(String sql, String strchar) { int num; String strid, value; try { stmt = conn.createStatement(); rst = stmt.executeQuery(sql); // System.out.println("stmt executed"); if (rst.next()) { strid = rst.getString(1); // System.out.println("strid is:"+strid); if (strid == null) { return strchar + "1"; } else { num = Integer.parseInt(strid.substring(2, 3)); //System.out.println("inside if"); System.out.println("id is:" + (num + 1)); num++; return strchar + num; } } return strchar + "1" + "hi"; } catch (SQLException sq) { System.out.println("error" + sq); return "error"; } }
my problem is after generating BR9 max(brandid) will always give BR9 instead of BR10 even if BR10 is inserted.So after a row with BR9 again and again i have Br10 inserted when executing the getid() ,because BR9 is getting after max(brandid).i know one solution that is to give start id as BR1001,but i think it is not obsolete because after the range BR9999 ,max(brandid) will always give BR9999.can anyaone suggest me good solution for that.Thanks in advance.
anyway i found answer to my question
use query like
String bid = dbconn.GetId("select max(cast(substring(BrandId,3)as unsigned)) from brand", "BR")
and my db class method shoul be like:
stmt=conn.createStatement(); rst=stmt.executeQuery(sql); if(rst.next()) { num=rst.getInt(1); if(num == 0) { return strchar + "1"; } else{ num++; // System.out.println("hi"+num); return strchar +num; } }
Ads