我想生成用于员工存储在数据库中的Sequential Trnsaction ID ...我写了下面的jsp代码(这不是在数据库中插入Tx ID的代码)..代码工作正常..当我使用order by子句来查看最新的事务..我没有得到预期的转换ID ...我如何使事务ID的唯一,顺序,以便我可以通过使用Order By子句以特定的顺序检索它们?
<%
String url = "jdbc:mysql://localhost:3306/";
String dbName = "ystem";
String driver = "com.mysql.jdbc.Driver";
String userName = "root";
String password = "";
try {
Class.forName(driver).newInstance();
Connection conn = DriverManager.getConnection(url+dbName,userName,password);
Statement stat=conn.createStatement();
ResultSet rs=stat.executeQuery("select count(*) from `employee`");
int x=0;
UUID idOne = UUID.randomUUID();
while(rs.next()) {
x=Integer.parseInt(rs.getString(1))+1;
}
out.println(idOne.toString().toUpperCase()+"-"+String.valueOf(x));
stat.close(); conn.close();
}
catch(Exception x) {
out.println(x.getMessage());
}
%>
答案 0 :(得分:0)
撇开这种方法的智慧,将计数附加到UUID并不会给你一些order by
条款可以有意义地订购的东西,因为你正在创建{{1}形式的东西}。这不能按任何顺序排序,因为RANDOMSTUFF-2
将从第一个字符开始以词法方式对字符串列进行排序。
相反,请将计数器放在字符串的开头。然后你会有一些order by
可以有意义地排序:
order by
(虽然您可能希望/需要对String s = String.valueOf(x) + "-" + idOne.toString().toUpperCase();
的输出进行零填充,因为否则String.valueOf(x)
将被排序为"1000"
之前。所以您需要"2"
例如,输出为"2"
。)
(当然,你应该使用"0002"
(如果你的Java版本已经足够老了,则使用StringBuilder.append()
而不是字符串连接)。