0

テーブルで user_id 列を使用しており、新しいユーザーが登録されるたびに 1 ずつ増加します。しかし、U10 の後、useId は増加せず、この後、各新規ユーザーは userId U10 を持ちます。私は MySql を使用していますが、これを解決する方法、またはこれを達成するための他の方法を提案してください。

以下は、 userIdを生成するための私のコードです

               public int addUser(UserTO uto){
         int status=0;
         PreparedStatement ps1=null;
           PreparedStatement ps2=null;
            PreparedStatement ps3=null;
          Connection con=DBUtil.getMySqlConnection(); 
            String new_user_id=null;    
try{
     ps1=con.prepareStatement("select user_id from users order by user_id");   
    ResultSet rs1=ps1.executeQuery();   
    if(rs1.last()){
    int id=Integer.parseInt((rs1.getString(1).substring(1)));
    new_user_id="U"+(id+1);
          }
  else{

        new_user_id="U1";

    }
     uto.setUserid(new_user_id);


      ps3=con.prepareStatement("insert into users values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
     ps3.setString(1,uto.getUserid());
     ps3.setString(2,uto.getType());
     ps3.setString(3,uto.getUsername());
     ps3.setString(4,uto.getPassword());
     ps3.setString(5,uto.getFirstname());
     ps3.setString(6,uto.getMiddlename());
     ps3.setString(7,uto.getLastname());
     ps3.setString(8,uto.getPhone());
     ps3.setString(9,uto.getFax());
     ps3.setString(10,uto.getEmail());
     ps3.setString(11,uto.getJobtitle());
     ps3.setString(12,uto.getDepartment());
     ps3.setString(13,uto.getCompanyname());
     ps3.setString(14,uto.getLocation());
     ps3.setString(15,uto.getGender());
     ps3.setString(16,uto.getClientid());

     status=ps3.executeUpdate();         

   }catch(Exception e){
        e.printStackTrace();
   }finally{
         DBUtil.cleanup(ps1,con);
         DBUtil.cleanup(ps2,con);
         DBUtil.cleanup(ps3,con);
   }
return status;

}

4

1 に答える 1

0

この行の文字列に整数を追加しているという事実と関係があると思いますが、よくわかりません。Javaについてはよくわかりません。

new_user_id="U"+(id+1);

ただし、最初のクエリをスキップして、後続のINSERTクエリ内でuser_idを生成することもできます。これらはすべてSQLを使用します。何かのようなもの

INSERT INTO users VALUES(CONCAT("U", IFNULL(MAX((SELECT CAST(SUBSTRING(user_id, 2) AS UNSIGNED) FROM users)), 0) + 1), ?, ?, ?....

その場合は、そのクエリにバインドしている最初のパラメータを削除する必要があります。

ユーザーのプライマリIDにAUTO_INCREMENTを使用していない理由を尋ねるつもりはありません。

于 2012-05-09T06:20:30.420 に答える