用Java生成顺序事务ID

时间:2012-03-25 16:46:27

标签: java database string

我想生成用于员工存储在数据库中的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());
        }
    %>

1 个答案:

答案 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()而不是字符串连接)。